OTP / ワンタイムパスワードとは
OTP(One-Time Password / ワンタイムパスワード)は、1回限りの使い捨てパスワード。一度使用した後、または有効期限が切れると無効になるため、リプレイ攻撃を防げる。
OTPの仕組み
固定パスワードは盗まれると繰り返し使用されるリスクがありますが、OTPは「使い捨て」という性質によりこのリスクを排除します。 OTPはサーバーとクライアントが共有する秘密鍵とアルゴリズムを元に生成されるため、 攻撃者が傍受しても次回の認証には使えません。
OTPの主な種類
- TOTP(時間ベース): 現在時刻を元に生成。30秒ごとに新しいコードを生成。 Google Authenticatorや1Passwordが採用。詳細はTOTPを参照。
- HOTP(カウンターベース): 使用回数(カウンター)を元に生成。時刻同期が不要。 ハードウェアトークンに多く使われる。
- SMS OTP: サーバーがランダムに生成したOTPをSMSで送信。 SMS認証で最も一般的に使われる形態。
- メールOTP: SMSの代わりにメールアドレスに送信するOTP。
メリット
- 傍受・盗難されても再利用できない(リプレイ攻撃防止)
- パスワードのみの認証より大幅にセキュリティが向上する
- 実装が標準化されており(RFC 6238 / RFC 4226)、多数のライブラリが存在する
デメリット
- SMS OTPはSIMスワップやSS7攻撃で傍受されるリスクがある
- コードの有効期限が短く、ユーザーが入力に手間取ると期限切れになる
- フィッシングサイトにリアルタイムで入力させるMiTM攻撃には脆弱