HOTPはカウンター値、TOTPは現在時刻を区切ったタイムステップをもとに認証コードを生成します。 どちらもOTP(ワンタイムパスワード)の一種ですが、コードが変わる条件や同期方法、主な利用形態が異なります。
この記事では、HOTPとTOTPの仕組みを整理し、同期の対象、運用上の注意点、自社の要件に応じた使い分けを比較します。
OTPとは?
OTP(ワンタイムパスワード)は、原則として1回の認証に使用する認証コードの総称です。コードが変わる条件は方式によって異なり、代表的な方式にHOTPとTOTPがあります。
OTPの種類や利用場面を広く確認したい場合は、ワンタイムパスワード(OTP)とは?もあわせてご覧ください。
HOTPとは?
HOTP(HMAC-based One-Time Password)は、共有する秘密鍵とカウンター値から認証コードを生成する方式です。RFC 4226で定義されており、時間ではなく、認証器と認証サーバーが管理するイベントカウンターを、コード生成と検証の基準にします。
認証アプリやハードウェアトークンなど、コードを生成する側を認証器と呼びます。HOTPでは、認証器と認証サーバーが保持するカウンター値に差が生じると、コードが一致せず認証できない場合があります。
HOTPの仕組み
認証器は、秘密鍵とカウンター値を使ってHMAC-SHA-1を計算し、その結果から短い数字の認証コードを生成します。利用者が入力したコードを受け取ると、認証サーバーも同じ秘密鍵とカウンター値からコードを計算して照合します。
認証サーバーは、認証器との小さなカウンター差を吸収するため、あらかじめ定めた範囲の値を照合する場合があります。ただし、利用者が未使用のコードを何度も生成して差が大きくなると、再同期が必要です。
HOTPのメリットと注意点
-
端末の時刻同期を必要としない
コード生成の基準はカウンター値です。端末の時計がずれても、それ自体が認証失敗の原因にはなりません。
-
イベント単位でコードを更新する運用に向いている
ボタン操作でコードを生成するハードウェアトークンなど、利用者の操作ごとにカウンターを進める運用で使われます。
-
カウンターのずれと再同期に注意が必要
認証器側のカウンターが検証範囲を超えて進むと、正しいコードでも認証できません。導入時には、許容する検証範囲と再同期の手順を決めておく必要があります。
TOTPとは?
TOTP(Time-based One-Time Password)は、共有する秘密鍵と現在時刻から認証コードを生成する方式です。RFC 6238で定義されており、HOTPのカウンター値の代わりに、現在時刻を区切ったタイムステップを使用します。
コードは一定時間ごとに切り替わるため、認証アプリやソフトウェアトークンを使ったアカウント認証で広く利用されています。認証サーバーと端末の時刻に大きな差があると、コードが一致しない場合があります。
TOTPの仕組み
TOTPでは、現在時刻を一定の間隔で区切り、その値を時間カウンターとして使います。多くの実装では30秒を1つのタイムステップとし、秘密鍵と時間カウンターから認証コードを生成します。
HMACにはSHA-1のほか、SHA-256またはSHA-512も使用できます。認証サーバーは現在のタイムステップを基準にコードを照合し、時刻のわずかなずれを考慮して前後の限られた時間窓を検証する場合があります。
TOTPのメリットと注意点
-
認証アプリと組み合わせやすい
利用者の操作でカウンターを進める必要がなく、端末と認証サーバーが同じタイムステップのコードをそれぞれ計算します。
-
コードが一定時間で切り替わる
コードはタイムステップごとに更新されます。認証サーバー側では、有効とする時間窓や同じコードの再利用を防ぐ処理を設計します。
-
端末とサーバーの時刻差に注意が必要
時計が大きくずれると認証に失敗します。導入時には、許容する時間窓と時刻同期の方法を確認しておきましょう。
HOTPとTOTPの違い
HOTPとTOTPの主な違いは、認証コードを変える基準と、認証器とサーバーの間で合わせる情報です。同じ判断軸で整理すると、自社の認証器や運用体制に合う方式を比較しやすくなります。
HOTPとTOTPの比較表
| 比較項目 | HOTP(RFC 4226) | TOTP(RFC 6238) |
|---|---|---|
| コード生成の基準 | 共有する秘密鍵とカウンター値 | 共有する秘密鍵と現在時刻を区切ったタイムステップ |
| コードが変わる条件 | 認証器側のカウンターが進むと変わる | 次のタイムステップに切り替わると変わる |
| 使用するHMAC | HMAC-SHA-1 | HMAC-SHA-1、HMAC-SHA-256、HMAC-SHA-512 |
| 同期で確認するもの | 認証器とサーバーのカウンター値 | 端末とサーバーの時刻 |
| 有効性の考え方 | 時間ではなく、カウンター値とサーバー側の検証範囲で判定する | 現在のタイムステップと、許容する前後の時間窓で判定する |
| 主な利用形態 | ハードウェアトークン、専用の認証器 | 認証アプリ、ソフトウェアトークン |
| 運用上の注意 | カウンターのずれ、検証範囲、再同期の手順 | 端末時刻のずれ、許容する時間窓、同一コードの再利用防止 |
| 選び分けの目安 | イベント単位でコードを更新し、カウンターを管理できる場合 | 認証アプリを使い、タイムステップごとにコードを更新する場合 |
HOTPとTOTPを選ぶ際は、ネットワーク接続の有無よりも、カウンターと時刻のどちらを安定して管理できるかを主な判断軸にします。
HOTPとTOTPはどちらを選ぶべきか
-
認証アプリを使ったアカウント認証にはTOTPを検討する
利用者の端末に認証アプリを登録し、一定時間ごとに切り替わるコードを入力する運用では、TOTPが候補になります。導入前に、端末変更時の再登録やアカウント復旧の手順も確認します。
-
イベント単位のハードウェアトークン運用にはHOTPを検討する
ボタン操作などのイベントごとにコードを生成する専用トークンを利用する場合は、HOTPが候補になります。カウンターがずれたときの再同期手順を運用フローに含める必要があります。
-
一般ユーザーへコードを届ける場合は送信型OTPを分けて検討する
会員登録や本人確認のために、電話番号やメールアドレスへ認証コードを送る場合は、HOTPとTOTPの二択だけでは判断できません。利用できる連絡先、到達性、コードの有効時間、再送や検証の仕組みを別に整理します。
SMSやメールで認証コードを届ける場合
認証アプリ型のTOTPでは、利用者の端末と認証サーバーが、共有する秘密鍵と現在時刻からそれぞれ認証コードを生成します。企業が認証のたびにSMSやメールでコードを送る仕組みではありません。
一方、会員登録、本人確認、ログイン認証、取引確認などで一般ユーザーへコードを届ける場合は、企業側のシステムまたはOTPサービスが、コードの生成、送信、入力されたコードの検証を管理します。企業が利用者の電話番号やメールアドレスを取得している場合は、それらの連絡先へ認証コードを送る方式が候補になります。
EngageLab OTPは、APIを使って認証コードの生成、送信、検証を既存システムやアプリに組み込むためのサービスです。SMS、WhatsApp、音声、メールに対応しているため、対象ユーザーが利用できる連絡先や認証場面に応じて送信チャネルを選べます。
EngageLab OTPは、企業がSMSやメールなどでユーザーへ認証コードを送り、入力されたコードを検証する場面に適しています。認証アプリでTOTPを生成する用途とは異なります。導入を検討する際は、利用地域、対象チャネル、再送条件、コードの有効時間、既存システムとのAPI連携方法を確認してください。
まとめ
HOTPとTOTPは、どちらもOTPを生成する方式です。HOTPはカウンター値、TOTPは現在時刻を区切ったタイムステップをコード生成の基準にします。
認証アプリを利用する場合はTOTP、イベント単位でコードを生成するハードウェアトークンを利用する場合はHOTPが候補になります。選定時には、カウンターの再同期や端末時刻の管理など、自社で運用できる条件を確認しましょう。
SMSやメールなどで一般ユーザーへ認証コードを届ける場合は、認証アプリ型TOTPとは分けて送信型OTPを検討します。コードの生成、送信、検証をAPIで既存システムに組み込みたい場合は、EngageLab OTPの対応チャネルや連携方法を確認してください。







