Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

HOTP(ホートプ)とは | 意味や読み方など丁寧でわかりやすい用語解説

HOTP(ホートプ)の意味や読み方など、初心者にもわかりやすいように丁寧に解説しています。

作成日: 更新日:

読み方

日本語表記

ホットピー (ホットピー)

英語表記

HOTP (エイチオーティーピー)

用語解説

HOTP(HMAC-based One-Time Password)は、RFC 4226で定義されているワンタイムパスワード生成アルゴリズムのことである。ワンタイムパスワードとは、一度しか使用できないパスワードであり、認証のセキュリティを強化するために利用される。HOTPは、特にパスワードが盗聴されたり、再利用されたりするリスクを軽減するのに役立つ。

HOTPの基本的な仕組みは、共有シークレット(秘密鍵)とカウンタ値に基づいている。共有シークレットは、認証を必要とするユーザー(またはデバイス)と認証サーバの間で事前に共有される秘密の情報である。この秘密鍵は、決して第三者に知られてはならない。カウンタ値は、HOTP生成のたびに増加する整数値である。カウンタ値は、ユーザーと認証サーバの間で同期されている必要がある。

HOTPの生成プロセスは以下の通りである。まず、共有シークレットとカウンタ値を入力として、ハッシュ関数(HMAC: Hash-based Message Authentication Code)を適用する。HMACは、暗号学的ハッシュ関数と秘密鍵を使用してメッセージの認証を行うための仕組みである。HOTPの場合、通常はSHA-1のようなハッシュ関数が用いられる。

HMACの出力は長いバイナリ列である。このバイナリ列から、Truncationと呼ばれる処理によって特定の桁数(通常は6桁または8桁)の10進数のワンタイムパスワードが抽出される。Truncationは、ダイナミック・トランケーションや、固定オフセットによる抽出など、複数の方法がある。一般的には、HMAC出力の一部をオフセットとして利用し、そこから数バイトを取り出して整数値に変換し、その整数値をさらに特定の桁数で剰余演算することによって最終的なパスワードを生成する。

ユーザーは、HOTP生成器(ソフトウェアトークンまたはハードウェアトークン)を使用して、現在のカウンタ値と共有シークレットに基づいてワンタイムパスワードを生成する。ユーザーが認証を試みる際、生成されたワンタイムパスワードを認証サーバに送信する。認証サーバは、同じ共有シークレットと、ユーザーから提供されたカウンタ値(または、サーバが保持しているカウンタ値から一定範囲内の値)を使用してHOTPを生成し、ユーザーから送信されたパスワードと一致するかどうかを検証する。

カウンタ値の同期が重要である。もしユーザーのカウンタ値が認証サーバのカウンタ値よりも大幅に進んでしまっている場合、認証は失敗する。これは、何らかの理由でユーザーが意図せずに複数のHOTPを生成してしまった場合などに発生する。この問題を緩和するために、認証サーバは、ユーザーから送信されたカウンタ値とサーバが保持しているカウンタ値との間に一定の許容範囲(ウィンドウ)を設けることが多い。例えば、サーバは現在のカウンタ値だけでなく、それ以降のいくつかのカウンタ値に基づいてHOTPを生成し、いずれかのHOTPが一致すれば認証を成功とみなす。ただし、このウィンドウを大きくしすぎると、セキュリティリスクが高まるため、適切なバランスを取る必要がある。

HOTPは、実装が比較的容易であり、計算資源をあまり必要としないため、多くの認証システムで利用されている。しかし、カウンタ値の同期問題や、共有シークレットの管理といった課題も存在する。また、HOTP自体は通信経路の暗号化を提供しないため、HTTPSなどの安全な通信プロトコルと組み合わせて使用することが推奨される。

現在では、HOTPの改良版であるTOTP(Time-based One-Time Password)がより広く利用されている。TOTPは、カウンタ値の代わりに時刻を使用するため、カウンタ値の同期問題を解消し、より柔軟な運用が可能になる。しかし、HOTPも依然として、特定の用途や環境においては有効な選択肢である。

関連コンテンツ