当只知道结果时,我想到了“恢复”、“确定”、“猜测”、“计算”或“复制”HOTP/TOTP的秘密。
如果我们可以在不知道实际秘密的情况下查看HOTP/TOTP代码的实时创建。
发布于 2017-06-20 12:20:08
看看HOTP (TOTP只是一个基于时间的特例)是如何计算的。它使用的是基于哈希函数的HMAC,或者是SHA1、SHA2 (或者在最坏的安全情况下使用MD5 )的秘密种子和一些计数器。它以PIN的形式返回部分结果。
当攻击拦截PIN时,您正在试图找出一个未知长度的秘密种子。
基于哈希函数的定义,它是不可逆的(除非它被破坏)。即使您拥有整个哈希,也不能简单地逆转操作。但是你有6到8个小数。你也不知道它们在什么地方适合更长的小数字符串--这也是根据最后一个字节而改变的)。
那么你有什么选择呢?最简单的方法可能是强行强制所有可能的种子值(例如32B十六进制字符串),并将它们与被截获的数据进行比较。这可以与TOTP一起工作,因为您还可以知道生成它的时间(30多个时间框架)。但是在HOTP中,你不知道计数器是什么(除非你能拦截所有的PIN)。
我想说,检察官办公室的优势在于其算法的复杂性和使用的简单性。我没有给出为什么这很难的证据,但我希望答案总结了你的问题,并回答了为什么你不能简单地这样做。
发布于 2020-02-02 00:17:36
我读到的一篇博客文章有一个一步一步的指南,用于强制执行base32编码的共享秘密.所使用的技术只需要两个OTP代码+时间戳。
总之,您需要枚举(通过暴力)可能用于生成每个代码的许多可能的共享秘密。比较这两个列表,您将只看到一个可能生成两个代码的共享秘密。
强行执行128位的秘密是不可能的,但是(同样,从内存中) base32值的标准和编码异常的模糊性意味着大多数秘密实际上要短得多--足以强制执行。例如,一个具有16个字符的基32编码秘密,解码时仅为80位.
https://security.stackexchange.com/questions/162348
复制相似问题