原文精选:在本节,我们将讨论数字签名(digital signatures)。数字签名是密码学中的第二个重要部分,该理论和哈希函数一起,为我们后面讨论加密货币奠定基础。数字签名被认为是对纸上手写签名的数字模拟。我们对数字签名有两个特性要求,使其与我们对手写签名的预期一致。第一,只有你可以制作你自己的签名,但任何看到它的人都可以验证其有效性;第二,我们希望签名只与某一特定文件发生联系,因此该签名不能用于表明你同意或支持另一份不同的文件。对于手写签名来说,第二条就如同确保别人不能将你的签名从一份文件上剪下来,贴到另一份文件的末尾样。
那我们如何通过密码学来构建这些性质呢? 首先,让我们把之前的直观讨论说得更具体一些,以便今后可以更好地论证数字签名方案,并讨论其安全特性。
读书笔记:
1,数字签名和哈希函数一起,为加密货币奠定了理论基础。
2,数字签名两个特性:第一是只有你可以制作你自己的签名,其他人可以验证有效性。第二是改签名不能用于支持其他文件。
数字签名方案
数字签名方案由以下三个算法构成:
(sk, pk) :=generateKeys(keysize) generateKeys方法把keysize作为输入,来产生一对公
钥和私钥。私钥sk被安全保存,并用来签名一段消息;公钥pk是人人都可以找到的,拿到
它,就可以用来验证你的签名。
sig:=sign(sk, message) 签名过程是把一段消息和私钥作为一个输入,对于消息输出
是签名。
isValid:=verify(pk, message, sig) 验证过程是通过把一段消息和签名消息与公钥作
为输入,如果返回的结果是真,证明签名属实;如果返回的结果为假,证明签名消息为假。
我们要求以下两个性质有效:
有效签名可以通过验证,即:verify(pk, message, sign(sk, message))==true
签名不可伪造。
读书笔记:
1,数字签名产生一对公钥和私钥。私钥sk被安全保存,并用来签名一段消息;公钥pk是人人都可以找到的,拿到它,就可以用来验证你的签名。
2,签名过程是把一段消息和私钥作为一个输入,对于消息输出就叫签名。
3,验证过程是通过把一段消息和签名消息与公钥作为输入,如果返回的结果是真,证明签名属实;如果返回的结果为假,证明签名消息为假。
4,签名不可伪造。
原文精选:我们注意到generateKeys和sign都可以采用随机算法。的确,generateKeys最好是随机的,因为它需要为不同的人生成不同的密钥,而verify则需要是确定的。
现在,让我们更详细地检验我们要求数字签名方案具备的两个特性。第一个特性很直接,那就是有效的签名必须通过验证。如果我用我的密钥sk签署了一条消息,之后有人试图通过使用我的公钥pk验证关于同一条消息的签名,该签名必须证实为正确。这个特性是对签名有效的最基本要求。
读书笔记:
1,generateKeys是随机的,因为它需要为不同的人生成不同的密钥,而verify则需要是确定的。
2,有效的签名必须通过验证。如果我用我的密钥sk签署了一条消息,任何人使用我的公钥pk验证关于同一条消息的签名,该签名必须证实为正确。这个特性是对签名有效的最基本要求。
一叶之秋带你一分钟速读经典书籍,每天一分钟(只需阅读读书笔记部分),天天获新知。
作者:全职高手一叶之秋
链接:https://www.jianshu.com/p/e75599cd30f6