比特币-密码学基础

49 阅读2分钟

比特币主要用到了密码学中的两个功能:

  • 1.哈希
  • 2.签名

密码学中用到的哈希函数被称为cryptographic hash function, 它有两个重要的性质:

  1. collision(这里指哈希碰撞) resistance :例如x≠y H(x)=H(y) 两个不同的输入,输出却是相等的,这就称哈希碰撞。它是不可避免的,因为输入空间总大于输出空间。给出x,很难找到y,除非蛮力求解(brute-force)。 该性质的作用:对一个message求digest 比如message取m m的哈希值是H(m)=digest 如果有人想篡改m值而H(m)不变,则无法做到。 哈希碰撞无法人为制造,无法验证,是根据实践经验得来的。
  2. hiding 哈希函数的计算过程是单向的,不可逆的。(从H(x)无法推导出x) hiding性质前提是输入空间足够大,分布比较均匀。如果不是足够大,一般在x后面拼接一个随机数,如H(x||nonce)。
    该性质的作用:和collision resistance 结合在一起,用来实现digital commitment(又称为digital equivalent of a sealed envelope)
    把预测结果作为输入x,算出一个哈希值,讲哈希值公布,hiding让人们知道哈希值而不知道预测值,最后再将x公布,因为有collision resistance的性质,预测结果是不可篡改的。

签名

签名过程恰好加密过程相反。签名时私钥持有者使用私钥对内容做加密处理,接收方用对方的公钥解密。

举个生动的例子

课上,李雷写了一张纸条,让同桌传给韩梅梅,纸条内容为

韩梅梅,我是李雷,我喜欢你。

对李雷来说

  • 要确认韩梅梅收到纸条时内容未经改动(完整性)

对韩梅梅来说

  • 要确认纸条是李雷写的,而不是别人冒充李雷写的(身份认证)
摘要和签名

结合栗子,李雷需要

  1. 将纸条Hash,得到摘要(Digest)
  2. 自己的私钥,加密摘要,生成签名(Signature)
  3. 让同桌传递 纸条 和 签名

韩梅梅收到纸条和签名后

  1. 李雷的公钥,对签名解密,得到摘要[1]
  2. 对纸条内容Hash,得到摘要[2]

如果摘要[1] = 摘要[2],则说明纸条确实由李雷所写,且内容未经改动。因为

  • 只有李雷持有李雷的私钥,用私钥(李雷的私钥)加密的内容(签名)只有对应的公钥(李雷的公钥)才能解开(身份认证)
  • 如果纸条内容在传递过程中改变,则得到的摘要[2]一定与摘要[1]不同(完整性)。