web-dev-qa-db-ja.com

HOTP / TOTPシークレットを推測するには、既知の時間と結果の組み合わせがいくつ必要ですか?

結果(6桁のコード+時間)しかわからない場合に、HOTP/TOTPシークレットを「回復」、「決定」、「推測」、「計算」、または「再現」することを考えました。

実際の秘密を知らなくても、HOTP/TOTPコードのライブ作成を表示できる場合。

  1. 秘密鍵を「推測」するために必要な既知の結果(時間と6桁のコードの組み合わせ)はいくつありますか?
  2. それで、秘密鍵を再利用して生成された出力を検証するために、秘密鍵を正常に回復できる可能性はどのくらいありますか?
  3. これを達成する方法の(コード)例はありますか?
5
Bob Ortiz

HOTP(TOTPは今のところ時間に基づく特別なケースです)の計算方法を確認してください。シークレットシードのSHA1、SHA2(または最悪のセキュリティケースではMD5)のハッシュ関数といくつかのカウンターに基づくHMACを使用しています。結果の一部をPINとして返しています。

PINを傍受する攻撃として、未知の長さの秘密の種を見つけようとしています。

ハッシュ関数の定義に基づいて、(壊れていない限り)元に戻すことはできません。ハッシュ全体がある場合でも、単純に操作を逆にすることはできません。しかし、あなたは6から8の10進数を持っています。また、それらがより長い10進数文字列のどこに収まるかわかりません-これも最後のバイトに基づいて変更されます)。

それであなたが持っているオプションは何ですか?最も簡単な方法は、シードに可能なすべての値(たとえば、32 Bの16進文字列)を総当たりして、傍受したデータと比較することでしょう。 TOTPが生成された時間(30秒のタイムフレーム)もわかるので、これはTOTPで機能します。しかし、HOTPでは、カウンターが何であるかがわかりません(PINをインターセプトできなければall)。

OTPの長所は、アルゴリズムの複雑さと使いやすさです。私はそれがなぜ難しいのかを証明するつもりはありませんが、答えがあなたの質問とあなたが単純にそれができない理由をまとめた答えを願っています。

5
Jakuje