Bitcointalk · Stealing Coins

中本聪,2010 年 7 月 25 日

SN-1646 已核对来源,附原文与上下文。

阅读语言
中文译文

这里有一篇论文声称能在 2^52 次密码运算内找到 SHA-1 碰撞。而一个最优安全的哈希需要 2^80 次运算。2^52 仍然很大,但已经进入集群和僵尸网络的射程。

2^80 是指能用生日攻击的情况。这里用不了生日攻击,因而难度是完整的 2^160 位。不过,倘若你要攻击的是 100 万(2^20)笔交易中的任意一笔,可以做部分生日攻击:2^160/2^20 = 2^140。

比特币地址是唯一用到 160 位哈希的地方。其他一切都是 SHA-256。计算方式是:

bitcoinaddress = RIPEMD-160(SHA-256(publickey))

如果我说错了请纠正我(拜托,我乐意认错),但我认为这种情况下对 RIPEMD-160 很难实施分析型攻击。分析型攻击会指定某个输入范围或模式去尝试,大幅提高找到碰撞的概率。而在这里,你对 RIPEMD-160 的输入没有这种控制力,因为输入是 SHA-256 的输出。倘若分析型攻击帮你找到一个能产生碰撞的 RIPEMD-160 输入,你拿它怎么办?你还得让 SHA-256 输出那个值,因而你照样还得破解 SHA-256。

对暴力破解而言,RIPEMD-160(SHA-256(x)) 并不比单独的 RIPEMD-160 更强。但对分析型攻击而言,似乎必须同时分析攻击 RIPEMD-160 和 SHA-256。倘若我错了,那强度就等于 RIPEMD-160,SHA-256 不过是充当一轮密钥加强罢了。

ORIGINAL · 英文原文
Quote
Here is a paper that claims to find SHA-1 collisions in 2^52 crypto operations. And optimally secure hash would take 2^80 operations. 2^52 time is still large, but it is getting into cluster and botnet range.
2^80 is if you can use a birthday attack.  You can't use a birthday attack for this, so the difficulty is the full 2^160 bits.  Although, if you were trying to crack any one of 1 million (2^20) transactions, you could do a partial birthday attack 2^160/2^20 = 2^140.

Bitcoin Addresses are the only place where 160-bit hash is used.  Everything else is SHA-256.  They're calculated as:

bitcoinaddress = RIPEMD-160(SHA-256(publickey))

Correct me if I'm wrong (please, and I'll gladly eat crow) but I think it would be hard to use an analytical attack on RIPEMD-160 in this case.  An analytical attack prescribes a certain range or pattern of inputs to try that will greatly increase your chance of finding a collision.  Here, you don't have that kind of control over RIPEMD-160's input, because the input is the output of SHA-256.  If an analytical attack helps you find an input to RIPEMD-160 that produces a collision, what are you going to do with it?  You still have to get SHA-256 to output that value, so you would still have to break SHA-256 too.

For brute force, RIPEMD-160(SHA-256(x)) is no stronger than RIPEMD-160 alone.  But for analytical attack, it seems like you must analytical attack both RIPEMD-160 and SHA-256.  If I'm wrong, then the strength is the same as RIPEMD-160 and the SHA-256 only serves as one round of key strengthening.
来源
Bitcointalk 原始链接 ↗ 记录编号 SN-1646