数字签名这个概念在币圈非常重要,无数的知识点都建立在这个概念之上。我跟很多人解释过它。今天写一篇短文,以后一定会用得上。
数字签名的作用
我们用笔签名,用盖章来证明自己认可和授权某份文件,他人用辨认笔迹和印章来确认文件得到了你的认可和授权。
数字签名是在数字世界里,证明你(签名者)认可和授权某些交易或数据,而他人(验证者)可以验证你的认可和授权的过程。
数字签名的可靠性来源
用笔签名的可靠性来自笔迹很难被模仿。用盖章的可靠性来自印章是受法律保护,私自刻章是违法的。签名和盖章后一般还会用印上指纹,人的指纹是有唯一性,每个人都不一样。
数字签名的可靠性在于加密技术,这是一整套基于数学基础构建的方法论。要完整理解其数学原理比较难,需要阅读大量的专业书。非专业人士,能够简单理解背后的原理就够了。
对称和非对称加密
对称性加密是加密和解密都采用同一个密钥。
一般对称性加密需要交流者事先在某种安全的前提下约定好密钥,再做秘密通信。
明文+密钥=密文
密文+密钥=明文
非对称性加密是加密和解密采用不同的密钥,加密用的密钥称为公钥,解密用的密钥称为私钥。
如果你把一段信息采用非对称性加密的方式给小明看,那就用小明的公钥来加密这段信息,形成密文发给小明。小明收到密文后,用小明自己的私钥解密。
非对称性加密就不需要秘密通信的双方事先在保密的前提下交换密钥,交换公钥是不需要保密的。
私钥是可以按数学方式推导出公钥,但公钥是无法推导出私钥。所以公钥可以公开,但私钥不能。
明文+公钥(接收秘密人的公钥)=密文
密文+私钥(接收秘密人的私钥)=明文
这里说的非对称加密是用来秘密通信。
数字签名
非对称性加密也可以用来在不泄露私钥的前提下,证明私钥所有权,这就是数字签名。
现在有一段信息(message),这段信息可以是任意的;你的私钥(private key)和对应的公钥(public key)。
还有一个签名算法Fsig,这是一个数学函数。对应的还有一个验证签名的算法Gver
数字签名就是将私钥(pri)和信息(mes)带入到签名算法,FSig(pri, mes),这就可以得出一个签名结果sig,是一串数据。
验证过程就是验证者将签名结果sig,和你的公钥(pub),带入到验证算法,Gver(sig, pub),验证算法计算的结果要么是正确(True),要么是错误(False)。如果结果为正确,则说明此签名结果sig是由该公钥(pub)对应的私钥(pri)签名出来的。如果是错误,则说明不是。
条件:信息(mes),签名者私钥(pri),签名者公钥(pub)
签名:FSig(pri, mes)= sig
验证:Gver(sig,pub) = True or False
这就是数字签名,在不需要暴露私钥的前提下就可以证明私钥拥有者对特定信息的认可或授权。
比特币交易里的签名
通常每一笔比特币交易都有一个签名,以证明发送交易的人是有权限动用这笔币。这个签名就是使用发送者的私钥(pri)。
比特币交易签名用的信息(mes)一般会由交易版本,前置哈希,输出,金额……大约10项内容构成。
签名就是FSig(pri,mes),得出一个签名结果sig,sig和交易的其他组成部分共同组成一个数据叫交易,广播到比特币网络。
当交易发出去之后,钱包,特别是挖矿节点会对这笔交易进行验证,其中就要对上述签名结果进行验证,要拿发送者的公钥(pub)和签名信息(mes)进行验证,Gver(sig,pub),通过验证,则交易合法。否则交易不合法。