《区块链技术与应用》笔记(一)密码学原理

《区块链技术与应用》公开课笔记2——BTC密码学原理篇

哈希

哈希不仅在计算机里应用广泛,在密码学中也同样非常重要。密码学中的哈希函数名为cryptographic hash function 其中的两个重要特性是抗碰撞性和隐藏性

抗哈希碰撞(collision resistance)

哈希碰撞:给定x和y,且有x!=y,但给定一个哈希函数Hash(),可以得到Hash(x)=Hash(y),则称为hash碰撞。

抗碰撞性保证如果出现Hash(x)!=Hash(y),那么x一定不会为y(理想状态,并不绝对)。在实际应用中哈希碰撞非常常见,很难找到两个不相等的数使其哈希值相等(暴力破解除外)。但是!这种碰撞是不可控制的。没有哪个哈希函数能够在数学上证明是抗碰撞性的。

抗碰撞性的优势在于原值和哈希值的关系非常紧密。如文件上传到云空间或磁盘之前,算出文件的hash值,将来下载之后再计算一遍hash,如果hash相等说明这个文件并未被篡改过

隐藏性(hiding)

一般认为,给定x和Hash(),可以很容易得到Hash(x),但没有办法在已知Hash(x)和Hash()的情况下,反推出x的具体取值。当然这在理论上也有例外,那就是x的具体取值范围小且分布不均,那么就有可能被暴力破解出来

数据验证(digital commitment)

假设有个人声称可以对股票进行涨停预测,我们如何保证能够知晓其预测是否准确?最简单的是提前公布,等待实际结果出现后验证。但实际中,当提前发布预测后,可能会由于预测者本身对股市实际结果造成影响。所以,应该将提前将其写于纸上并密封,交给第三方机构保管,等到实际结果出现后开启密封与实际对比,这就是digital commitment。而第三方机构需要能够使人信服,在实际生活中,有很多场景并不存在一个这样的第三方机构,而区块链技术正为此提供了一个很好的解决方法。

我们把预测结果看作x,提前公布Hash(x),等到预测结果发生时间来临后,公布x,如果根据x可以得到公布的Hash(x),则说明公布的x确实为***的内容。从而,我们可以实际进行判断预测是否准确。实际使用中,为了x足够大,会对x进行“加盐”,对x拼接一个nonce,对其整体取Hash。

谜题友好性Puzzle friendly

计算的哈希值的结果是不可预测的,如果输入x,想要哈希值在某个范围内,没有什么快捷方式,只能通过不停地运算查找。在区块链中的例子就是挖矿。

每个区块头中都有2个域,随机数和目标值,矿工做的事情就是不断尝试nonce值,将这个值结合区块头信息一起作为输入,然后计算哈希值。如果哈希值<=target,那么挖矿成功,否则不成功、继续尝试其他nonce值。也就是说,比特币系统中只能通过挖矿来获得比特币。这个性质也保证了工作量证明这个机制可以运行下去:挖矿难,验证易
注:比特币系统中采用SHA-256哈希函数

签名

去中心化的比特币系统中,创建账户就是自己创建一个公钥-私钥对,它保证了签名的应用。在比特币网络中进行转账时,通过“签名”可以明确是由哪个账户转出的,从而防止不良分子对其他账户比特币的盗取。

在发布交易时,通过自己私钥签名,其他人可以根据公钥进行验证,从而保证该交易由自己发起。也就是说,只有拥有私钥,才能将该账户中的比特币转走。

注意:比特币系统中,很难通过生成大量公私钥对来获取他人私钥。理论上是可行的,但目前还没有过类似攻击成功的先例。生成公私钥的过程是随机的,但要求选择一个好的随机源。比特币在生成公私钥和签名时,都有相当好的随机源

posted @ 2022-04-03 23:35  我永远喜欢石原里美  阅读(206)  评论(0编辑  收藏  举报