
特别指出:本文讲到的数字签名不是指电子签章。
1.区块链的数字签名作用
日常生活中我们手写的签名相信大家都不陌生,作为确定身份、责任认定的重要手段,各种重要文件、合同等均需要签名确认。
同一个字,不同的人写出来虽然含义完全相同,但是字迹这种附加值是完全不同的,刻意模仿也能通过专业的手段进行鉴别。
因为签名具有唯一性,所以可以通过签名来确定身份及定责。
区块链网络中包含大量的节点,不同节点的权限不同。
举个简单的例子,就像现实生活中只能将自己的钱转给他人,而不能将别人的钱转给自己,区块链中的转账操作,必须要由转出方发起。
区块链主要使用数字签名来实现权限控制,识别交易发起者的合法身份,防止恶意节点身份冒充。
2.数字签名的效力
数字签名也称作电子签名,是通过一定算法实现类似传统物理签名的效果。
目前已经有包括欧盟、美国和中国等在内的20多个国家和地区认可数字签名的法律效力。
2000年,中国新的《合同法》首次确认了电子合同、数字签名的法律效力。
2005年4月1日,中国首部《电子签名法》正式实施。
数字签名在ISO 7498-2标准中定义为:“附加在数据单元上的一些数据,或是对数据单元所做的密码变换,这种数据和变换允许数据单元的接收者用以确认数据单元来源和数据单元的完整性,并保护数据,防止被人(例如接收者)进行伪造。”
3.数字签名的原理
这里要再次澄清一个误区,即数字签名并不是指通过图像扫描、电子板录入等方式获取物理签名的电子版,而是通过密码学领域相关算法对签名内容进行处理,获取一段用于表示签名的字符。
在密码学领域,一套数字签名算法一般包含签名和验签两种运算,数据经过签名后,非常容易验证完整性,并且不可抵赖。
只需要使用配套的验签方法验证即可,不必像传统物理签名一样需要专业手段鉴别。
数字签名通常采用非对称加密算法,即每个节点需要一对私钥、公钥密钥对。
所谓私钥即只有本人可以拥有的密钥,签名时需要使用私钥。
不同的私钥对同一段数据的签名是完全不同的,类似物理签名的字迹。
数字签名一般作为额外信息附加在原消息中,以此证明消息发送者的身份。
公钥即所有人都可以获取的密钥,验签时需要使用公钥。
因为公钥人人可以获取,所以所有节点均可以校验身份的合法性。

数字签名的流程如下:
• 发送方A对原始数据通过哈希算法计算数字摘要,使用非对称密钥对中的私钥对数字摘要进行加密,这个加密后的数据就是数字签名;
• 数字签名与A的原始数据一起发送给验证签名的任何一方。验证数字签名的流程如下:
• 首先,签名的验证方,一定要持有发送方A的非对称密钥对的公钥;
• 在接收到数字签名与A的原始数据后,首先使用公钥,对数字签名进行解密,得到原始摘要值;
• 然后,对A的原始数据通过同样的哈希算法计算摘要值,进而比对解密得到的摘要值与重新计算的摘要值是否相同,如果相同,则签名验证通过。
A的公钥可以解密数字签名,保证了原始数据确实来自A;解密后的摘要值,与原始数据重新计算得到的摘要值相同,保证了原始数据在传输过程中未经过篡改。
4.区块链中的用法
在区块链网络中,每个节点都拥有一份公私钥对。
节点发送交易时,先利用自己的私钥对交易内容进行签名,并将签名附加在交易中。
其他节点收到广播消息后,首先对交易中附加的数字签名进行验证,完成消息完整性校验及消息发送者身份合法性校验后,该交易才会触发后续处理流程。
这对应到前文“比特币的通俗故事”一节中村民验证喊出交易者的声音,确保是张三自己发出的交易。


