密码学里经常看到 Random Oracle Model 这个名字。这是一种假想中的完美 Hash Function,具有如下特性:
1. 接收一个从未见过的输入,返回一个唯一且不可预测的输出。
2. 接收一个曾经见过的输入,返回和上次相同的输出。
ROM 这样的完美 Hash Function 在现实中并不存在,但是现实中的 Hash 都是在尽可能的接近它。经常举的一个例子就是 SHA-1,它不是 ROM 的原因就是有 length extention attack 的风险。
假设有一个消息
1. 接收一个从未见过的输入,返回一个唯一且不可预测的输出。
2. 接收一个曾经见过的输入,返回和上次相同的输出。
ROM 这样的完美 Hash Function 在现实中并不存在,但是现实中的 Hash 都是在尽可能的接近它。经常举的一个例子就是 SHA-1,它不是 ROM 的原因就是有 length extention attack 的风险。
假设有一个消息
m
,H = SHA1(m)
。如果已知 H 和 m 的长度,那么就可以伪造 H' = SHA1(m || m')
。也就是说,即使不知道 m,我也可以计算出 m + m'
的哈希值。这就违背了 ROM 不可预测性的原则。