HMAC-based One-time Password
HMAC-based One-time Password (HOTP)は、HMACを利用したワンタイムパスワード (OTP)のアルゴリズムであり、オープン標準として無料公開されている。また、OATHの基礎となっている。
HOTPは、そのアルゴリズムおよびJavaでの実装例を文書化したRFC 4226という形で、2005年12月に公開された。以来、多くの企業で採用されている。
アルゴリズム
[編集]HOTPは、一回分の認証試行に限り使用可能な(使い捨ての)パスワードとして、人間にも判読しやすい値を対称的に生成するという方法で本人認証を実現する。使い捨てであるという特性は、生成する度にカウンタの値が変動することに由来する。
パラメータ
[編集]HOTPを使う前に両者の間でいくつかのパラメーラを共有する必要がある。基本的には認証者が指定し、被認証者はそれらを受け入れるかどうか決定する[注釈 1]。
- :暗号学的ハッシュ関数
- デフォルトはSHA-1
- :共有シークレット
- 非公開のランダムなバイト列
- :カウンタ
- 生成回数の累計値で、大きさは8バイト
- :出力値の長さ
- 6–10、デフォルトは6、推奨値は6-8
多くのベンダーが提供するプロプライエタリなハードウェアトークンでは、のデフォルト値が固定されている場合、6桁が一般に採用されている。
計算方法
[編集]RFC 4226に従い、ここではをSHA-1とした場合の計算方法を示す。
HOTPの計算式は次の形で表される。
の詳細を示す。
- の下位4ビットを取り出し、オフセット値とする。
- のバイト列について、先頭を0番目としたときの番目~+3番目を取り出す。取り出した4バイト(32ビット)の値をとする。
- さらに、の最上位1ビットを切り捨て、これをとする。[注釈 2]
- を十進数に変換し、下位桁をモジュロ演算で取り出す。
手順1から手順3までの操作を、RFC 4226 では動的切り捨て(Dynamic Truncation)と呼称している。
ここで、は高々2,147,483,647(=231-1)であることから、の最大値は10であり、またが10のときに限り最上位は0·1·2のいずれかとなることが分かる。
実装上の注意
[編集]認証者と被認証者はそれぞれ独立してカウンタの値をインクリメントするが、(トークンの誤操作による過剰な生成等で)被認証者側の値が認証者側の値を上回る可能性がある。そのため、RFC 4226 では再同期パラメータを設定しておくことを推奨している。認証者は個先のHOTPまで同時に計算し、照合に成功した値があればそのカウンタの値を反映する。この過程で、被認証者側に対して特別に要求される操作は存在しない。
データ量が比較的小さいために総当たり攻撃が行われやすいので、値の検証時は意図的に処理速度を落とすスロットリングを行うことが推奨されている。例えば、何度か認証に失敗した場合はアカウントをロックアウトしたり、認証に失敗する度に直線的に増加する遅延を意図的に挿入したりすることが提案されている。
認証完了後、認証者はその次のカウンタの値でHOTPを生成して被認証者に送信することで、認証者自身の正当性を証明することができる。この過程ではカウンタの再同期が必要となり得ない点に注意したい。[注釈 3]
トークン
[編集]ハードウェアトークンもソフトウェアトークンも共に様々なベンダーから提供されており、その一部を下に列挙する。
HOTPベースのハードウェアトークンは、プロプライエタリなアルゴリズムを採用した製品よりも大幅に安くなる傾向にある[1]。2010年以降、HOTPベースのハードウェアトークンはごく僅かな価格で購入できるようになった[2]。一部の製品は、HOTPだけでなく強力なパスワードも利用できる[3]。
ソフトウェアトークンは、ほとんど全ての主要なモバイル/スマートフォンプラットフォームで利用可能である。(J2ME[4], Android[5], iPhone[6], BlackBerry[7], Maemo[8], macOS[9], Windows Mobile[7])
業界の反応
[編集]2004年から2005年にかけて、コンピュータ関連を専門とする一部の報道機関からの初期の反応は否定的であったものの[10][11][12]、IETFが2005年12月にHOTPをRFC 4226として採択して以降、様々なベンダーがHOTPと互換性のあるトークンや認証ソリューションを開発し出した。
ガートナー社の一部門であるBurton Groupが2010年に公開した"Road Map: Replacing Passwords with OTP Authentication"[1]という強力な認証に関する記事によると、「今後もワンタイムパスワードを専用ハードウェアで生成するという形態は緩やかに発達し続けるものの、これからはスマートフォンでワンタイムパスワードを生成する形態が成長し、標準となっていくだろう」とガートナー社は予想していた。
現在はスマートフォンにアプリで簡単にトークン機能を導入できるようになったため[13]、法人向けネットバンキング等の非常にリスクの高い取引を除いては、(ガートナー社の予想通り)スマートフォン一台で全て完結するようになった。
参照
[編集]脚注
[編集]注釈
[編集]出典
[編集]- ^ a b Diodati, Mark (2010年). “Road Map: Replacing Passwords with OTP Authentication”. Burton Group. 2011年7月21日時点のオリジナルよりアーカイブ。2011年2月10日閲覧。
- ^ “Security Authentication Tokens — Entrust”. Entrust (2011年). 2013年4月5日時点のオリジナルよりアーカイブ。2010年3月5日閲覧。
- ^ “Password sCrib Tokens — Smart Crib”. Smart Crib (2013年). 2013年3月20日時点のオリジナルよりアーカイブ。2013年10月21日閲覧。
- ^ “DS3 Launches OathToken Midlet Application”. Data Security Systems Solutions (2006年2月24日). 2013年12月29日時点のオリジナルよりアーカイブ。2011年2月10日閲覧。
- ^ “StrongAuth” (2010年). 2010年5月18日時点のオリジナルよりアーカイブ。2011年2月10日閲覧。
- ^ Cobbs, Archie L. (2010年). “OATH Token”. Archie L. Cobbs. 2011年2月10日閲覧。
- ^ a b “ActivIdentity Soft Tokens”. ActivIdentity (2010年). 2010年9月17日時点のオリジナルよりアーカイブ。2011年2月10日閲覧。
- ^ Whitbeck, Sean (2011年). “OTP Generator for N900”. Sean Whitbeck. 2012年2月11日閲覧。
- ^ “SecuriToken”. Feel Good Software (2011年). 2012年4月25日時点のオリジナルよりアーカイブ。2011年11月1日閲覧。
- ^ Kearns, Dave (2004年12月6日). “Digging deeper into OATH doesn't look so good”. Network World. 2010年10月7日閲覧。
- ^ Willoughby, Mark (2005年3月21日). “No agreement on Oath authentication”. Computerworld. 2012年10月11日時点のオリジナルよりアーカイブ。2010年10月7日閲覧。
- ^ Kaliski, Burt (2005年5月19日). “Algorithm agility and OATH”. Computerworld. 2012年10月11日時点のオリジナルよりアーカイブ。2010年10月7日閲覧。
- ^ “Google 認証システムで確認コードを取得する”. Google. 2024年11月24日閲覧。
外部リンク
[編集]- RFC 4226 HOTP: An HMAC-Based One-Time Password Algorithm
- RFC 6238 TOTP: Time-Based One-Time Password Algorithm
- RFC 6287 OCRA: OATH Challenge-Response Algorithm
- Initiative For Open Authentication
- Implementation of RFC 4226 - HOPT Algorithm Step by step Python implementation in a Jupyter Notebook