原文阅读:https://www.infinisign.com/fa...

数字签名是一个带有密钥的消息摘要算法,这个密钥包括了公钥和私钥,用于验证数据完整性、认证数据来源和抗否认,遵循OSI参考模型、私钥签名和公钥验证。也是非对称加密算法和消息摘要算法的结合体,常见的数字签名算法主要有RSA、DSA、ECDSA三种,本文对数字签名算法进行详细介绍。

Hash又译散列、摘要等名,本文统一称Hash。

1. RSA数字签名算法

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

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

算法 输出Hash长度 中继Hash长度 数据区块长度 最大输入长度 循环次数 碰撞攻击 性能示例(MiB/s)
MD5 128 128 512 无限[4] 64 <64 (已碰撞) 335
SHA-0 160 160 512 264 − 1 80 <80 (已碰撞) -
SHA-1 160 160 512 264 − 1 80 <80 (已碰撞) 192
SHA-2 SHA-224
SHA-256
224
256
256 512 264 − 1 64 112
128
139
SHA-384
SHA-512
SHA-512/224
SHA-512/256
384
512
224
256
512 1024 2128 − 1 80 192
256
112
128
154
SHA-3 SHA3-224
SHA3-256
SHA3-384
SHA3-512
224
256
384
512
1600 1152
1088
832
576
无限
24
112
128
192
256
-
SHAKE128
SHAKE256
d (arbitrary)
d (arbitrary)
1344
1088
min(d/2, 128)
min(d/2, 256)
-

1.1. MD2、MD4、MD5算法

最常见的是我们熟知的MD5加密算法,MD5全称Message-Digest Algorithm 5(信息-摘要算法 5),目前比较普遍的Hash算法,是散列算法的基础原理,MD5的前身有MD2、MD3和MD4。MD5算法法是输入任意长度字符,输出固定长度128位的算法。经过程序流程,生成四个32位数据,最后联合起来成为一个128位Hash值,主要方式是通过求余、取余、调整长度、与链接变量进行循环运算进而得出结果。

1.2. SHA-1算法

SHA-1是由NIST NSA设计为同DSA一起使用的,SHA-1设计时基于和MD4相同原理,并且模仿了该算法,SHA-1抗穷举(brute-force)性更好,它产出160位的Hash值,对于非线性运算、移位和加法运算也与MD5类似。SHA-1也应用于包括TLS和SSL、PGP、SSH、S/MIME和IPsec等多种协议中,曾被视为是MD5的后继者。SHA-1的如今已经明确不具备安全性可言了。

在2016年1月1日后基于SHA-1签发的SSL和代码签名的X.509证书已不具备安全性可言,多个操作系统、浏览器都建议将基于SHA-1而签发的证书、代码签名替换至SHA-2的产品,但目前在Windows XP(官方已停更)操作系统上仍然只兼容基于SHA-1算法的SSL和代码签名产品。

就在2017年2月23日Google宣布实现了对SHA-1算法的碰撞破解,所以SHA-1算法已经正式被宣布为不安全的算法,主流厂商对自身产品及安全要求都提升至了SHA-2算法。

1.3. SHA-2算法

SHA-224、SHA-256、SHA-384和SHA-512并称为SHA-2,发布于2001年,目前比较广泛应用的SSL数字证书和代码签名证书签名算法均采用SHA-256算法,相较于SHA-1算法而言,至今SHA-2算法还未被破解,从某种意义上SHA-2延用了SHA-1算法,所以至少发文时间起是安全的。目前顶级CA和Google、苹果等公司都采用基于SHA-256算法作为SSL证书和代码签名证书的主流签名算法。

1.4. SHA-3算法

SHA-3算法正式发布于2015年,SHA-3并不是要取代SHA-2,因为SHA-2目前并没有出现明显的弱点。由于对MD5、SHA-0和SHA-1出现成功的破解,NIST感觉需要一个与之前算法不同的,可替换的加密Hash算法,也就是现在的 SHA-3。

2. DSA数字签名算法

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

dsa step info

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具有广泛得应用前景。

下表是ECC和RSA安全性比较

攻破时间(MIPS年) RSA/DSA(密钥长度) ECC密钥长度 RSA/ECC密钥长度比
104 512 106 5:1
108 768 132 6:1
1011 1024 160 7:1
1020 2048 210 10:1
1078 21000 600 35:1

下表是RSA和ECC速度比较

功能 Security Builder 1.2
163位ECC(ms)
BSAFE 3.0
1,023位RSA(ms)
密钥对生成 3.8 4,708.3
签名 2.1(ECNRA)
3.0(ECDSA)
228.4
认证 9.9(ECNRA)
10.7(ECDSA)
12.7
Diffie—Hellman密钥交换 7.3 1,654.0

在 ECDHE 密钥交换中,服务端使用证书私钥对相关信息进行签名,如果浏览器能用证书公钥验证签名,就说明服务端确实拥有对应私钥,从而完成了服务端认证。密钥交换和服务端认证是完全分开的。

可用于 ECDHE 数字签名的算法主要有 RSA 和 ECDSA,也就是目前密钥交换 + 签名有三种主流选择:

  • RSA 密钥交换(无需签名);
  • ECDHE 密钥交换、RSA 签名;
  • ECDHE 密钥交换、ECDSA 签名;

4. 总结

对于SSL数字证书和代码签名证书以及其它非对称加密产品来说,RSA目前普及度最高,以SHA-256签名算法最广,对于更高级基于ECC签名算法是需要对证书请求文件CSR和根证书都有相应的要求。

SHA-2

自2016年1月1日起大多CA已停止签发不安全的SHA-1签名算法,所有CA目前签发的证书都要求基于SHA-2签名算法。

FULL SHA-2

与SHA-2选项类似,FULL SHA-2选项将为您提供相同的SHA-2证书和中间证书,但根证书不再是基于SHA-1而是SHA-2。

ECC-FULL

和“FULL-SHA-2”选项类似,你将需要提供一个基于ECC算法的CSR,同时ECC-HYBRID ECC-HYBRID与ECC-FULL一样,ECC的几种算法都要求根证书是RSA。

参考文献

非https网站将不再提供链接形式,请自行复制前往


infiniSign
41 声望0 粉丝