如何证明我才是我?区块链基础知识解读之三 - 数字签名

有过外贸经历的朋友可能都清楚一种很流行的诈骗手段。骗子会冒充国外客人向国内供货商或者外贸公司发送邮件,用伪造的银行付款水单要求发货,如果没有足够的防范能力和交易原则,就容易中招。更严重的一种方式是黑客侵入与国外客人来往的收件邮箱,冒充自己与国外客人沟通,把本应打给自己的货款截胡到骗子的账号。就我知道的类似事情就发生过很多次,有的损失金额非常巨大。这样的事遇到一次,有些公司就面临倒闭的危险。目前的法律基本上也没有有效的解决方法,因为跨国官司涉及的程序太多,取证困难,成本大,时间长,还不一定有结果。碰到就只能自认倒霉了。


骗子能够骗取成功,是因为掌握了我们的邮箱账号和密码。但也有另一方面的原因,收信方的防范意识不够。骗子无论怎么伪装,总会有漏洞的,比如骗子的公司名称不可能跟我方一模一样,收款账号,收款人,电话号码或者其他的联系方式也都不一样,稍微谨慎一点的客户在汇款之前如果用其他联系方式再确认一次,能够通个电话,就很容易避免上当受骗。


这样的骗局在区块链的世界就更容易避免了,因为我们有保护信息传输的武器。第一个是前天学习的非对称加密,它能保护发送的信息不被篡改。如果我用客人的公钥对发送的信息进行加密,那么只有客人自己才能解密邮件的内容,因为只有他才掌握自己的私钥。但是只保护邮件内容不被他人修改还不够,万一发信的人不是我,而是骗子冒充我。因为区块链中的公钥是公开的,任何人都可以知道客人的公钥。要想验证我才是真正的供货商,收款邮件不是骗子冒充我发的,需要用到另一个武器:数字签名技术。


在讲数字签名之前,我们先来回忆一下非对称加密的原理,发信人用收信人的公钥对要发送的邮件信息进行加密,收信人用自己的私钥进行解密,得到信息的原文。它用于保护邮件内容的真实不被篡改。非对称加密还有另一个功能,我可以用自己的私钥对信息进行加密,收信人用要我的公钥来解密,它的作用是验证我的身份。这个操作就是数字签名。

什么是数字签名呢?

数字签名:就是发信人对信息进行哈希算法得到信息的哈希值,并用自己的私钥对哈希值进行加密,产生的别人无法伪造的一段字符串,它可以有效验证信息发送者的身份和所发送信息的真实性。

由此可见,数字签名是先进行哈希算法,然后用私钥加密哈希值。它用到了我们前天和昨天学习的两种技术:非对称加密和哈希算法。


数字签名的生成过程为:

首先是发信人的加密过程

1.用对方的公钥加密信件原文得到密文M;

2.用哈希算法计算原文得到哈希值H;

3.用自己的私钥加密哈希值H得到数字签名S;

4.把密文M和数字签名S一起发给收信人。


然后是收信人的解密和验证过程

5.收信人用发信人的公钥解密数字签名S,得到信件原文的哈希值H;

6.用自己的私钥解密密文M, 得到信件原文;

7.用相同的哈希算法计算信件原文得到哈希值H’;

8.对比两个哈希值H和H’, 如果匹配则说明信件内容真实,未被篡改,而且发信人的身份是真实的。


数字签名能够证明我的身份是真实的,因为数字签名是用我自己的私钥进行加密,而私钥只有我自己掌握,别人无法拿到。而且区块链中的私钥算法也很复杂,用现在的技术盗取基本不太可能。

 

数字签名和非对称加密帮我们验证了两件事:

1. 信息是我发送的,而不是他人伪造的;

2. 信息在发送过程中没有被篡改。

数字签名在区块链中是怎么被应用的?

以比特币的数字签名为例,它是由比特币转账的转出方生成的一段防伪造的字符串,可以用来验证签字者的身份和签字时间,从而证实被签信息是否真实正确。



操作步骤为:

1.我在给你转账比特币之前需要将交易信息用哈希算法浓缩成一段哈希值;

2.然后用自己的私钥对哈希值进行加密以形成数字签名;

3.之后,我会将交易信息、数字签名和公钥都广播出去,矿工会将这些记录下来;

4.旷工用我的公钥解密数字签名得到交易信息的哈希值;

5.旷工再用同样的哈希算法对交易信息进行计算得出哈希值,与刚刚解密的哈希值做对比进行验证;

6.如果验证成功就证明该笔交易确实是由我发出的,之后你会收到比特币。


由于数字签名和非对称加密具有防止信息在发送过程中被篡改和伪造的功能,它以准确和安全的方式提供了发信人的身份。这样,双方就可以安全地完成交易、共享文档等。

推荐阅读更多精彩内容