数字签名算法-RSA、DSA、ECDSA、ECDH
数字签名算法介绍和区别
原⽂阅读:
ssl协议全称数字签名是⼀个带有密钥的消息摘要算法,这个密钥包括了公钥和私钥,⽤于验证数据完整性、认证数据来源和抗否认,遵循OSI参考模型、私钥签名和公钥验证。也是⾮对称加密算法和消息摘要算法的结合体,常见的数字签名算法主要有RSA、DSA、ECDSA三种,本⽂对数字签名算法进⾏详细介绍。
Hash⼜译散列、摘要等名,本⽂统⼀称Hash。
1. RSA数字签名算法
RSA是⽬前计算机密码学中最经典算法,也是⽬前为⽌使⽤最⼴泛的数字签名算法,RSA数字签名算法的密钥实现与RSA的加密算法是⼀样的,算法的名称都叫RSA。密钥的产⽣和转换都是⼀样的,包括在售的所有SSL数字证书、代码签名证书、⽂档签名以及邮件签名⼤多都采⽤RSA算法进⾏加密。
RSA数字签名算法主要包括MD和SHA两种算法,例如我们熟知的MD5和SHA-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的整个签名算法流程如下:
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密钥长度⽐1045121065:11087681326:1101110241607:11020204821010:110782100060035:1
下表是RSA和ECC速度⽐较
功能Security Builder 1.2BSAFE 3.0163位ECC(ms)1,023位RSA(ms)密钥对⽣成3.84,708.3签名2.1(ECNRA)228.43.0(ECDSA)认证
9.9(ECNRA)12.710.7(ECDSA)Diffie—Hellman密钥交换7.31,654.0
在 ECDHE 密钥交换中,服务端使⽤证书私钥对相关信息进⾏签名,如果浏览器能⽤证书公钥验证签名,就说明服务端确实拥有对应私钥,从⽽完成了服务端认证。密钥交换和服务端认证是完全分开的。
可⽤于 ECDHE 数字签名的算法主要有 RSA 和 ECDSA,也就是⽬前密钥交换 + 签名有三种主流选择:
RSA 密钥交换(⽆需签名);
ECDHE 密钥交换、RSA 签名;
ECDHE 密钥交换、ECDSA 签名;
4. 总结
对于SSL数字证书和代码签名证书以及其它⾮对称加密产品来说,RSA⽬前普及度最⾼,以SHA-256签名算法最⼴,对于更⾼级基于ECC 签名算法是需要对证书请求⽂件CSR和根证书都有相应的要求。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。