2009-04-08 10 views
0

私は、時間に敏感な疑似ランダムワンタイムパスワードの生成を検討しています。時間の影響を受けやすいメッセージ検証ハッシュ - 緩やかな時間値を取得

メッセージを送信するには、ユーザーがパスワードを入力します。パスワードがメッセージとともにハッシュされます。生成されたハッシュは、確認のためにメッセージとともにサーバーに送信されます。サーバーは同じハッシュを実行し、その値を提供された値と比較します。

verificationKey = Hash(message + password); 

これはユーザーに対してメッセージを確認するのに問題ありませんが、攻撃者による繰り返しの送信を防ぐ必要があります。攻撃者は同じ情報を再度提出するだけで、受け入れられます。

本質的に、私はハッシュに含めるために緩やかな時間ベースのキーが必要です。何かは、異なる時間に対して異なるハッシュ値を意味するが、通信の遅れを説明するのに十分な余裕を持っている。

verificationKey = Hash(message + password + time); 

明らかに時間値が特定の場合、クライアントとサーバーの不一致が問題の原因になります。時刻の値が最も近い時間に丸められても、メッセージの通信に要した時間のために値が異なる可能性のある時刻(x:30)があります。

誰も私がこのような緩やかな時間の値を取得する方法についてどのような提案を与えることができますか?

+0

両方の良い答え - 私はたぶんdanbrucを実装するでしょう - それはより簡単です。おかげさまで – Damovisa

答えて

2

タイムスタンプを数秒(おそらく2,5,10)に丸めるだけです。サーバは、現在のものを1回、最後のタイムスタンプを使って1回検証するだけで2回試みる必要があります。

+0

+1私はあなたの提案が好きです - 前と次を試してみてください。計算が簡単で実装が簡単です。 –

+0

これは悪い解決策ではありませんが、現在の1回、前回の1回、次回の1回(サーバー時間が切れている場合)に3回確認する必要があります。 – Damovisa

1

1つのアプローチは、時間とともにハッシュし、次にでもに追加することです(難読化した後)。メッセージを受け取ったら、時間を取り除いて解読し、次にサーバ時間と比較してTimeSpanの比較を行います。それが十分に近い場合は、メッセージ全体を解読することができます。

+0

なぜタイムスタンプを暗号化するのですか?それをプレーンテキストで追加するとおそらくやりますか? –

+0

あなたがハッカーを心配していて、それがタイムスタンプであることを知るために賢い人がいると仮定した場合、彼はあなたに敵対する情報を与えました。暗号化する必要はありません。実際には、難読化するXORがHHMM文字列の明白さを取り除きます。 –

+0

いずれか悪い解決策ではありません:) – Damovisa

関連する問題