正在审查一些比特币公开密钥散列文献以及RIPEMD-160和SHA-256的使用情况如下:
RIPEMD160(SHA256(ECDSA_publicKey))
另一方面,工作证明使用SHA256两次(而不是RIPEMD-160)。
有一些关于为什么选择RIPEMD160 (这里)的说明。
考虑到SHA256的256位输出空间,如果在SHA256输出上使用SHA256会发生什么(理论上)?例如:
SHA256(SHA256(x))
这样的映射可以用任何方式来破坏SHA-256吗?
因为SHA-256
应该是一对一的函数,所以SHA256(SHA256(x))
不可能是内射函数(因为输入空间和输出空间都是256位)。但是如果它不是内射的,那么对于长消息(>256位输入)来说,SHA-256
不能是一对一的函数。这个矛盾是如何在算法中解决的呢?
发布于 2019-09-21 16:28:40
首先,请注意,SHA-256至少对512位消息进行操作.消息总是填充为512位的倍数(请参阅下面的填充)。对于双SHA256(SHA256(m)),在第一个散列之后,结果被填充到512位。
填充: SHA-256消息格式|L|1|0..0|message size in 64 bits|
.L是要散列的原始消息位,它后面跟着1
,除了最后的64位之外,还有许多零,所以填充的消息至少是512位的倍数。最后64位是消息大小。可以容纳一个512位哈希块的最大消息是447位.
所以,如果x = \operatorname{SHA256}(m) ,它将被填充为
| x 256-bit| 1 | 0000's 191-bit | 64-bit size of x) |
用于下一次SHA-256计算。
现在,输入输出空间正好是256位。在这种情况下,我们不知道是一对一还是不对。这个空间很大,便于计算。如果它是一对一的,那么它也将是一个排列。有2^{256}!排列和(2^{256})^{(2^{256})}函数。如果这是一个排列,那将是令人惊奇的。为了简单起见,以5位为例,一共有32位!排列~112位,有32^{32}函数~161位.如果我们考虑受限的SHA-256是随机选择的函数,那么置换的概率就在\frac{1}{2^{50}}附近。从WolframAlpha的对数尺度上看一眼。
因为SHA-256应该是一对一的函数。
沙-256不是一对一的功能。它是一个单向函数,也就是说你不能恢复它。由于最小输入大小512位和输出大小总是256位,所以没有办法做到一对一。
这会是双射映射吗?或者是映射?
这将是一种满射映射。
但是如果它不是内射的,那么SHA-256就不能成为长消息(>256位输入)的一对一函数。
不是一对一。
SHA-256(SHA-256(x))会产生碰撞吗?
如果你说的是散列比特币公钥,它有33个字节压缩,65个字节未压缩公钥。
如果密钥是未压缩的,它有520位,因此由针孔原理将有冲突.
如果键是压缩的,它又有264位,因此根据鸽子洞原理,会发生碰撞,输出为256位。
请注意,SHA-256(SHA-256(x))仍然是抗碰撞性。
这样的映射可以用任何方式来破坏SHA-256吗?
看到这个问题了吗,沙-256 d中的弱点?FGrieu的好答案。
https://crypto.stackexchange.com/questions/74480
复制相似问题