加密哈希函数 cryptographic hash function
-
性质1:碰撞阻力 collision resistance
如果无法找到两个值 x x x 和 y y y , x ≠ y x\neq y x=y,使得 H ( x ) = H ( y ) H(x) = H(y) H(x)=H(y),则称哈希函数 H H H 具有碰撞阻力。没有高效的方法可以人为制造哈希碰撞。 -
性质2:隐秘性 hiding
哈希函数计算过程单向,若仅仅知道哈希函数的输出 y = H ( x ) y = H(x) y=H(x), 无法通过 y y y 倒推出 x x x 的值。 -
性质3:谜题友好 puzzle friendly
没有一个解决策略比只是随机地尝试 x x x 取值来求得给定 y y y 更好。
比特币中使用的哈希函数为SHA-256。
数字签名 digital signature
数字签名是非对称加密的一种应用方式。数学上,可以通过一个简单公式来表示,整个数字签名的大概流程如下:
hash: x = hash(data)
send: c(x) and data
------- network -------
receive: c(x) and data
verify: d(c(x)) = x = hash(data)
例:
- Alice 需要转 100 元电子货币给 Bob。Bob 需要一种手段,验证该交易是来自 Alice,且 Alice 不能抵赖。
- Alice 写好交易信息 data: Alice 给 Bob 100 元电子货币。
- Alice 使用哈希算法生成交易信息的哈希值 x = hash(data)。
- Alice 通过通过随机数生成器生成一对秘钥,其中一个作为公钥 d,一个作为私钥 c。
- Alice 使用私钥 c 对交易信息 x 进行签名,得到数字签名 c(x)。
- Alice 使用互联网将数字签名 c(x) 和交易信息 data 传递给 Bob。
- Bob 使用公钥 d,对数字签名进行解密 d(c(x)) 得到交易信息哈希值 x。
- Bob 用公钥 d 解密数字签名 c(x) 的值得到交易信息的哈希值 x。
- Bob 用哈希算法生成交易信息的哈希值 hash(data)。
- 如果 Bob 生成的交易信息的哈希值 hash(data) 等于 Alice 生成的交易信息的哈希值 x ,那么 Alice 拥有私钥,否则 Alice 没有私钥。
- 如果 Alice 抵赖,任何人都可重复 Bob 的校验步骤,并确认交易 data:Alice 给 Bob 100 元电子货币。