RSA简介

1977年,三位数学家Rivest、Shamir 和 Adleman 设计了一种算法,可以实现非对称加密。这种算法用他们三个人的名字命名,叫做RSA算法。从那时直到现在,RSA算法一直是最广为使用的"非对称加密算法"。毫不夸张地说,只要有计算机网络的地方,就有RSA算法。
RSA公钥加密算法是一种非对称加密技术,也就是加密使用的密钥(公钥)和解密用的密钥(私钥)不是同一把。在加密信息数据之前,接收方会把加密用的公钥对外公开,发送方用公钥进行加密信息数据成为密文,而解密的密钥一直都保存在接收方手中。但是普通的非对称加密技术很容易被暴力破解,因此为了保证信息数据的安全,需要更安全的公钥加密技术,RSA公钥加密算法在这种情况下应运而生。RSA公钥加密算法是基于一个简单的数论事实:将两个大的质数相乘很容易得到乘积,但要把乘积进行因式分解却非常困难。
这种算法非常可靠,密钥越长,它就越难破解。根据已经披露的文献,1999年就已经破解了512位的密钥,2009年又破解了768位的密钥,因此目前的RSA密钥通常采用的1024位的密钥,但随着量子计算机的发展,1024位的密钥的安全性也受到了挑战,在未来十年内1024位的RSA密钥会被逐渐淘汰,进而选择更长的钥匙。
加密和签名
加密与签名虽然都会使用RSA的一些算法,但是这两个不能混为一谈,是不一样的(主要体现在用途不一样)。加密的作用是为了防止明文内容被人看到,验签是为了防止明文内容被人篡改。
加密
公钥和私钥都能用来加密和解密,通常情况下使用公钥加密,私钥解密。私钥和公钥是成对匹配的,完全匹配的时候才能正确的解密出明文,否则不能获取到正确的密文,所以私钥公钥都能用来加密和解密。不过大多数情况下都是用公钥加密然后用私钥解密,这样能保证能保证明文只能被私钥持有者获取到了。反过来私钥加密公钥公钥解密的话,那么所有持有公钥的人都能获取明文了(这样还要维护公钥的持有者,就麻烦了)
下面,我就进入正题,用个段子解释RSA算法的原理。

刘英经常对永强讲悄悄话。无奈长贵时常偷听,于是他们想到了用RSA来对悄悄话。
永强仔细挑选了一个大家都知道的公钥:(N,e),
仔细挑选了一个只有自己知道的密钥:d。
当刘英准备给永强发一条明文信息 x 时:
1)刘英使用永强的公钥(N, e)进行信息加密(x^e mod N)。
2)永强收到加密信息后使用自己的密钥 d进行信息解密 (xe)d mod N得到 x。
在这里插入图片描述
也就是说 (xe)d 同余 x mod N ? 是的。
1.永强如何仔细挑选公钥(N, e)?先选两个质数p、q。N = pq.e跟 (p-1)(q-1)互质,即最大公约数为1。
2.永强如何仔细挑选密钥 d?挑选d 使得 de 同余 1 mod (p-1)(q-1)。使用传说中的扩展欧几里得算法,可以得d。
3. 根据以上, 如何证明(xe)d mod N 同余 x? 证明 x^(ed) 同余 x mod N=> 证明 x^(ed) - x 可以被 N 整除根据d的性质: de 同余 1 mod (p-1)(q-1) => de = 1 + k(p-1)(q-1) 对于某些整数k.那么也就变成了证明 x^(1 + k(p-1)(q-1)) - x,即x(x^(k(p-1)(q-1))-1) 可以被 N 整除。根据费马小定理,x(k(p-1))(q-1)可以被q整除,x(k(q-1))(p-1)可以被p整除.所以p跟q是 x^(ed) - x 的质数因子所以N=pq是x^(ed) - x的因子x^(ed) - x mod N = 0x^(ed) 同余 x mod N。
4. 为啥长贵几乎不可能猜到明文消息 x?无论1)枚举 x满足 x^e 同余 y mod N 或者 2)因式分解N找到p跟q,破解2048位的密钥可能需要传统计算机耗费10亿年的时间。

在optee中rsa使用的函数接口:

猜你喜欢

转载自blog.csdn.net/u013921164/article/details/112366637
RSA