帖子目录
数字签名和加密数据
在前面的帖子中,我们讨论了公钥密码 的用途, 就是对信息进行加密。
然而我们没有进一步的说明,实际上私钥也可以用于加密。
其实,私钥加密就是用于信息的数字签名 。只有通过数字签名,区块链才能确认是由您发起了交易,而不是其他人。
数字签名就是在信息中附加一组特定的代码。这组代码是利用哈希函数对该信息进行转换成哈希值,并进行私钥加密而成的。它用于标识签发者的身份,并能被接收者用其匹配的公钥来验证该信息在传输过程中是否被伪造。
从这里,我们可以清楚地看到公钥密码是如何的运用。
在第一个例子中,小明用小花的公钥A对发送的信息进行加密。所以小花收到信息后能够用其私钥A进行解密。
而在第二个例子里,小花用其私钥A进行签名。收到小花的信息后,小明亦可用小花的公钥A来验签,确认信息是由小花发送的。
一对公钥和私钥最大的特性就是我们可以用公钥或者私钥对信息进行加密,不过两者的目的却不同。
基本上,公钥加密过程和私钥签名过程是不同的; 同样的, 私钥解密和公钥验签也是完全相反的。
数字签名的意义
对于签名过程,您只对发出的信息附上您的签名,而没有对信息进行加密。
那么当信息发送到公共网络时,不只是您发送的对象可以读取您的信息,即使网络上的任何人也可以读取您的信息。
那么这么做,有什么特别的意义?
在目前的开放网络中,充斥着各种假新闻。那么要如何证明某些信息是真实的,并不是其他人任意发出的假信息?
如果您可以用公钥来验签信息的来源,那么您就可以证实该信息一定来自拥有相应私钥的人。
虽然数字签名只是验证信息的来源,并不保证信息的安全性。
然而,在现今的数字化世界或是区块链中,这种可以对信息来源或交易来源进行安全验证的方法,无疑解决了我们所面对的重要难题。
信息来源的验签
现在举个例子,李老板让小明发送一份 500 页带有数字签名的法律文件给他。通过这种方式,李老板可以确认这份法律文件是由小明通过网络发送给他,同时未被其他网络者篡改。
数字签名的操作过程如下:
- 首先,小明对要发送的法律文件采用哈希算法,得到一个微小即固定长度的摘要(或称数字指纹),
- 小明用自己的私钥对数字摘要进行加密,即做数字签名,
- 之后,小明将法律文件原文以及自己的数字签名加在一起形成一份签名的文件发送给李老板。
- 李老板收到签名文件后,首先用小明的公钥对数字签名解密,得到一个数字摘要,
- 李老板再用和小明一样的哈希函数对原文进行哈希运算,并得到另一个新的数字摘要,
- 李老板将以上两个摘要的哈希值进行比较,如果哈希值相同则签名得到验证,即代表文件是由小明发送的。
也许您会假想可能有人窃取小明的私钥,并伪装成小明将文件发送出去。然而,这是系统安全的问题,并不在我们当前讨论的主题之中。
预防仿冒
在以上的文件发送过程中,网络中的第三者可能以某种方式在文件发送途中对其进行篡改。
那么,李老板对文件所换算出的哈希值,将与用小明公钥解密出的哈希值不匹配,从而李老板可以确定这并非由小明签名发送的原始文件。
如果网络中的第三者在篡改文件后,尝试创建一个新的加密哈希值或者仿冒数字签名。然而李老板无法用小明的公钥进行解密,所以李老板再次确定这并非是小明发出的原始文件。
与哈希函数的结合
在进行数字签名时,我们总是应用哈希函数来对需要签名的文件进行换算,并得到一串简短摘要。即使是数十亿字节的文件,我们也只需对这几百字节的摘要进行快速的签名,这显示出应用哈希函数换算的优点。
在区块链交易中,我们就是用类似的数字签名方式来验证交易项目是否由账户拥有者所发起的。
在我们结束这个帖子之前,让我们来看看街头常见的一个小魔术表演。
通常魔术师喜欢选择一位年轻女孩, 并让女孩随意的在一张纸片上写下一个 3 位数字, 例如是 321 , 并叫女孩将纸片握在她的手里以便让魔术师猜此数字。首先女孩会告诉第三者她写了什么,然后魔术师会指示这第三者将女孩的数字乘以 91 ,并在另一张纸片上写下结果的最后 3 位数,即是 211 ,并展示给大家。
魔术师看到第三者的数字后,就会虚假的用魔术棒轻轻敲一下纸片以显示答案。
事实上,他试图延迟一些时间,以便他可以快速地将数字 211 乘与 11 。
最后魔术师会在一张新的纸片上写下一个数字, 即是 211 乘与 11 结果的最后 3 位数,并给观众看。
这时候女孩也让大家看她的纸片,两者的号码都是一样的,是不是感到很惊讶!
等等,你是否有发觉一些很熟悉的东西?
没错,整个过程就类似于我们如何使用公钥密码的加密过程一般。
我们使用私钥对摘要进行加密签名,然后使用公钥来解密验签。
说到这里,是不是觉得使用公钥密码进行私钥签名就是这么的简单!
那么在下一篇帖子中,我们将继续探讨其他的区块链知识。