签名
在加密货币中,签名是其中一个最为重要的密码学工具。在现实生活中,签名的概念是什么?又有哪些特性?想象一下,你在一张纸上签名后,如何鉴定这是一个好的签名?
可被验证的。这个签名要可以证明确实是你在纸上签名了。
不可伪造的。没有其他人能够伪造及复制你的签名。
不可抵赖的。如果你使用自己的签名进行签署,你就无法将其收回或声称他人代替你签名。
但是,在现实生活中,无论签名有多复杂,都有被伪造的可能性。你无法通过简单的视觉辅助工具来真正地验证签名的有效性,这样做既无效率也不可靠。
密码学给了我们一种通过公钥和私钥来解决问题的方案。让我们来看看这两种秘钥的工作原理和其对加密货币系统的促进作用。假设有两个人,Alan和Tyrone。Alan想要发送一些非常重要的数据,而Tyrone想要鉴别这一数据确实来自Alan,他们可以通过使用Alan的公钥和私钥来实现这一目标。
有一点必须指出,通过某人的私钥来确定其公钥是不可行的。公钥正如其名,指公开的密钥,可以被任何人获取。而私钥是仅个人拥有的密钥,你不可以将其与他人分享。
那么,让我们再回到Alan和Tyrone的话题,如果他们要使用密钥来交换信息,具体该如何操作呢?
假设Alan想把信息“m”发送出去,Alan有一把私钥Ka-和一把公钥Ka+。那么,当他把信息发送给Tyrone时,他会用私钥将该条信息加密,于是信息变成了Ka-(m)。当Tyrone收到这条信息时,他可以使用Alan的公钥来取回信息,Ka+(Ka-(m)),于是便得到了原始信息“m”。
总结一下:
Alan有一条信息“m”,当他用私钥Ka-对其进行加密之后,得到加密信息Ka-(m)。
Tyrone随后使用Alan的公钥Ka+来解密这条加密信息Ka+(Ka-(m)),从而得到原始信息“m”。
通过下图可以得到上述过程的直观表示:
可验证性:如果加密信息能够用Alan的公钥进行解密,那就可以100%确定是Alan发送了该条信息。
不可伪造性:如果说有其他人,例如Bob,拦截了该条信息,并用自己的私钥发送了一条自己的信息,那么Alan的公钥将无法对其解密。Alan的公钥只能用来解密Alan用自己的私钥加密过的信息。
不可抵赖性:同样的,如果Alan宣称,“我没有发送信息,是Bob发的”,但Tyrone却能够用Alan的公钥来解密信息,那就证明Alan在撒谎。如此,Alan就无法收回他之前发出的信息,并将其归咎于他人。