Go语言Hyperledger区块链开发实战
上QQ阅读APP看书,第一时间看更新

1.1.3 加密算法

加密算法

加密算法是区块链领域的核心技术,是将区块连成链的关键,也是数据防篡改和操作不可抵赖的算法保障。

从工作原理的角度划分,目前常见的加密算法可以分为三类:除了1.1.2小节提及的哈希算法,还包括对称加密算法和非对称加密算法。从算法来源的角度划分,加密算法可以分为两类:国际加密算法和国密算法。如果没有明确说明,则本小节介绍的加密算法均指国际加密算法。

1.哈希算法

哈希算法可以将不同长度的数据映射为固定长度的数据。常用的哈希算法包括MD5、SHA1、SHA-224、SHA-256、SHA-384、SHA-512和 SM3(国产哈希算法)。这些算法支持的最大待处理消息长度与得到的摘要数据长度各不相同,具体如表1-1所示。

表1-1 各种哈希算法支持的最大待处理消息长度与得到的摘要数据长度

例如,比特币系统中采用SHA-256算法计算区块的摘要信息。

为了演示哈希算法的效果,可以搜索在线哈希计算网站来查看对数据进行MD5处理的效果。编者随机选择了一个网站,如图1-3所示。

在左侧文本框中输入待处理的数据,单击“加密”按钮,右侧文本框中即会出现摘要数据。

图1-3 在线哈希计算网站对数据进行MD5处理

MD5被称为单向加密算法,这是因为MD5的处理结果并不能被解密出原始数据。很多所谓的MD5解密工具实际上是将已知的MD5处理结果保存在字典中,然后根据字典中的结果数据反推出原始数据,也就是暴力破解。MD5处理结果实际上是原始数据的唯一特征值。这个特征值通常被称为数字指纹,它可以标识原始数据是否被修改,因为哈希算法具有很强的抗碰撞能力。也就是说,2个不同的数据,它们具有相同数字指纹的可能性非常小。

例如,表1-2所示是一组对数据进行MD5处理的结果。

表1-2 一组对数据进行MD5处理的结果

可以看到,无论是非常短的数据(例如1)还是大段的文字,经过MD5处理,都会得到一个32位的十六进制字符串。有人对这种情况做了形象的比喻:无论是蚂蚁还是大象,在经过MD5处理后都会得到一只猴子。

可能有的读者已经注意到了,在图1-3所示的网页中,可以选择摘要数据为16位的十六进制数据。实际上16位摘要数据是从32位摘要数据中截取(9~24位)出来的。

2.对称加密算法

对称加密算法是使用密钥对数据进行加解密的算法。之所以称之为对称加密算法,是因为加密方和解密方使用相同的密钥。对称加密算法的加解密过程如图1-4所示。

图1-4 对称加密算法的加解密过程

常见的对称加密算法有DES、3DES和AES等。

对称加密算法的优点是算法公开、计算量小、加密速度快、解密效率高;缺点是一旦密钥丢失,加密的信息将被公开,而且无法证明信息是谁发送的,因为双方都拥有同样的密钥。

通常,区块链应用中不会使用对称加密算法。

3.非对称加密算法

顾名思义,非对称加密算法就是加密方和解密方使用不同的密钥的算法。这一对密钥分别被称为公钥和私钥。私钥是保密的,只有它的拥有者才知道。公钥由私钥生成,可以公开。公钥和私钥是匹配的一对。非对称加密算法包括下面两种应用方法。

(1)当向一个用户A发送数据时,可以使用他的公钥对数据进行加密。然后将加密数据发送给用户A。用户A收到加密数据后,使用私钥进行解密。因为数据是使用用户A的公钥加密的,所以只能使用与公钥相匹配的私钥解密,其他人即使截获了加密数据也无法解密,从而实现数据传输的安全性。但是,用户A的公钥是公开的,很多人都知道,用公钥加密的数据不能证明发送者的身份。这就引入了非对称加密算法的第2种应用——数字签名。

(2)当向一个用户A发送数据时,可以首先对数据进行哈希加密,然后使用用户B的私钥对哈希摘要数据进行二次加密。使用用户B的私钥对数据进行加密,所有拥有其公钥的用户都可以解密。但是解密得到的是原始数据的哈希摘要,而哈希摘要是不可逆的,因此这么做并不会泄露原始数据。但是其他人使用用户B的公钥可以解密数据,这就证明了这条数据是用户B发送的,因为只有他拥有私钥。这就是数字签名的过程。

非对称加密算法的应用如图1-5所示。

图1-5 非对称加密算法的应用

4.国密算法

密码学在相当长的一段时间内都作为军用科技被各国政府严密管控。随着经济的发展,企业对于商用密码的需求愈发强烈。为保障商用密码的安全性,国家密码管理局制定了一系列密码标准,包括SM1(SCB2)、SM2、SM3、SM4、SM7、SM9、祖冲之密码算法(ZUC)等。在《中华人民共和国网络安全法》中规定:“国家实行网络安全等级保护制度。”

在进行等级保护评测时,要求被评测系统对敏感数据使用国密算法加密。国密算法的基本情况如下,读者可以在需要时选择使用。

● SM1:对称加密算法,密钥长度为128bit,算法不公开,固化在芯片中。

● SM2:开源的非对称加密算法,可以用于数据的加解密和数字签名。

● SM3:开源的哈希算法,用于生成数据摘要。

● SM4:开源的对称分组加密算法,密钥长度为128bit。

● SM7:对称分组加密算法,密钥长度为128bit,适用于非接触式IC卡。

● SM9:标识密码算法,标识密码将用户的标识(如邮件地址、手机号码、QQ号码、微信账号等)作为公钥,省略交换数字证书和公钥的过程,使安全系统变得易于部署和管理,非常适合端对端离线安全通信。

● ZUC:我国自主研究的流密码算法,是运用于移动通信网络中的国际标准密码算法。