首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HOTP动态截断函数如何推广到较长的散列?

HOTP动态截断函数如何推广到较长的散列?
EN

Cryptography用户
提问于 2015-08-14 08:43:02
回答 1查看 2.1K关注 0票数 6

基于HMAC的RFC 4226一次性密码算法HOTP使用“动态截断”函数将20字节的hma-sha-1值转换为31位字符串。动态截断(来自5.3节)的工作方式如下(和可能是没用的):

代码语言:javascript
复制
 DT(String) // String = String[0]...String[19]
 Let OffsetBits be the low-order 4 bits of String[19]
 Offset = StToNum(OffsetBits) // 0 <= OffSet <= 15
 Let P = String[OffSet]...String[OffSet+3]
 Return the Last 31 bits of P

TOTP (RFC 6238)允许在HOTP中使用SHA-256和SHA-512作为HMAC哈希,但似乎没有为它们定义一个新的动态截断函数:

TOTP实现可以使用基于SHA2 -256或SHA-512的HMAC-SHA-256或HMAC-SHA-512函数,而不是为RFC4226中的HOTP计算指定的HMAC-SHA-1函数。

我应该使用低4位的String[19]作为偏移量,使用低4位的String[length-1],还是使用其他一些位数,或者使用完全不同的截断算法?

EN

回答 1

Cryptography用户

回答已采纳

发布于 2015-08-15 09:36:10

我通过复制测试向量找到了它。

TL;DR:标准假设您使用哈希的最后一个字节的低4位,而不管它的长度。因此,将原来DT定义中的19替换为31表示SHA-256,或者将63替换为SHA-512,这样就可以了。

找出这一点并不完全简单,因为标准中只列出了一个测试秘密:

测试令牌共享秘密使用ASCII字符串值"12345678901234567890“。当时间步长X= 30,以Unix纪元作为计算时间步骤的初始值时(其中T0 =0),TOTP算法将显示指定模式和时间戳的下列值。

事实上,要重现SHA-256和SHA-512的测试向量值,您必须将这个秘密扩展到32/64个字符。即使用ASCII字符串“1234567890123458901234589012”和"1234567890123456789012345678901234567890123456789012345678901234“。

票数 8
EN
页面原文内容由Cryptography提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://crypto.stackexchange.com/questions/27474

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档