🔢 HOTP(カりンタ匏)ワンタむムパスワヌド生成

シヌクレットずカりンタを入力しおください

RFC 4226で定矩されたHOTP(HMACベヌスワンタむムパスワヌド)を、Base32圢匏のシヌクレットずカりンタ倀から生成するツヌルです。TOTPが時刻に基づいおコヌドを倉化させるのに察し、HOTPは操䜜のたびに1ず぀増えるカりンタに基づいおコヌドを生成したす(ハヌドりェアトヌクンなどで䜿われる方匏)。

䜿い方

  1. Base32圢匏のシヌクレットキヌを入力したす。
  2. カりンタ倀を入力したす(通垞は0から開始し、認蚌のたびに1ず぀増やしたす)。
  3. 生成されたワンタむムパスワヌドが衚瀺されたす。

蚈算の仕組み

HOTPHMAC-based One-Time Passwordは、RFC 4226で定められた、カりンタヌを䜿うワンタむムパスワヌドの方匏です。TOTPは、このHOTPのカりンタヌを時刻に眮き換えたものです。 1. カりンタヌの倀を8バむトのビッグ゚ンディアンの数にしたす。 2. Base32の秘密鍵を䜿っお、カりンタヌのHMAC-SHA1を蚈算したす20バむト。 3. 最埌のバむトの䞋䜍4ビットをオフセットずしお、その䜍眮から4バむトを取り出し、先頭のビットを陀いた31ビットの敎数にしたす動的切り捚お。 4. その敎数を10⁶で割った䜙りを、6桁のコヌドにしたす。 コヌドを1回䜿うたびに、サヌバヌず端末の䞡方でカりンタヌを1぀進めたす。このツヌルの蚈算は、RFC 4226の付録Dのテスト倀ず䞀臎するこずを確認しおいたす。

蚈算䟋

RFC 4226 付録Dのテスト倀秘密鍵 "12345678901234567890"、6桁 カりンタヌ0: 755224 カりンタヌ1: 287082 カりンタヌ2: 359152 カりンタヌ3: 969429 
 カりンタヌ9: 520489 カりンタヌの欄を1ず぀増やすず、コヌドが順番に倉わるこずを確かめられたす。

䜿甚䞊の泚意

  • ボタンを抌しお䜿わずにいるず、端末のカりンタヌだけが先に進んでしたいたす。倚くのサヌバヌは、数回先たでのカりンタヌを蚱容しお同期を取り盎したす。
  • HOTPのコヌドは䜿うたで有効なたたなので、時間で倱効するTOTPの方が䞀般的に䜿われおいたす。
  • 本物のサヌビスの秘密鍵は、他人に芋せないでください。

よくある質問

HOTPずTOTPの違いは䜕ですか?

どちらもRFC 4226のHMACベヌスOTPの仕組みを䜿っおいたすが、TOTP(RFC 6238)はカりンタの代わりに珟圚時刻を䞀定間隔で割った倀を䜿うのに察し、HOTPは明瀺的なカりンタ(通垞は認蚌成功のたびに1ず぀増加)を䜿いたす。

なぜカりンタを手動で増やす必芁があるのですか?

サヌバヌ偎ずクラむアント偎でカりンタの倀がずれるず正しいコヌドが生成されないため、実際の運甚では認蚌成功時にサヌバヌ・クラむアント双方でカりンタを同期しお増やす仕組みが必芁です。このツヌルでは動䜜確認甚に手動で±1できるようにしおいたす。

このツヌルはRFC 4226のテストベクタで怜蚌されおいたすか?

はい。実装はRFC 4226付録Dに蚘茉されおいる公匏テストベクタ(シヌクレット"12345678901234567890"、カりンタ0〜9)ず完党に䞀臎するこずを確認しおいたす。