「時間ベースのワンタイムパスワード」(TOTP)という用語については、すでに「二要素認証」(2FA)や「多要素認証」(MFA)と関連して理解しているかもしれません。
TOTP の意味
「時間ベースのワンタイムパスワード」とは、生成後30〜90秒間のみ有効なパスワードで、共有された秘密値とシステムの現在の時間に基づいて生成されます。
パスワードはほぼ常に6桁の数字で構成され、30秒ごとに変更されます。一方で、一部のTOTPの実装では4桁のコードを使用し、90秒後に無効になります。
TOTPアルゴリズムではオープンスタンダードが使用されており、この標準はRFC 6238で詳述されています。
共有秘密とは?
TOTP認証では、クライアントとサーバー間で共有される秘密鍵の形で存在する共有秘密が使用されます。
目に見える形では、共有秘密はBase32で表現された文字列のように見え、以下のような内容になります:
KRUGS4ZANFZSAYJAONUGC4TFMQQHGZLDOJSXIIDFPBQW24DMMU======
コンピュータは情報を理解し、解釈することができるため、その表示方法が人間にとって読みづらくても問題ありません。
クライアントとサーバーは、一度の秘密の伝送後、それぞれのシステムに共有秘密のコピーを安全に保存します。
もし攻撃者が共有秘密の値を発見できれば、彼らは自分自身のユニークなワンタイムパスワードを構築できるため、合法的になります。したがって、すべてのTOTPの実装では、共有秘密を安全に保存することに特に注意を払う必要があります。
システム時間とは?
すべてのコンピュータやスマートフォンには、いわゆるUnix時間を測定するための時計があります。
Unix時間は、1970年1月1日00:00:00 UTCから経過した秒数で計算されます。
Unix時間は単なる数字の列のように見えます:
1643788666
しかし、この小さな数字はワンタイムパスワードを生成するのに非常に適しており、Unix時間を使用する電子機器同士の同期性は十分に良好です。
TOTP 認証プロトコルの実装
パスワードの使用は推奨されません。しかし、従来のパスワードと時間ベースのワンタイムパスワード(TOTP)を組み合わせることで、安全性を高めることができます。この組み合わせは二要素認証または2FAと呼ばれ、アカウント、仮想プライベートネットワーク(VPN)、およびアプリケーションの安全な認証に使用されます。
TOTPはハードウェアトークンとソフトウェアトークンの両方で実装できます:
• TOTPハードウェアトークンは、現在のコードを表示する小さな画面を持つ実体のキーチェーンです。
• TOTPソフトウェアトークンは、スマートフォンの画面にコードを表示するモバイルアプリです。
ソフトウェアトークンを使用するかハードウェアトークンを使用するかに違いはありません。異なる2つの認証形式を使用する目的は、オンラインアカウントの保護レベルを高めることです。二要素認証中に、ワンタイムパスワード生成器を使用してアカウントへのアクセス権を取得できます。キーチェーンを持っている場合でも、認証アプリを搭載したスマートフォンを持っている場合でも、この生成器は使用可能です。
時間ベースのワンタイムパスワードの仕組みは?
共有秘密の値は、各時間ベースのワンタイムパスワード(TOTP)の生成に含まれ、現在の時間に依存します。
ワンタイムパスワードを生成するために、TOTPメソッドは現在のUnix時間と共有秘密の値を考慮します。
HMACベースのワンタイムパスワード(HOTP)メソッドでは、カウンターが現在の時間の値に置き換えられ、これは時間ベースのワンタイムパスワードアルゴリズムのバージョンです。
ワンタイムパスワード(TOTP)技術は、与えられた不確定長の入力に対して固定長の短い文字列を生成するハッシュ関数に基づいています。この解釈は過度な技術用語を避けます。ハッシュ関数の結果だけでは、それを生成するために使用された元のパラメータを再構築することはできません。これがハッシュ関数の利点です。
覚えておくべきことは、TOTPが提供するセキュリティはHOTPよりも高いということです。TOTPを使用すると、30秒ごとに新しいパスワードが生成されます。HOTPを使用すると、前のパスワードが入力されて使用されるまで新しいパスワードは生成されません。HOTPのワンタイムパスワードは認証後も有効であり、これがハッカーに成功する攻撃の大きな機会を提供します。
多要素認証(MFA)
ユーザーは、時間ベースのワンタイムパスワードをサポートする多要素認証(MFA)システムにTOTPトークンを登録する必要があります。このデバイスを使用してアカウントに接続するためです。
一部のTOTPソフトウェアトークンは、各アカウントごとに異なるOTP生成器を登録する必要があります。これは、2つのアカウントを認証アプリに追加すると、プログラムが30秒ごとに2つの一時パスワードを生成することを意味します。単一のTOTPソフトウェアトークン(認証プログラム)は、無限の数のワンタイムパスワード生成器をサポートできます。個別のワンタイムパスワード生成器が1つのアカウントのセキュリティが脅かされると、他のすべてのアカウントのセキュリティを保護します。
2FAを使用するには、TOTPトークンとセキュリティシステム間で秘密を作成し、共有する必要があります。その後、セキュリティシステムの秘密はトークンに渡される必要があります。
共有秘密をトークンに送信する方法は?
通常、セキュリティシステムはQRコードを作成し、ユーザーに認証アプリでスキャンするように要求します。
このタイプのQRコードは、長い文字列の視覚的表現です。共有秘密は大まかにこの長い列の一部です。
ユーザーが認証アプリでQRコードをスキャンすると、ソフトウェアは画像を文字列化し、秘密を抽出します。認証プログラムは、共有秘密を利用してワンタイムパスワードを生成できるようになります。
TOTPトークンを登録する際、秘密は一度だけ送信されます。多くのプライベートキーの盗難に関する懸念が軽減されます。攻撃者は秘密を盗むことができますが、彼らは最初にトークンを物理的に盗む必要があります。
インターネットに接続していなくても動作する!
TOTP技術を使用する場合、スマートフォンや物理的なキー上でアクティブなインターネット接続を維持する必要はありません。
TOTPトークンは、共有秘密値を一度取得するだけで済みます。セキュリティシステムとOTP生成器は、通信を必要とせずに後続のパスワード値を生成できます。したがって、時間ベースのワンタイムパスワード(TOTP)は、コンピュータがオフの状態でも動作します。

