結果(6桁のコード+時間)しかわからない場合に、HOTP/TOTPシークレットを「回復」、「決定」、「推測」、「計算」、または「再現」することを考えました。
実際の秘密を知らなくても、HOTP/TOTPコードのライブ作成を表示できる場合。
HOTP(TOTPは今のところ時間に基づく特別なケースです)の計算方法を確認してください。シークレットシードのSHA1、SHA2(または最悪のセキュリティケースではMD5)のハッシュ関数といくつかのカウンターに基づくHMACを使用しています。結果の一部をPINとして返しています。
PINを傍受する攻撃として、未知の長さの秘密の種を見つけようとしています。
ハッシュ関数の定義に基づいて、(壊れていない限り)元に戻すことはできません。ハッシュ全体がある場合でも、単純に操作を逆にすることはできません。しかし、あなたは6から8の10進数を持っています。また、それらがより長い10進数文字列のどこに収まるかわかりません-これも最後のバイトに基づいて変更されます)。
それであなたが持っているオプションは何ですか?最も簡単な方法は、シードに可能なすべての値(たとえば、32 Bの16進文字列)を総当たりして、傍受したデータと比較することでしょう。 TOTPが生成された時間(30秒のタイムフレーム)もわかるので、これはTOTPで機能します。しかし、HOTPでは、カウンターが何であるかがわかりません(PINをインターセプトできなければall)。
OTPの長所は、アルゴリズムの複雑さと使いやすさです。私はそれがなぜ難しいのかを証明するつもりはありませんが、答えがあなたの質問とあなたが単純にそれができない理由をまとめた答えを願っています。