Google認証システムは TOTPアルゴリズム を使用してワンタイムパスワード(OTP)を生成します。 TOTPは次のように機能します。クライアントがサーバーに登録すると、サーバーは秘密鍵を生成し、クライアント(あなた)と共有します。共有キーと現在のタイムスタンプを使用して、30秒ごとに新しいパスワードが生成されます。
誰かが共有キーを持っている場合、TOTPアルゴリズムを使用してOTPを自分で生成できます。これはパスワードに似ていませんか?パスワードは2つに減らないのではないですか-1つはログインに使用するパスワードで、もう1つはユーザーとサーバー間の共有キーです。
パスワードは使用するたびに明らかにされます。2つのパスワードがあり、それらを不正なWebフォームに入力すると、両方とも盗まれます。
共有シークレットは単一のOTP(またはそれらのセットからでも**)から計算できないため、盗まれたOTPは限られた時間のみ有効です。共有シークレットは認証中に転送されることはないため、盗むには別の攻撃方法が必要です。共有シークレットが保持されているデバイスにアクセスするか、初期化中にデバイス(QRコードなど)をコピーします。
**共有シークレットを逆に計算することは、一方向のアルゴリズムであるため、非常に非現実的です。また、キーの長さの最小値は128ビットであり、アルゴリズムが生成するのは6つの数値、つまり〜20ビットのOTPだけです。これは、すべてのOTPに対して潜在的な共有秘密の海が存在することを意味し、単一の一致を見つけることもブルートフォースでのみ可能です。つまり、30秒ごとに2 ^ 128ハッシュを計算し、一致しないすべてのOTPを除外します。