编程语言
首页 > 编程语言> > RAS加密算法

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\)。

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\),则

\[a^{\varphi (n)} \equiv 1 (mod \ n) \]

因此\(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\)的。

同时进行签名和加密

在公开密钥体制下,发送方可以同时对信息进行签名和加密。
例如甲要向乙发送信息,先用自己的私钥签名,再用对方的公钥加密;接收方先用自己的私钥解密,再用对方的公钥解密,得到明文。

参考链接:

  1. 高中数学A版选修4-6 初等数论初步.pdf
  2. 百度百科-RSA算法

标签:加密,解密,varphi,秘钥,RAS,私钥,加密算法,mod
来源: https://www.cnblogs.com/lfri/p/15761046.html