Google 認証アプリのような多くの 2 要素認証アプリを見てきました。
アプリはオフラインで動作し、30 秒ごとに電話のキーをリセットします。
では、サーバーはどのキーが有効かをどのように知るのでしょうか?
私はこれを理解するのに苦労していますか?
そして、もし私がそのようなアプリを自分で作成したとしたら。どうすればそうできますか?
Google 認証アプリのような多くの 2 要素認証アプリを見てきました。
アプリはオフラインで動作し、30 秒ごとに電話のキーをリセットします。
では、サーバーはどのキーが有効かをどのように知るのでしょうか?
私はこれを理解するのに苦労していますか?
そして、もし私がそのようなアプリを自分で作成したとしたら。どうすればそうできますか?
Google Authenticator は、時間ベースのワンタイム パスワード アルゴリズムを使用します。現在の時刻と共有秘密鍵を使用してコードを計算します。生成されたコードは、デバイスとサーバーに正しい時刻が設定されている限り検証されます。
Google 認証システムは、次の 2 つの方法を使用します。
「時間ベース」バージョン (TOTP) は、同期を維持するのが非常に簡単です。(あなたのデバイスとリモートサーバーの両方が同じ/正しい時刻を持っている必要があります。)
「カウンターベース」バージョン (HOTP) は同期を維持し (モバイル デバイスが機内モードであっても)、30 秒ごとに内部のカウンターを何らかの方法で更新します...そしてリモート サーバーも同じことを行います。
モバイル デバイスとリモート サーバー間の通信なしで、#2 カウンターが「同期」を維持できる (30 秒ごとに変化する) 方法について、Google はあまり明確ではないため、私は #1 のみを使用しました。