4.4 基于数字签名的加密通信
通过利用椭圆曲线加密算法进行加密和数字签名,并用哈希算法SHA256来辅助验证情书的完整性,小明和翠花终于可以在网上欢乐地写情书,且不用担心被伪造、篡改和偷看,也不用担心在网上传播的密钥被截获。看来区块链技术首先给他们带来了幸福的生活,他们的通信过程如图4.4所示(假设小明的私钥是k1,公钥是k2;翠花的私钥是c1,公钥是c2)。
(1)小明写好情书(用字母a代表这封情书),然后用SHA256算法求出这封情书的哈希值,写作SHA(a)。
(2)小明用自己的私钥k1对哈希值加密,得到的结果就是一个数字签名,写作k1(SHA(a))。
(3)小明把情书a用翠花的公钥c2加密,得到c2(a),然后把加密后的情书c2(a)和数字签名k1(SHA(a))一起发送给翠花。
(4)翠花收到加密情书c2(a)后,先用自己的私钥c1对它解密,得到了情书原文。
(5)为了保证情书确实是小明写的且未被篡改,翠花还需要验证情书的数字签名。翠花用小明的公钥k2解密数字签名k1(SHA(a)),得到SHA(a)。
(6)翠花用SHA256算法求出a的哈希值D,用这个值与SHA(a)比较,如果是一致的,则说明情书与小明当初发出的是一样的,传输过程中未出现任何错误。
图4.4│小明和翠花的加密通信全过程示意图
通过上面6个步骤,小明和翠花可以安全通信,即使是在一个公开的网络上,二黑可以随意观察他们的通信过程,但很难伪造和篡改他们的情书。在比特币系统中,也正是用了这种方法来保障区块数据不易被篡改和伪造。例如,在区块链中,当小明向翠花发送一个“虚拟货币”时,他会用自己的私钥对翠花的公钥进行数字签名,当其他人用小明的公钥对这个数字签名解密时,就会得到翠花的公钥。这就证明了以下两点。
(1)用小明的公钥能正常验证(解密)这个数字签名,说明这个数字签名确实是小明发出的。
(2)这个数字签名被解密后,得到的是翠花的公钥,这就证明小明发出的“虚拟货币”的接收者确实是翠花。
当然,区块链的巧妙之处并不仅仅在于利用了哈希算法和数字签名,它设计了一套严密的数据链结构,并设计了一个在无中心管控的团队中达成共识的算法,从而在不可信的环境中构造出一个非常巧妙的、可信任的区块链系统。