HMAC-based One-time Password (HOTP)は、HMACを利用したワンタイムパスワード (OTP)のアルゴリズムであり、オープン標準として無料公開されている。また、OATHの基礎となっている。

HOTPは、そのアルゴリズムおよびJavaでの実装例を文書化したRFC 4226という形で、2005年12月に公開された。以来、多くの企業で採用されている。

アルゴリズム

HOTPは、一回分の認証試行に限り使用可能な(使い捨ての)パスワードとして、人間にも判読しやすい値を対称的に生成するという方法で本人認証を実現する。使い捨てであるという特性は、生成する度にカウンタの値が変動することに由来する。

パラメータ

HOTPを使う前に両者の間でいくつかのパラメータを共有する必要がある。基本的には認証者が指定し、被認証者はそれらを受け入れるかどうか決定する。

  • H {\displaystyle H} :暗号学的ハッシュ関数
    SHA-1を使用する。
    TOPTに拡張される際SHA-256とSHA-512も選択できるようになった。HOTPのハッシュアルゴリズムとして選択できる実装もある。
  • K {\displaystyle K} :共有シークレット
    認証者と被認証者で共有する非公開の静的なデータ。 秘密鍵、シードとも呼ばれる。
    少なくとも128ビット必要で160ビットが推奨される。
    被認証者(トークン)は固有の共有シークレットを持ち、これは認証者によって決定論的方法やランダムで生成されトークンにプロビジョニングされる。
    スマートフォンで使われるソフトウェアトークンでは共有シークレットのプロビジョニングをQRコードで行うことが多い。
  • C {\displaystyle C} :カウンタ
    生成回数の累計値で、大きさは8バイト
  • D {\displaystyle D} :出力値の長さ
    6–10、デフォルトは6、推奨値は6-8
    多くのベンダーが提供するプロプライエタリなハードウェアトークンでは、 D {\displaystyle D} のデフォルト値が固定されている場合、6桁が一般に採用されている。

計算方法

RFC 4226に従い、ここでは H {\textstyle H} SHA-1とした場合の計算方法を示す。

HOTPの計算式は次の形で表される。

Truncate ( ) {\textstyle {\text{Truncate}}()} の詳細を示す。

  1. HS {\textstyle {\text{HS}}} の下位4ビットを取り出し、オフセット値 i {\textstyle i} とする。
  2. HS {\textstyle {\text{HS}}} のバイト列について、先頭を0番目としたときの i {\textstyle i} 番目~ i {\textstyle i} 3番目を取り出す。取り出した4バイト(32ビット)の値を P {\textstyle P} とする。
  3. さらに、 P {\textstyle P} の最上位1ビットを切り捨て、これを S {\textstyle S} とする。
  4. S {\textstyle S} を十進数に変換し、下位 D {\textstyle D} 桁をモジュロ演算で取り出す。

手順1から手順3までの操作を、RFC 4226 では動的切り捨て(Dynamic Truncation)と呼称している。

ここで、 S {\textstyle S} は高々2,147,483,647(=231-1)であることから、 D {\textstyle D} の最大値は10であり、また D {\textstyle D} が10のときに限り最上位は0·1·2のいずれかとなることが分かる。

実装上の注意

認証者と被認証者はそれぞれ独立してカウンタの値をインクリメントするが、(トークンの誤操作による過剰な生成等で)被認証者側の値が認証者側の値を上回る可能性がある。そのため、RFC 4226 では再同期パラメータ s {\textstyle s} を設定しておくことを推奨している。認証者は s {\textstyle s} 個先のHOTPまで同時に計算し、照合に成功した値があればそのカウンタの値を反映する。この過程で、被認証者側に対して特別に要求される操作は存在しない。

データ量が比較的小さいために総当たり攻撃が行われやすいので、値の検証時は意図的に処理速度を落とすスロットリングを行うことが推奨されている。例えば、何度か認証に失敗した場合はアカウントをロックアウトしたり、認証に失敗する度に直線的に増加する遅延を意図的に挿入したりすることが提案されている。

認証完了後、認証者はその次のカウンタの値でHOTPを生成して被認証者に送信することで、認証者自身の正当性を証明することができる。この過程ではカウンタの再同期が必要となり得ない点に注意したい。

トークン

ハードウェアトークンもソフトウェアトークンも共に様々なベンダーから提供されており、その一部を下に列挙する。

HOTPベースのハードウェアトークンは、プロプライエタリなアルゴリズムを採用した製品よりも大幅に安くなる傾向にある。2010年以降、HOTPベースのハードウェアトークンはごく僅かな価格で購入できるようになった。一部の製品は、HOTPだけでなく強力なパスワードも利用できる。

ソフトウェアトークンは、ほとんど全ての主要なモバイル/スマートフォンプラットフォームで利用可能である。(J2ME, Android, iPhone, BlackBerry, Maemo, macOS, Windows Mobile)

業界の反応

2004年から2005年にかけて、コンピュータ関連を専門とする一部の報道機関からの初期の反応は否定的であったものの、IETFが2005年12月にHOTPをRFC 4226として公開して以降、様々なベンダーがHOTPと互換性のあるトークンや認証ソリューションを開発し出した。

ガートナー社の一部門であるBurton Groupが2010年に公開した"Road Map: Replacing Passwords with OTP Authentication"という強力な認証に関する記事によると、「今後もワンタイムパスワードを専用ハードウェアで生成するという形態は緩やかに発達し続けるものの、これからはスマートフォンでワンタイムパスワードを生成する形態が成長し、標準となっていくだろう」とガートナー社は予想していた。

現在はスマートフォンにアプリで簡単にトークン機能を導入できるようになったため、法人向けネットバンキング等の非常にリスクの高い取引を除いては、(ガートナー社の予想通り)スマートフォン一台で全て完結するようになった。

脚注

注釈

出典

参考文献

  • M'Raihi, D.; Bellare, M.; Hoornaert, F.; Naccache, D.; Ranen, O. (2005-12) (英語), HOTP: An HMAC-Based One-Time Password Algorithm, doi:10.17487/rfc4226, RFC 4226, https://www.rfc-editor.org/info/rfc4226 2024年12月12日閲覧。 
  • M'Raihi, D.; Machani, S.; Pei, M.; Rydell, J. (2011-05) (英語), TOTP: Time-Based One-Time Password Algorithm, doi:10.17487/rfc6238, RFC 6238, https://www.rfc-editor.org/info/rfc6238 2024年12月12日閲覧。 
  • Lina Lumburovska; Jovana Dobreva; Stefan Andonov; Hristina Mihajloska Trpcheska; Vesna Dimitrova (2021). "A Comparative Analysis of HOTP and TOTP Authentication Algorithms. Which one to choose?". Security & Future (英語). 5 (4): 131–136. ISSN 2535-0668. 2024年12月12日閲覧。

関連項目

  • Initiative for Open Authentication
  • S/KEY
  • Time-based One-time Password (TOTP)

外部リンク

  • RFC 4226 HOTP: An HMAC-Based One-Time Password Algorithm
  • RFC 6238 TOTP: Time-Based One-Time Password Algorithm
  • Initiative For Open Authentication

Comparison of HOTP and TOTP HOTP (HMAC Based One Time Password) TOTP

(PDF) Implementasi HMACSHA3Based One Time Password pada Skema Two

Totp What Is The Time Based One Time Password Algorithm Ionos My XXX

Solved HMAC Authentication RESTdigest =

HMACbased Password Algorithm Semantic Scholar