RSA算法是什么
1977年,三位数学家 Rivest、Shamir 和 Adleman 设计了一种算法,可以实现非对称加密。算法用他们三个人的名字命名,叫做 RSA 算法。
RSA是第一个非对称密码算法,密钥成对存在(公钥和私钥),密钥容易管理,容易分发,私钥可用于解密和签名,公钥可用于加密和验签。但是算法复杂,用于加密大量数据时效率低下且随着保密等级的提高,其密钥长度成指数增加。
直到现在,RSA 算法仍是最广泛使用的"非对称加密算法"。毫不夸张地说,只要有计算机网络的地方,就有 RSA 算法。
安全性由什么决定
大质数做因数分解困难
公私钥生成流程
第一步:随机找两个质数 P 和 Q ,P 与 Q 越大,越安全。(例如:61和53)
第二步:计算p和q的乘积n。(n = 61×53 = 3233,n的长度就是密钥长度。3233写成二进制是110010100001,一共有12位,所以这个密钥就是12位。)
第三步:计算 n 的欧拉函数 φ(n)。(根据公式φ(n) = (p-1)(q-1)算出φ(3233)等于60×52,即3120)
第四步:随机选择一个整数 e,条件是1< e < φ(n),且 e 与 φ(n) 互质。(条件是1< e < φ(n),且e与φ(n) 互质。1到3120之间,随机选择了17。)
第五步:有一个整数 d,可以使得 e*d 除以 φ(n) 的余数为 1。(e*d ≡ 1 (mod φ(n)),即17*2753 mode 3120 = 1)
第六步:将n和e封装成公钥,n和d封装成私钥。(n=3233,e=17,d=2753,所以公钥就是 (3233,17),私钥就是(3233, 2753)。)
RSA加密
首先对明文进行比特串分组,使得每个分组对应的十进制数小于n(密钥长度),然后依次对每个分组m做一次加密,所有分组的密文构成的序列就是原始消息的加密结果,即m满足0≤m<n。
加密算法为: c≡ me mod n; c为密文,且0≤c<n。
RSA解密
对于密文0≤c<n,解密算法为: m≡ cd mod n。
RSA签名验证
RSA密码体制既可以用于加密又可以用于数字签名。
已知公钥(e,n),私钥d。
1.对于消息m签名为:sign ≡ md mod n
2.验证:对于消息签名对(m,sign),如果m ≡ signe mod n,则sign是m的有效签名
图解RSA算法
msg = “待加密字符串”;
msgHash = “待签名字符串,由msg进行hash得到”;
encryptedMsg = “msg加密后的字符串”;
signedMsg = “msgHash签名后的字符串”;
注意:
B在签名操作的时候,需要将原文msg和签名后的signedMsg一起发送给A。
A在验签操作的时候,需要将原文msg进行hash得到msgHash,再对signedMsg进行验签。