肖臻公开课(二)——比特币中的密码学

本笔记对应北京大学肖臻老师《区块链技术与应用》公开课第二课。

0.前言

比特币中的所有交易信息都是公开透明的,而比特币中用到的密码学知识主要为哈希和签名。接下来也将依次介绍哈希和签名。

1.哈希函数

在本节中,先简单的介绍了哈希函数的定义,然后依次介绍了在比特币中运用到的哈希函数的3个性质。

  • 哈希函数简介(1.1)
  • collison resistance(1.2)
  • hiding property(1.3)
  • puzzle friendly(1.4)

1.1 哈希函数简介

哈希函数在本质上可以理解为一种特殊的函数,它符合一个输入对应一个唯一输出的基本性质。
例如函数y=H(x)中,X为输入,y为我们的哈希值。哈希函数的特点为输入的X是任意字符串,输出的哈希值是一个固定长度的字符串。

1.2 collison resistance

collison resistance(抗碰撞性),在理解抗碰撞性前,必须先了解哈希碰撞。

  • 哈希碰撞:

当有两个不同的输入通过哈希函数后,映射到了相同的输出,此刻可以说产生了哈希碰撞,即对于函数H(x)而言,存在x1≠x2,使得H(x1)=H(x2)。

哈希碰撞是常见的且不可避免的,因为通常来说,输出空间是相对来说比较小的,但是输入空间是非常大的,因此理论上讲必然有某两个输入映射到一个输出上。

  • 抗碰撞性:

我们很难人工的去找到(即除了穷举brute-force外)一组x1≠x2,使得H(x1)=H(x2)

首先要明确一点,目前来说,哈希函数是无法在数学上被证明出实现了collsion resistance性质,而现在主要是通过实践中的经验,在无数的实践中证明某个哈希函数确实无法人为制造碰撞,那么就说此哈希函数具有抗碰撞性。

因此抗碰性并不是永恒的,如哈希函数MD5就被我国著名密码学专家王小云教授找出了人为制造哈希碰撞的方法,使得MD5被淘汰。

  • 抗碰撞性质作用举例:

判断文件是否被更改过: 将文件整体打包求一个hash值,在经过一段时间后,可以对文件再次求hash值,比较两者是否不一样,就可以知道文件是否被更改过。

1.3 hiding property

  • hiding property含义

    hiding property,可以简单理解为单向性。即:给定x和Hash(),可以很容易得到Hash(x),但没有办法在已知Hash(x)和Hash()的情况下,反推出x的具体取值,当然这也是一个理想的情况。

  • hiding property作用

collision resistance和hiding结合实现digital commitment(数据保证): 在视频中,肖老师提到关于股市预测的案例,某个人对某个股票进行涨停预测,我们如何保证能够知晓其预测是否准确?最简单的是提前公布,等待实际结果出现后验证。但实际中,当提前发布预测后,可能会由于预测者本身对股市实际结果造成影响。所以,应该将提前将其写于纸上并密封,交给第三方机构保管,等到实际结果出现后开启密封与实际对比,这就是digital commitment。而第三方机构需要能够使人信服,在实际生活中,有很多场景并不存在一个这样的第三方机构,而区块链技术正为此提供了一个很好的解决方法。
我们把预测结果看作x,提前公布Hash(x),等到预测结果发生时间来临后,公布x,如果根据x可以得到公布的Hash(x),则说明公布的x确实为的内容。从而,我们可以实际进行判断预测是否准确。实际使用细节上,为了x足够大,会对x进行“加盐”,对x拼接一个nonce,然后对其整体取Hash。

1.4 puzzle friendly

该性质要求哈希值计算事先不可预测,仅仅根据输入很难预测出输出。

例如:我们需要一个哈希值,存在于某一个范围内,只能通过不停运算查找出来。所以这条性质就保证了比特币中挖矿行为没有捷径可言。

2.签名

在本小节中,肖老师主要讲解了非对称加密体系和比特币中的账户管理。

2.1 非对称加密体系

  • 对称加密体系(symmetric encryption algorithm)

使用同一个密钥进行加密解密,就是对称加密体系。
使用非对称加密体系具有密钥难保存、密钥分发不方便等缺点。

  • 非对称加密体系(asymmetric encryption algorithm)

在此体系中,每个人都有一个私钥和一个公钥。公钥可以公开,私钥保存在本地。在进行发送的时候,发送方使用接收方的公钥进行加密,在接收方接受到数据后,使用接受方的私钥进行解密。

  • 使用非对称加密体系完成数字签名

在比特币系统中,此加密体系的最大作用就是完成数字签名。在比特币网络中,当某个人想发起一项交易,交易发起者需要使用自己的私钥对此交易进行签名,网络上的其他人在收到此交易信息后,使用发起者的公钥对交易信息进行验证。

  • 比特币中的账户管理

比特币中每一个账户实际上就是一个(public key,private key)

在第三方的系统中,账户开户依赖于第三方,而作为一个去中心化的比特币系统,显然不能进行“申请账户”。

比特币中如果你要开户(账户地址),只需要创建一对公私钥即可。通俗来讲公钥就像是银行账户一样,私钥就像是银行密码。公钥可以公开出去,大家给你的账户地址转账就汇到你账户地址就可以了。

在理解以上过程后,可以发现有一个漏洞:如果有坏人疯狂生成私钥,从而生成公钥,从而生成地址,来达到攻击的目的(如果找到和某人地址一样的地址,就可以获得这个人的私钥)。比特币系统为了避免这种情况的发生,要求比特币生成私钥的生成器,需要非常好的随机源和非常大的输出空间。并且要求在从私钥生成公钥的过程中,也要有非常好的随机源。

结尾

本章的密码学内容非常重要,对深入理解区块链技术很有帮助,要好好体会。

猜你喜欢

转载自blog.csdn.net/doreen211/article/details/129170135