HOTPを使用して数値ワンタイムパスワードを作成できることを理解します。ビーイングの後ろのアルゴリズムは:HOTPを使用したアルファニューメリックOTPの生成
Kは秘密鍵
カウンタ
HMAC(K、C)= SHA1(K⊕0x5c5c ...∥SHA1(K⊕0x3636 ...∥C))とををC⊕XORなどであります、∥連結ように、数学的に
切り捨ては、定義されたよう
そしてHOTP(K、C)にHMACの結果から4つのバイトを選択する関数である(Cはメッセージです)
HOTP(K、 C)=切り捨て(HMAC(K、C))& 0x7FFFFFFFで
私は私のテストのために、次の例の実装を使用している、それが正常に動作します:
私の質問は、それはそれが可能です数値の代わりにHOTPを使用して英数字のOTPを生成します。利点は明らかに、OTPの強さが所与の長さに対して多くの倍数を増加させるということである。したがって、8桁の英数字コードは8桁の数字コードよりもはるかにストリンガーです。
おかげで、もちろん Abhi
ありがとうcornelinux、それができることを知って良かった。どうすればいいか分かりますか?私のSHA1は20バイトの値(-127から127)を返します。英数字の値にするにはどうすればよいですか? – user1826116
まず、使用したい文字を決めてください。したがって、おそらく(26 + 26 +10 = 56の可能な文字)のリストが得られます。次に、1バイトを文字にマップする必要があります... – cornelinux
OK、256の可能なバイトの組み合わせをHMACから62の可能な文字セットにマップする必要があります。つまり、私の256バイトセットからの4バイトは、62バイトの出力セットからの1バイトに対応します。これは簡単に行うことができますが、これではHOTPのセキュリティ/強度がそれほど低下しないと思いますか? – user1826116