区块链技术系列(1) - 数字签名

导读:在现实社会中,签名作为签名者身份的一种证明,签名代表对签名文件的认可,不可抵赖。理论上签名是可信、不可伪造的。现在网络环境越来越广泛,有大量的信息通过网络传播,并且会保存在上面。这些电子数据显然无法人工签名,数字签名就孕育而生。本文将介绍什么是数字签名、数字签名的特性与相关技术。

什么是数字签名

数字签名(又称公钥数字签名、电子签章):是一种类似写在纸上的普通的物理签名,但是使用了公钥加密领域的技术实现,用于鉴别数字信息的方法。一套数字签名通常定义两种互补的运算,一个用于签名,另一个用于验证。就是只有信息的发送者才能产生的别人无法伪造的一段数字串,这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明。在区块链技术中,数字签名涉及到公钥、私钥和钱包等工具,它有两个作用:一是证明消息确实是由信息发送方签名并发出来的,二是确定消息的完整性,没有被篡改过。

公钥(Public Key)与私钥(Private Key)

公钥(Public Key)与私钥(Private Key)是通过一种算法得到的一个密钥对(即一个公钥和一个私钥),公钥是密钥对中公开的部分,私钥则是非公开的部分。公钥通常用于加密会话密钥、验证数字签名,或加密可以用相应的私钥解密的数据。通过这种算法得到的密钥对能保证在世界范围内是唯一的。使用这个密钥对的时候,如果用其中一个密钥加密一段数据,必须用另一个密钥解密。比如用公钥加密数据就必须用私钥解密,如果用私钥加密也必须用公钥解密,否则解密将不会成功。

数字签名流程

假如Alice想给Bob传递一个署名的消息的话,那么她可以为她的消息计算一个散列值(Message digest),然后用她的私钥“加密”(这个散列值并将这个“署名”加在消息的后面。这个消息只有用她的公钥才能被解密。Bob获得这个消息后可以用Alice的公钥“解密”(如同前面“解密消息”的步骤)这个散列值,然后将这个数据与他自己为这个消息计算的散列值相比较。假如两者相符的话,那么Bob就可以知道发信人持有Alice的私钥,以及这个消息在传播路径上没有被篡改过。

数字签名的流程图

1、生成公钥和私钥对

2、通过发送者的私钥对消息的哈希值进行加密,生成签名信息。

3、把加密后的哈希值和待发送的信息连同公钥一起发给接受者。

4、接收者通过发送方的公钥对加密的哈希值进行解密,还原出哈希值。

5、对签名信息进行验证。


数字签名的签名过程和验证过程

数字签名技术实现

数字签名算法依靠公钥加密技术来实现的。在公钥加密技术里,每一个使用者有一对密钥:一把公钥和一把私钥。公钥可以自由发布,但私钥则秘密保存;还有一个要求就是要让通过公钥推算出私钥的做法不可能实现。普通的数字签名算法包括三种算法:

1、一种密码生成算法

2、标记算法

3、验证算法

数字签名算法

常见的数字签名算法主要有RSA、DSA、ECDSA三种。

1. RSA数字签名算法

RSA是目前计算机密码学中最经典算法,也是目前为止使用最广泛的数字签名算法,RSA数字签名算法的密钥实现与RSA的加密算法是一样的,算法的名称都叫RSA。密钥的产生和转换都是一样的,包括在售的所有SSL数字证书、代码签名证书、文档签名以及邮件签名大多都采用RSA算法进行加密。

RSA数字签名算法主要包括MD和SHA两种算法,例如我们熟知的MD5和SHA-256即是这两种算法中的一类。

2. DSA数字签名算法

DSA全称Digital Signature Algorithm,DSA只是一种算法,和RSA不同之处在于它不能用作加密和解密,也不能进行密钥交换,只用于签名,所以它比RSA要快很多,其安全性与RSA相比差不多。DSA的一个重要特点是两个素数公开,这样,当使用别人的p和q时,即使不知道私钥,你也能确认它们是否是随机产生的,还是作了手脚。RSA算法却做不到。

DSA的整个签名算法流程如下:

a. 发送方使用SHA-1和SHA-2编码将发送内容加密产生的数字摘要;

b. 发送方用自己的专用密钥对摘要进行再次加密得到数字签名;

c. 发送方将原文和加密后的摘要传给接收方;

d. 接收方使用发送方提供的密钥对进行解密 ,同时对收到的内容用SHA-1/SHA-2编码加密产生同样的摘要;

e. 接收方再将解密后的摘要和d步骤中加密产生的摘要进行比对,如果两者一至,则说明传输过程的信息没有被破坏和篡改,否则传输信息则不安全。

3. ECDSA椭圆曲线数字签名算法

ECDSA是用于数字签名,是ECC与DSA的结合,整个签名过程与DSA类似,所不一样的是签名中采取的算法为ECC,最后签名出来的值也是分为r,s。而ECC(全称Elliptic Curves Cryptography)是一种椭圆曲线密码编码学。

ECDH每次用一个固定的DH key,导致不能向前保密(forward secrecy),所以一般都是用ECDHE(ephemeral)或其他版本的ECDH算法。ECDH则是基于ECC的DH( Diffie-Hellman)密钥交换算法。

ECC与RSA 相比,有以下的优点:

a. 相同密钥长度下,安全性能更高,如160位ECC已经与1024位RSA、DSA有相同的安全强度。

b. 计算量小,处理速度快,在私钥的处理速度上(解密和签名),ECC远 比RSA、DSA快得多。

c. 存储空间占用小 ECC的密钥尺寸和系统参数与RSA、DSA相比要小得多, 所以占用的存储空间小得多。

d. 带宽要求低使得ECC具有广泛得应用前景。



猜你喜欢

转载自blog.51cto.com/huihua/2164403
今日推荐