HMAC-based One-time Password (HOTP) やHMACベースのワンタイムパスワードは、HMACを利用したワンタイムパスワード (OTP)のアルゴリズムであり、オープン標準として無料公開されている。また、OATHの基礎となっている。
HOTPは、そのアルゴリズムおよびJavaでの実装例を文書化したRFC 4226という形で、2005年12月に公開された。以来、多くの企業で採用されている。
HOTPは、一回分の認証試行に限り使用可能な(使い捨ての)パスワードとして、人間にも判読しやすい値を対称的に生成するという方法で本人認証を実現する。使い捨てであるという特性は、生成する度にカウンタの値が変動することに由来する。
HOTPを使う前に両者の間でいくつかのパラメータを共有する必要がある。基本的には認証者が指定し、被認証者はそれらを受け入れるかどうか決定する。
RFC 4226に従い、ここではをSHA-1とした場合の計算方法を示す。
HOTPの計算式は次の形で表される。
の詳細を示す。
手順1から手順3までの操作を、RFC 4226 では動的切り捨て(Dynamic Truncation)と呼称している。
ここで、は高々2,147,483,647(=231-1)であることから、の最大値は10であり、またが10のときに限り最上位は0·1·2のいずれかとなることが分かる。
認証者と被認証者はそれぞれ独立してカウンタの値をインクリメントするが、(トークンの誤操作による過剰な生成等で)被認証者側の値が認証者側の値を上回る可能性がある。そのため、RFC 4226 では再同期パラメータを設定しておくことを推奨している。認証者は個先の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"という強力な認証に関する記事によると、「今後もワンタイムパスワードを専用ハードウェアで生成するという形態は緩やかに発達し続けるものの、これからはスマートフォンでワンタイムパスワードを生成する形態が成長し、標準となっていくだろう」とガートナー社は予想していた。
現在はスマートフォンにアプリで簡単にトークン機能を導入できるようになったため、法人向けネットバンキング等の非常にリスクの高い取引を除いては、(ガートナー社の予想通り)スマートフォン一台で全て完結するようになった。