RAS加密算法
2022/1/4 1:07:22
本文主要是介绍RAS加密算法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
信息的加密与去密
信息加密的简单模型如图所示:
就是先对数字信息\(x\)做一个变换\(E\),将变换后的信息\(y=E(x)\)发出,接收方收到信息\(y\)后,进行一个相反的变换\(D\)(也就是\(E\)的逆运算),恢复成数字信息\(x=D(y)\),从而识别原始信息。
通常把数字信息\(x\)叫做明文,加密后得到的数字信息\(y\)叫做密文,变换\(E\)和\(D\)分别叫做加密和去密的秘钥。一般来说,秘钥对\({E, D}\)由发送方和接收方约定和保存,不被外人所知。
例如,凯撒加密法,加密运算\(E(k) = k + 19(mod \ 31)\),去密运算\(D(k) = k+12(mod \ 31)\),这是互逆操作,即\(DE(k) = ED(k)=k\)。
- 这有一个缺点,由于D, E都非常简单,已知一个很容易推出另一个。这相当于已知公钥能推出私钥,显然不能用于公开秘钥体制。
- 另一个缺点,两两之间需要保存一个秘钥对\({E, D}\),如果是2000人相互通信,每个人都需要存\(C_{2000}^2 = 1 999 0000\)对
RSA加密算法
1976年,美国斯坦福大学的年轻数学家狄菲(Diffe)和计算机专家(Hellman)提出一种新的加密方法,叫做公开秘钥体制。在这种体制下,信息的加密和去密使用两个不同的秘钥,加密用公钥(公开的,任何人都可以看到),去密用私钥(严格保密)。
1977年,美国MIT计算机科学实验室的列维斯特(Rivest)等人基于大数分解的复杂性提出了一个方案,就是RSA。
RSA算法的具体描述如下:
(1)任意取两个不同的大素数\(p\)和\(q\),计算乘积\(n=pq\),\(\varphi (n) = (p-1)(q-1)\)
(2)任取一个大整数\(e\),使得\(gcd(e, \varphi (n)) = 1\),注意:\(e\)是很容易取的,例如所有大于p和q的素数都可用
(3)计算出一个正整数\(d\),使得\(ed \equiv 1(mod \ \varphi (n))\),根据拓展欧几里得定理很容易得到
(4)将\(n, e\)公开,\(d\)保密
(5)将明文\(x\)加密为密文\(y\),加密算法为 \(y = E(x) = x^e(mod \ n)\)
(6)将密文\(y\)解密为明文\(x\),解密算法为 \(D(y) = y^d(mod \ n) = x\)
这里需要证明一下为什么 \(D(y) = y^d(mod \ n) = x\),因为根据欧拉定理
设\(n\)为正整数,\(a\)为任意整数,且\((a, n)=1\),则
因此\(D(y) = y^d(mod \ n) = (x^e)^d(mod \ n) = x^{1 + k\varphi (n)}(mod \ n) = x\cdot (x^{\varphi (n)})^k(mod \ n) = x\)
一个有趣的一点:RSA也是互逆的,即\(ED(x) = DE(x) = x\)。
所以理论上,你可以用私钥加密数据,发送别人别人用公钥解密(这个过程叫签名)。但通常都是别人用公钥加密,你用私钥解密发送过来的数据(这个过程叫加密)。
那有没有可能已知一个秘钥,推出另一个秘钥?
比如公钥\({n, e}\)是公开的,想借此推出私钥\({n, d}\)。因为\(ed \equiv 1(mod \ \varphi (n))\),所以需要知道\(\varphi(n)\)。而\(\varphi(n) = (p-1)(q-1)\),因此需要将\(n\)分解成素因式\(pq\),而这是一个复杂性很高的问题。
数字签名
利用数字签名做身份认证,证明这条信息来自某某。
在公开秘钥体制之前,身份认证一直没有很好的解决方案。如今采用公开秘钥体制做身份认证就很简单。
在A向B发送信息之前,将信息\(x\)(比如写的"我是A"),先用A的私钥加密,得到\(y = E_A (x)\)(数字签名),把\(y\)传送给\(B\)后,\(B\)在公钥本上找到\(A\)的公钥,从而得到\(y\)对应的明文\(x\)。由于别人不知道\(A\)的私钥,没办法伪造相同的信息,所以这个信息一定是来自\(A\)的。
同时进行签名和加密
在公开密钥体制下,发送方可以同时对信息进行签名和加密。
例如甲要向乙发送信息,先用自己的私钥签名,再用对方的公钥加密;接收方先用自己的私钥解密,再用对方的公钥解密,得到明文。
参考链接:
- 高中数学A版选修4-6 初等数论初步.pdf
- 百度百科-RSA算法
这篇关于RAS加密算法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南