[比特币]比特币中的密码学原理

比特币又称加密货币,但其实加密货币并没有加密:区块链中的所有信息都是公开的,包括交易的内容、交易的金额以及交易账户的地址。之所以称之为加密货币,主要是因为交易的双方在不与真实世界发生关联的情况下,双方的身份是无法获知的。

比特币中主要用到了密码学中的“哈希”和“签名”。

密码学中用的哈希被称作Cryptographic Hash Function,它有两个重要的性质:

  • Collision resistance:抗碰撞性。哈希碰撞是指给定\(x \neq y\),但经过哈希运算后,\(H(x) = H(y)\),这种情况被称为“哈希碰撞”。哈希碰撞是不可避免的,输出空间是有限的,但输入空间是无限的。假如一个256位的哈希值,那么它的输出空间为\(2^{256}\),即它的输出有\(2^{256}\)种可能,但它的输入空间是无限大的。按照“鸽笼原理”(又称抽屉原理),必然会出现不同输入映射到同一输出的情况。Collision resistance并不是说不会出现哈希碰撞,而是说没有高效的方法来人为地制造哈希碰撞,即给定一个\(x\),没有高效的方法找到一个\(y\),使\(H(x) = H(y)\)。这一性质可以防止消息被篡改。
  • Hiding:隐匿。即哈希函数的计算过程是单向、不可逆的。给定一个\(x\),可以计算出\(H(x)\),但无法从\(H(x)\)逆推出\(x\)。其成立的条件是输入空间必须足够大且均匀分布的。与Collision resistance性质结合,可以实现digital commitment(数字承诺)。

鸽笼原理:如果有5只鸽子笼,养鸽人养了6只鸽子,那么当鸽子飞回笼中后,至少有一个笼子中有2只鸽子。

除了上述的两个性质之外,比特币中的哈希函数还要求:

  • Puzzle friendly:即哈希值的计算是不可预知。Difficult to solve, but easy to verify.

BTC中用的哈希函数:SHA-256

BTC中账户的创建与现实中创建银行账户不同。在BTC中,任何人都可以随时随地地创建账户,用户只需在本地创建一个公私钥对,即一个公私钥对即为一个账户。公私钥对是非对称加密算法中的概念。公钥加密,私钥解密是常见的公私钥加密用法。私钥加密,公钥解密就是“签名”的过程。

在BTC系统中,用户的公钥即为其地址,发布交易时,用户需要用其私钥对交易进行签名,其他用户可以用其公钥对该交易进行验证。生成公私钥时需要有个好的随机源,否则容易造成私钥泄露。


声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)进行许可,使用时请注明出处。


posted @ 2020-08-28 10:17  落雷  阅读(814)  评论(2编辑  收藏  举报