2要素認証アプリの仕組み

2022/01/30

  • 仕様: RFC6238 (TOTP)
  • 認証の流れ
    1. (スマホアプリ) インストールする
    2. (サービス側) ログインしたいサービスにログイン
    3. (サービス側) ログインしたアカウントで2要素認証をオン、アプリ使用に設定
      • このとき、サービス稼働サーバで秘密鍵(といってもSSL証明書(SSL証明書だとユーザごとに一意に大量に発行するのは向かない)ではなく、ランダムなbit列)を生成
      • この秘密鍵を文字列として含んだQRコードとして画面に表示
    4. (スマホアプリ) QRコードを読み取り、アプリ内にサーバ側で払い出された秘密鍵をインポート
    5. (双方) RFC6238, TOTPの仕様に則り、3.~4.の手順でサービスとスマホアプリで共有された秘密鍵と時刻をシード値として暗号学的(可逆計算が現実的な時間内では計算できない)ハッシュ関数を使ってハッシュ値を生成
      • ハッシュアルゴリズムにはSHA-1を使用するケースが多い
    6. (双方) このハッシュ値から、6ケタの数値を生成
      • これが6ケタの数字の正体。RFC6238では30秒ごとにリセットが望ましいとされているので、どのアプリも30秒でリセットされるようになっている
    7. 5.~6.の過程は双方で行われ、シード値となる秘密鍵と現在時刻が同じであれば同じハッシュ値・6桁数値になることが数学的に保証されているため、アプリ側の数字を入力、それをサーバ側では同じ方法で生成した同じ値の6ケタの数値と照合し、合致しているかどうかで認証を行う

という感じですね。

参考


Written by Circle
A mound built by the accumulation of hyperlinks are like Kowloon.