️TOTP の仕様をふかぼり — RFC・HMAC・ハッシュ方式

スマホの認証アプリの「30秒ごとに変わる6桁」(TOTP)が内部で何をしているかを RFC ベースで掘った。

全体像

時刻 ──▶ カウンタ T ──▶ HMAC(K, T) で20バイトのハッシュ ──▶ 6桁の数字

サーバとアプリが同じ秘密鍵 K と時刻から同じ計算を独立に行い、6桁が一致するか見るだけ。K は通信路に流れないし、HMAC は一方向なので数字から K を逆算できない。

TOTP は「暗号化」ではない。使うのは HMAC(鍵つきハッシュ)=一方向で、元に戻せない。本質は秘匿ではなく「正しい鍵を持つ人だけが値を再現できる」認証(MAC)。

RFC(2段構え)

  • RFC 4226 — HOTP
  • RFC 6238 — TOTP