01-比特币中的密码学原理
比特币,又被称为加密货币,但其实加密货币是不加密的,区块链上所有信息是公开的
比特币中主要用到了密码学中两个功能:1.哈希;2.签名
哈希(Cryptographic hash function)
两个性质:(密码学)
1.哈希碰撞:两个不同的输入算出来的哈希值是一样的
哈希碰撞很常见,也是不可避免的(因为输入空间是远远大于输出空间的)
没有什么高效的方法人为制造哈希碰撞
collision resistance:可以用来检测篡改(注:没有哪个哈希函数在数学可以证明是collision resistance,即理论无法证明)
2.hiding:哈希函数的计算过程是单向的,不可逆的(条件:输入空间足够大,让蛮力求解不可能实现,同时输入的分布比较均匀,各种取值的可能性都差不多)
若输入空间不足够大,可以在后面拼接一个随机数,然后再一起取哈希
hiding和collision resistance的性质结合起来,可以实现digital commitment(digital equivalent of a sealed envelop)
一个性质:(比特币)
puzzle friendly:哈希值事先不可计算,要让哈希值落在某一个范围值之内,只能一个一个去试
挖矿的过程没有捷径,只能不停地试nouce,所以这个过程才能被作为工作量证明(proof of work)
但是一旦这个nouce被找到,其他人要验证这个nouce是否符合要求就很容易,只要算一次哈希值即可(difficult to solve,but easy to verify)
比特币中用的哈希函数叫SHA-256(Secure Hash Algorithm)
签名
对称加密体系的一个弱点是密钥的分发不是很方便
比特币是去中心化的,每个人可以自己决定开户,无需任何人批准
开户只需要创立一个公钥和私钥对(public key,private key)
公私钥对来源于非对称的加密体系,叫做asymmetric encryption algorithm
加密用对方的公钥,对方收到后解密用自己的私钥
签名用的是私钥,验证签名用的是这个人的公钥
假设产生公私钥有一个好的随机源(a good source of randomness)
比特币中一般是先对一个message取哈希,再对这个哈希签名