如前所述,区块链交易完整性和安全性的实现借助于公钥密码学和哈希函数,前面两篇文章我们详细介绍了公钥密码学和函数,这篇文章我们在此基础上具体说明实现的详细过程,以便对这两项技术在区块链的应用有更深的理解。
为了保障交易的来源和完整性这一目标,需要经历以下步骤:
-
保护一个唯一的账户地址:为了能够唯一地识别参与交易的人,我们使用了公钥和私钥对,账户地址是使用公钥和私钥对生成的,具体步骤:
-
生成 256 位的随机数,并将其指定为私钥,使用密码进行安全保护和锁定。
-
将 ECC 算法应用于私钥, 以获得唯一的公钥,这是私钥对。
-
然后对公钥应用哈希函数以获取账户地址,地址大小较短,只有 20 字节或 160 位。
-
发件人通过数字签名对交易进行授权以及验证交易的内容没有被修改。
区块链交易是经过授权的、不可否认的、不可篡改的,为了实现这一目标,数字签名技术起了很大的作用。
这一过程可以简单概括为:接收方获取原始数据, 并对安全哈希进行数字签名。
接收方可以重新计算收到的原始数据的哈希值, 并将其与收到的哈希值进行比较,以验证文档的完整性。
为了更好地理解这一过程,我们先了解下数字签名的基本原理:
-
数据经过哈希处理和加密:在数字签名的过程中,首先需要对数据进行哈希处理。哈希处理是将任意长度的输入数据转换为固定长度的哈希值。这个哈希值就是原始数据的“指纹”,它能唯一地代表原始数据。接着,使用加密算法对这个哈希值进行加密,加密的目的是保护哈希值的安全性,并生成数字签名。
-
数字签名:数字签名就是加密后的哈希值,它是通过发送方的私钥对哈希值进行加密生成的。数字签名的作用是证明消息的真实性、完整性以及发送方的身份。
-
接收方获取原始数据,并对原始数据进行哈希计算:当接收方收到数据和数字签名时,他会首先提取出数据和数字签名。接着,接收方需要对收到的数据进行哈希处理,生成一个新的哈希值。
-
接收方可以重新计算收到的原始数据的哈希值,并将其与收到的哈希值进行比较:接收方使用相同的哈希算法对原始数据进行哈希计算,得到一个新的哈希值。然后,它会用发送方的公钥对收到的数字签名进行解密,得到发送方原始数据的哈希值。接收方将这两个哈希值进行比较。如果它们一致,就说明数据在传输过程中没有被篡改过,即数据的完整性得到了验证。
所以,结合数字签名的原理,这一过程可以具体为:
-
找到交易数据字段的哈希值;
-
使用发起交易的参与者的私钥对该哈希进行加密,因此,对交易进行数字签名以进行授权,并使交易不可否认,也就是确保了数据的来源。
-
这个哈希值刚刚添加到交易中,其他人可以使用交易发送者的公钥对其进行解密,并使用原始数据重新计算哈希值。然后,比较计算出的哈希值和在数字签名处收到的哈希值。如果是匹配项,请接受交易;否则,请拒绝它。