肖臻老师《区块链技术与应用》——BTC密码学原理
比特币被称为加密货币,但是区块链中的交易都是公开的,加密体现在哪里?保证区块链不可篡改性。
hash哈希
密码学中采用的哈希函数称为:cryptographic hash function
- 哈希碰撞:给定x和y,且有x!=y,但给定一个哈希函数Hash(),可以得到Hash(x)=Hash(y),则称为hash碰撞。哈希碰撞难以避免,只要保证给定x,很难找到一个y,能够在x不等于y的前提下,是的hash(x)=hash(y)就认为其是collision resistance的。
- collision resistance:我有信息x,但是并不想让别人知道x具体是什么,我只需要告诉别人hash(x)即可,对方可以通过hash(x)指导你确实指导x这个信息,并且无法/很难通过hash(x)反推出x。该性质保证x!=y时,hash(x)和hash(y)是不相等的。
- hiding:无法在一直hash(x)和hash()的情况下,反推出x的具体值,这是一种理想情况。
- collision resistance和hiding结合实现digital commitment(数据保证):在股票预测的场景中,一个人对股票进行预测,那么如何知道他的预测是否正确呢?可以提前公布预测结果,但是这也会出现一个问题,当公布预测结果后,股票可能也会被影响。所以应该是将预测结果写出并密封交给一个可信第三方,等实际结果出来后与之对比,这就是digital commitment。现实中,很多场景把那个不存在这样的第三方机构,区块链技术为此就提供了一个很好的解决办法——将预测结果看作x,提前公布hash(x),等到预测结果发生时间来临后,公布x,如果根据x可以得到公布的hash(x),就说明公布的x确实为预先所预测的内容,再进行判断预测是否准确。实际使用中,未来使x足够大,回对x进行“加盐”,对x拼接一个nonce,再对整体取hash。
- Puzzle friendly:挖矿难,验证易。找到一个哈希值只能通过不停的运算查找出来。性质要求哈希值计算事先不可预测,仅仅根据输入很难预测出输出。
签名
在比特币系统中,申请账户是用户自己来处理的,即自己创建一个公钥-私钥对。 公钥和私钥的应用保证了“签名”的应用。当在比特币网络中进行转账时,通过“签名”可以明确是由哪个账户转出的,从而防止不良分子对其他账户比特币的盗取。 在发布交易时,通过自己私钥签名,其他人可以根据公钥进行验证,从而保证该交易由自己发起。也就是说,只有拥有私钥,才能将该账户中的比特币转走。