【IoT】加密与安全:非对称加密算法 RSA 公钥和私钥生成原理和应用

1、如何生成 RSA 公钥和私钥

第一步:

随机选择两个不相等的质数 p 和 q

爱丽丝选择了 61 和 53,这两个质数越大,就越难破解。

第二步:

计算 p 和 q 的乘积 n

爱丽丝就把 61 和 53 相乘:n = 61×53 = 3233

n 的长度就是密钥长度。

3233 写成二进制是 110010100001,一共有 12 位,所以这个密钥就是 12 位。

实际应用中,RSA密钥一般是 1024 位,重要场合则为 2048 位。

第三步:

计算 n 的欧拉函数 φ(n)

根据公式:φ(n) = (p-1)(q-1)

爱丽丝算出 φ(3233) 等于 60×52,即 3120。

第四步:

随机选择一个整数 e,条件是 1< e < φ(n),且 e 与 φ(n) 互质

爱丽丝就在 1 到 3120 之间,随机选择了 17,实际应用中,常常选择 65537。

第五步:

计算 e 对于 φ(n) 的模反元素 d

所谓"模反元素"就是指有一个整数 d,可以使得 ed 被 φ(n) 除的余数为 1,ed ≡ 1 (mod φ(n))

这个式子等价于:ed - 1 = kφ(n)

于是,找到模反元素 d,实质上就是对下面这个二元一次方程求解:

ex + φ(n)y = 1

已知 e=17, φ(n)=3120,17x + 3120y = 1

这个方程可以用"扩展欧几里得算法"求解,此处省略具体过程。

总之,爱丽丝算出一组整数解为 (x,y)=(2753,-15),即 d=2753。

至此所有计算完成。

第六步:

将 n 和 e 封装成公钥,n 和 d 封装成私钥

在爱丽丝的例子中,n=3233,e=17,d=2753,所以公钥就是 (3233,17),私钥就是(3233, 2753)。

实际应用中,公钥和私钥的数据都采用 ASN.1 格式表达。

2、加密和解密

有了公钥和密钥,就能进行加密和解密了。

1)加密要用公钥 (n,e)

假设鲍勃要向爱丽丝发送加密信息m,他就要用爱丽丝的公钥 (n,e) 对m进行加密。这里需要注意,m必须是整数(字符串可以取ascii值或unicode值),且 m 必须小于 n。
所谓"加密",就是算出下式的c:

me ≡ c (mod n)

爱丽丝的公钥是 (3233, 17),鲍勃的m假设是65,那么可以算出下面的等式:

6517 ≡ 2790 (mod 3233)

于是,c等于2790,鲍勃就把2790发给了爱丽丝。

2)解密要用私钥 (n,d)

爱丽丝拿到鲍勃发来的 2790 以后,就用自己的私钥 (3233, 2753)  进行解密。

可以证明,下面的等式一定成立:

cd ≡ m (mod n)

也就是说,c 的 d 次方除以 n 的余数为 m。现在,c等于2790,私钥是 (3233, 2753),那么,爱丽丝算出

27902753 ≡ 65 (mod 3233)

因此,爱丽丝知道了鲍勃加密前的原文就是 65。

至此,"加密--解密"的整个过程全部完成。

我们可以看到,如果不知道d,就没有办法从c求出m。而前面已经说过,要知道d就必须分解n,这是极难做到的,所以RSA算法保证了通信安全。

你可能会问,公钥 (n,e) 只能加密小于 n 的整数 m,那么如果要加密大于 n 的整数,该怎么办?

有两种解决方法:

一种是把长信息分割成若干段短消息,每段分别加密;

另一种是先选择一种"对称性加密算法"(比如 DES),用这种算法的密钥加密信息,再用 RSA 公钥加密 DES 密钥。


refer:

http://www.ruanyifeng.com/blog/2013/07/rsa_algorithm_part_two.html

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值