本篇将介绍SSL证书中使用到的3中算法,分别是RSA算法、Diffie-Hellman算法和DSA(电子签名算法)
1、RSA算法
- RSA全称Rivest Shamir Adleman,名称取自该算法3个创始人名字的首字母,该算法由Ron Rivest,Adi Shamir和Leonard Adleman在1977年所创建
- RSA是目前最常用的非对称加密算法
- RSA创建一对交换密钥
- 一个密钥用来加密,另一个密钥用来解密
- DH/DSA工作方式略有不同(不创建交换密钥)
- RSA算法有多安全?
- RSA安全性在于分解半素数的难度
- 例如,给定数字133,你能够提炼出7和19吗?
- 这似乎可行,那么分解1909呢?(11 Bits)
- 1991年,RSA实验室提出了RSA挑战
- 发布了54个不同大小的半素数并寻求因素
- 竞赛在2007年结束,只有12个因素被确定
- 2020年,另外11个因素被确定(截止2020年最大数因素829 Bits)
- 在29年间,1024 Bit的数从未被分解,
- 自2002年,1024位的RSA密钥成为推荐标准
- 自2015年,2048位的RSA密钥成为推荐标准
- 发布了54个不同大小的半素数并寻求因素
- RSA安全性在于分解半素数的难度
2、Diffie-Hellman算法
- 允许双方通过不安全的媒介创建共享秘密
如上图,蓝色和绿色有商定好的秘密,问题是两者之间的信息会被中间人知晓,这就是Diffie-Hellman尝试去解决的。DH允许双方交换特定的值,并且将要交换的值与其他不会被交换的值结合起来,以此来生成共享秘密。中间人可以听到公共的值(如26、39),但无法将公共的值结合起来去得到共享秘密。
共享秘密永远不会被传输,仅用于导出秘密的值(双反不会在线传输42,而是其他值如26、39)
- 共享的秘密之后被用来生成对称密钥
- DH的安全性取决于离散对数问题
- 幂运算:给定G和X,很容易得到N
- 对数运算:给定G何N,要得到X比较难
- 离散指数运算:给定G,X,P,很容易得出N
- 离散对数运算:给定G,P,N,要得到X不可行,唯一的办法是尝试每一个可能的组合(暴力破解)
3、DSA算法
- DSA全称Digital Signature Algorithm,电子签名算法
- DSA是一种非对称加密算法,不同与其他我们已讨论的算法
- 由前文可知,RSA创建一对交换密钥(一个加密一个解密)。RSA可以实现非对称密钥的所有功能。我们可以用公钥和私钥来加密信息(用公钥加密信息并在线传输,另一侧就可以用私钥安全地进行解密);我们可以创建签名(哈希我们想要签名的信息,并用自己的私钥进行加密,并在线传输,另一方就可以用我的公钥验证这个签名);我们也可以用RSA来进行密钥交换()
- DH在不安全的媒介上建立秘密(secret)
- DSA只是创建和验证签名(没有加密,没有密钥交换)
- DSA只有2项操作
- 签名生成
- 输入:Message(要签名的信息)、Private Key(用来签名的私钥)、Random #(随机数)、DSA Parameters(DSA参数)
- 输出:签名
- 签名验证
- 输入:信息、公钥(与私钥相关联)、签名和DSA参数
- 输出:1 or 0(True or False)来表明签名是否有效
- 签名生成
- 随机数(Random Number)非常重要
- 每个我们要签名的信息都必须有唯一的随机数,否则DSA会面临灾难性失败
- 如果随机数被再次使用了,私钥就能被提取出来(非常不可取,所以随机数不能二次使用)
- RFC 6979 - 基于信息,确定性地生成随机数
参考文献
1、网站:Practical Networking.net:Practical TLS