区块链学习二–密码学原理

比特币中使用到了密码学的知识,主要是哈希函数与数字签名

文章目录

  • 区块链学习二–密码学原理
  • 一、哈希函数的工作原理
    • 1.哈希碰撞(collision resistance)
    • 2.单向性(hiding)
    • 3.两个性质结合(digital commitment)
    • 4.puzzle friendly
      • 挖矿原理
  • 二、公钥密码算法
    • 1.引入
    • 2.签名
  • 三、总结


一、哈希函数的工作原理

1.哈希碰撞(collision resistance)

哈希碰撞的含义:不同的输入,哈希值是相同的

x≠y,H(x) = H(y)

输入空间较大 输出空间较小,出现哈希碰撞的情况很常见。碰撞是客观存在的。 实际中,靠一个个数试,去找到两个不同的数的哈希值是相同的,几乎是不可能的

MD5算法已经可以人为的制造哈希碰撞。因此该算法已不安全。

2.单向性(hiding)

x→H(x)

上面公式只能正推 不能反推。
只能通过暴力破解求解哈希值。取遍x所有的可能值即可推出哈希值。
单向性成立的条件是:输入的取值空间要足够大,且输入的值较均匀
H(x||nonce):输入值加上一个随机数再进行哈希可以保证输入值随机且较均匀。

3.两个性质结合(digital commitment)

这个地方老师讲解的特别好
假设一个股神预测明天的股市,股神将预测的结果说出来了,大家也都知道股神预测的结构,其实这种预测并不能够判断股神预测的是否是对的。假设大家都根据股神的预测与买卖股票的话,那么股神的预测是正确的;反之,则是错误的。
这个时候就出现了一种解决方法,股神把预测的结果计算一个哈希值,并将该哈希值交由可靠的第三方机构保管,等收盘后,再进行验证股神是否预言正确。

4.puzzle friendly

无法确定输出的内容(哈希值),也无法预测输出的内容。假设要计算一个数的哈希值,使这个数的哈希值小于一个固定的阈值,其实是很难的,这也设计到了比特币中挖矿的概念。

挖矿原理

nonce与区块的块头其他信息结合在一起作为输入得到的哈希值小于一个目标阈值

H(block header nonce)≤ target

工作量证明:挖矿需要大量的工作寻找nonce,而寻找nonce值没有捷径,只能靠试。挖矿较难,而验证nonce的值比较简单。

比特币中的哈希函数是SHA-256


二、公钥密码算法

1.引入

开户:创建一个公私钥对。该公私钥对即为账户(公钥相当于银行账户,交易只需知道对方的公钥即可。私钥个人保存,知道对方的公钥可对对方进行转账)

对称密码算法:由于密钥分发不方便。因此出现了公钥密码算法。
加密使用公钥,解密使用私钥(私钥保存在本地)
生成公私钥的过程是需要一个较好的随机源。随机源不好有可能泄露私钥。

2.签名

签名使用私钥,验证使用公钥(注:该公私钥是私钥者)。
Q:如何确定交易确确实实是交易的人发起的。
A:对该笔交易进行签名,使用私钥进行加密,验证方使用公钥进行验证。
出现公私钥对相同的概率是几乎不可能的(随机源需好)

三、总结

比特币系统中先对message计算哈希,再对哈希进行签名。

大家可以参考这篇博客 这位博主写的非常的详细 区块链技术与应用-密码学原理