One-time password 就是 MAC (消息认证码)的一种应用,如果用 HMAC ,那么根据
https://cseweb.ucsd.edu/~mihir/papers/kmd5.pdf 破解的方法是破解底层散列函数的抗碰撞性或者用作 MAC 时的特称不可伪造性( existential unforgeability, EUF )。通常认为使用的散列函数满足这两个性质,因此在模型内无法破解(当然,知道 HMAC 密钥自然就破解了)。
@
NoOneNoBody #3 “破解”一词的三重理解:
1. 一种无法言说的意思
2. 及物动词,必须搭配一个宾语,且宾语必须是某个安全性质的名字
3. 及物动词,宾语可以是安全性质的名字或者密码学对象的名字,如果是后者,则意思等同于 宾语 = 此密码学对象所属类型的最常见的安全性质
通常来说,散列函数最常见的安全性质是指抗碰撞性,因此“破解散列函数”的意思就是“能够较高效地找到散列函数的碰撞”,所谓“逆向搜索”一般来说理解为计算原像,即破解单向性,破解单向性蕴涵着破解抗碰撞性,因此“没能破哈希”对于某些散列函数是错误的说法。
当然,我们回到 1 的理解,可以 psychic debug 你的意思是说没有听过能破解散列函数构造的 HMAC 的安全性,这对于一些散列函数也是不对的,比如 MD5 的抗碰撞性质已经破解(允许选择前缀攻击),因此单纯用 MD5 制造的 HMAC 不安全。
当然,one-time password 使用 MAC 的方式表明即使破解了 EUF 也不代表就能破解 one-time password ,因为 one-time password 里面被认证的消息是时间戳,并不允许使坏者( adversary )任意选择。