Bitcoin and Cryptocurrency Technologies – Week 1


1.3 数字签名(digital signatures)

数字签名被认为是对纸上手写签名的数字模拟。我们对数字签名有两个特性要求:

1. 只有你可以制作你自己的签名,但任何看到它的人都可以验证其有效性;

2. 签名只与某一特定文件发生联系,该签名不能用于表明你同意或支持另一份不同的文件。

数字签名方案

数字签名方案由以下三个算法构成:

● (sk, pk) := generateKeys(keysize)

公钥和私钥生成 generateKeys方法把keysize作为输入,来产生一对公钥pk和私钥sk;

私钥sk被安全保存,用来签名一段消息;

公钥pk则是人人可以找到,用来验证你的签名

● sig :=sign(sk, message)

sign签名过程 是把一段消息message和私钥sk作为一个输入,对于消息的输出就是签名

● isValid :=verify(pk, message, sig)

verify验证过程 是通过把一段消息、签名消息和公钥作为输入,如果返回的结果是真,证明签名属实;如果返回的结果为假,证明签名消息为假。

注意,generateKeys和sign都可以采用随机算法,而verify则需要是确定的。

 

数字签名需要满足以下两个性质:

● 有效签名可以通过验证,即:

verify(pk, message, sign(sk, message))==true

● 签名不可伪造。

 

实践中的考量

◊ 很多签名算法是随机的(特别是比特币使用的算法),因此我们需要随机性的良好来源。

◊ 信息大小。实际上能够签署的信息大小是有限的,因为实在有限长度的字符串中运行。

有一个简单的方法可以解决这个限制:对信息的哈希值进行签署,而非对信息本身进行签署。

◊ 可以对于哈希指针进行签署。如果你签署了哈希指针,那么该签名覆盖(或者说保护)整个结构——这不仅仅是哈希指针本身,还包括哈希指针指向的整个区块链。

 

椭圆曲线数字签名算法

比特币使用的数字签名方案叫作椭圆曲线数字签名算法(ECDSA)。

算法中一些有用的参数:

个人密钥:256位

公钥(未压缩):512位

公钥(压缩):257位

待签名信息:256位

签名:512位

注意,严格来讲,虽然ECDSA只能签署256位的信息,因为信息在签署之前总是已经经过哈希压缩,因此,任何大小的信息都能被有效签署。

 

声明:自在独行|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - Bitcoin and Cryptocurrency Technologies – Week 1


海阔凭鱼跃,天高任鸟飞