ワンタイムパスワード(OTP)とは何かを初心者向けに解説。仕組みやTOTP・HOTPの違い、SMSや認証アプリの特徴まで図解でやさしく理解できます。
本書はハッシュを理解している前提の説明となっています。
ワンタイムパスワード(OTP)とは
ワンタイムパスワード(OTP:One-Time Password)の説明と、通常パスワードの違いを説明します。
ワンタイムパスワードの基本的な意味
ワンタイムパスワード(OTP:One-Time Password)とは、一度きりの使い捨てのパスワードのことです。
■ワンタイムパスワードの特徴
- 一定時間ごとに自動で変わる
- ログインのたびに新しく発行される
- 一度使うと無効になる

この仕組みにより、仮に第三者にパスワードを盗み見られたとしても、次回以降は使えないため不正ログインを防げるというメリットがあります。
通常のパスワードとの違い
通常のパスワードのように同じ文字列を使い続けるのではなく、ログインや認証のたびに毎回異なるパスワードが発行されます。
ワンタイムパスワードと通常のパスワードの違いは、「使い回しができるかどうか」にあります。
ワンタイムパスワードの仕組み
カウンタベースの仕組み(HOTP)
HOTP(HMAC-based One-Time Password)は、HMAC(秘密鍵を使ったハッシュ)を使ってワンタイムパスワードを生成する方法です。
RFC4226で定義されています。
PCやスマートフォンにHOTPソフトをインストールして使用します。
HOTPの流れ
最初に被認証側と認証側で秘密鍵を共有しておく必要があります。

ワンタイムパスワードによる認証は次の流れでされます。
- 利用者(被認証側)は、共通鍵と認証回数でハッシュ値を計算する。
- 利用者(被認証側)は、ハッシュ値を送る。(これがワンタイムパスワードです。)
- 認証側は、共通鍵と認証回数でハッシュ値を計算する。(認証側でも同じアルゴリズムでワンタイムパスワードを生成)
- 認証側は、ハッシュ値を比較して検証する。

■認証回数のずれ対策
被認証側がワンタイムパスワードを生成して認証側へ送る際、ネットワーク障害などで届かなかった場合、被認証側だけが認証回数を+1することとなり、認証回数のずれが生じます。その結果ワンタイムパスワードが合わない不具合が発生します。
この対策として認証回数ずれの許容を設定することができます。
一定時間ごとに変わる仕組み(TOTP)
TOTP(Time-based One-Time Password)は、共通鍵と時間を使って生成するワンタイムパスワードです。
RFC6238で定義されています。
TOTPの流れ
最初に被認証側と認証側で、共通鍵の共有と、時刻を同期しておく必要があります。

TOTPのワンタイムパスワードを使った認証の流れは次の通りです。(HOTPの認証回数が現在時刻に変わっただけです。)
- 利用者(被認証側)は、共通鍵と現在時刻でハッシュ値を計算する。
- 利用者(被認証側)は、ハッシュ値を送る。(これがワンタイムパスワードです。)
- 認証側は、共通鍵と現在時刻でハッシュ値を計算する。(認証側でも同じアルゴリズムでワンタイムパスワードを生成)
- 認証側は、ハッシュ値を比較して検証する。

一般的には30秒ごとにOTPが更新されます。
また、実際の認証では、時刻のズレを考慮して前後の時間も含めて検証することが多いです。
ワンタイムパスワードの種類と特徴
SMS認証(ショートメッセージ)
SMS認証は、被認証側(ユーザー)の電話番号に、SMSでワンタイムパスワードを送信する方式です。
追加アプリが不要ですぐ使えるのがメリットです。
デメリットとしては、SIMスワップ攻撃に弱い、SMSの遅延、海外だと届かないケースがあります。
また、SIMスワップ攻撃や盗聴のリスクがあるため、高いセキュリティ用途では注意が必要です。

認証アプリ
スマートフォンアプリでワンタイムパスワードを生成します。
例としては、Google Authenticatorなどがあります。
ハードウェアトークン
専用のデバイスでワンタイムパスワードを生成します。
ハードウェアトークンは高いセキュリティを確保できますが、コストがかかることと紛失のリスクがあります。
メールによるOTP
被認証側(ユーザ)のメールアドレスにワンタイムパスワードを送る方式です。
簡単に実装できますが、セキュリティ面では弱いです。
なので、主に補助的な認証手段として使われることが多いです。
まとめ
- OTPは一度だけ使えるパスワード
- TOTPは時間、HOTPはカウンタで生成
- 認証アプリが最も安全で主流
腕試し(理解テスト)
腕試し(理解テスト)に挑戦する場合はこちらをクリック。


コメント