RSA

您所在的位置:网站首页 使用openssl进行rsa加密 RSA

RSA

2023-03-14 13:05| 来源: 网络整理| 查看: 265

前言     如果对 欧拉函数、欧拉定理、逆元都已经理解了,那么 RSA 加密和解密的原理就很简单了。这一章我们就来探讨一下 RSA 算法加密和解密的原理。一、加密算法概述1、加密与解密

    加密是以某种特定的算法,改变原有的数据信息,使得未授权的用户即使获得了加密后的数据,但因不知解密的方法(确切的说是不知道密钥),仍然无法了解其信息内容。而解密则是加密的逆过程。

2、明文和密文

    我们称尚未加密的数据为明文,通过固定算法加密后的数据为密文。下面两个图分别为加密和解密的过程。

3、加密的密钥

    密钥是一种参数,它是在明文转换为密文或密文转换为明文时算法的输入参数。可以理解成密码的钥匙。

4、对称与非对称

    常见的数字加密方式分为两类:对称加密 和 非对称加密。

对称加密

    对称加密算法中,数据发送方将明文和密钥一起经过特殊加密算法处理成密文后,将它发送出去。接收方收到密文后,若想解读原文,则需要使用加密用到的相同密钥及相同算法的逆算法对密文进行解密,才能使其恢复成原文。     它的最大优势是加/解密速度快,适用于大数据量进行加密,缺点是密钥管理困难,最典型的问题就是如何同步这个密钥,同步过程如果在公网上,不进行加密是可以抓包拿到的,那么这里就遇到了要对密钥加密的问题。    常见的对称加密算法有 AESDESBlowfish 等等。    对称加密的核心是只有一把密钥。

非对称加密

    非对称加密算法中,有两个密钥:公钥和私钥。它们是一对,如果用公钥进行加密,只有用对应的私钥才能解密;如果用私钥进行加密,只有用对应的公钥才能解密。    非对称加密算法实现机密信息的交换过程为:甲方生成一对密钥并将其中一个作为公钥向其他方公开;得到该公钥的乙方使用该密钥对机密信息进行加密后发送给甲方;甲方再用自己的另一个专用密钥对加密后的信息进行解密。    最有名的非对称加密算法当属 RSA 了,本文将对 RSA 算法的加/解密过程进行详细剖析。    非对称加密拥有两把密钥。

二、RSA算法流程1、算法原理

    算法本身基于一个简单的数论知识:给出两个素数,很容易将它们相乘,然而给出它们的乘积,想得到这两个素数就显得尤为困难。如果能够解决大整数(比如几百位的整数)分解的快速方法,那么 RSA 算法将轻易被破解。

2、公钥和私钥的生成RSA 算法由两个密钥,即公钥和私钥组成。    1)准备两个非常大的素数 p 和 q(转换成二进制后 1024 个二进制位或者更多,位数越多越难破解);    2)利用字符串模拟计算大素数 p 和 q 的乘积 n=pq;    3)同样方法计算 m=(p-1)(q-1),这里的 m 为 n 的欧拉函数;    4)找到一个数 e(1 \lt e \lt m),满足 gcd(m, e)=1(即 e 和 m 互素);    5)计算 e 在模 m 域上的逆元 d(即满足 ed \ mod \ m = 1);    6)至此,公钥和私钥生成完毕:(n, e) 为公钥,(n, d) 为私钥;3、RSA 加密

    对于明文 x,用公钥 (n,e) 对 x 加密的过程,就是将 x 转换成数字(字符串的话取其 ASCII码或者 unicode 值),然后通过幂取模计算出 y,其中 y 就是密文;

y = x^e \ mod \ n \\

4、RSA 解密

    对于密文 y,用私钥 (n,d) 对 y 进行解密的过程和加密类似,同样是计算幂取模;

x = y^d \ mod \ n \\

三、RSA算法证明1、私钥解密证明 我们要做的就是证明密文经过私钥的幂取模的结果等于明文,即如下等式成立:x = y^d \ mod \ n\\证明

    根据加密算法得到的密文 y,一定满足如下等式:

y = x^e \ mod \ n \\

1)x 和 n 互素

    这种情况,我们主要用欧拉定理就可以证明,证明过程如下:

\begin{aligned} y^d \ mod \ n &= x^{ed} \ mod \ n & (1)\\ &= x^{km+1} \ mod \ n & (2)\\ &= (x^m \ mod \ n)^k x \ mod \ n & (3)\\ &= (x^{\phi(n)} \ mod \ n)^k x \ mod \ n & (4)\\ &= x \ mod \ n & (5) \end{aligned} \\

(1) 等式两边同时取 d 次幂,再取模;(2) e 和 d 在模 m 的域上互为逆元,所以 ed = km+1;(3) 乘法取模的结合律;(4) m 为 n 的欧拉函数,即 m = \phi(n) = \phi(p)\phi(q);(5) 由于 x 和 n 互素,所以根据欧拉定理,有 x^{\phi(n)} \ mod \ n = 1,直接代入得证;2)x 和 n 不互素

    当 x 和 n 不互素时,由于 n = pq,所以 x 要么是 p 的倍数,要么是 q 的倍数,但是不可能同时是两者的倍数,因为这样一来,x^e \ mod \ n = 0,就无法加密了。    那么,我们假设 x = x'p,这里显然 gcd(x, q) = 1,并且可以得到 qx \ mod \ n = 0    根据欧拉定理,有:

x^{\phi(q)} \equiv 1 (mod \ q) \\

    由于 ed \ mod \ m = 1,所以我们可以令 ed = km + 1 = k\phi(p)\phi(q) + 1    对欧拉定理的同余式两边同时乘上 k\phi(p),则有:

x^{k\phi(p)\phi(q)} \equiv 1 (mod \ q) \\

则:

x^{k\phi(p)\phi(q)} = iq + 1 \\

    于是可以推导出如下等式:

\begin{aligned} y^d \ mod \ n &= x^{ed} \ mod \ n & (1)\\ &= x^{km+1} \ mod \ n & (2)\\ &= x^{k\phi(p)\phi(q)}x \ mod \ n & (3)\\ &= (iq+1)x \ mod \ n & (4)\\ &= (iqx + x) \ mod \ n & (5)\\ &= x \ mod \ n & (6) \end{aligned} \\

(1) 和 (2) 上文已经做了解释;(3) m 为 n 的欧拉函数,即 m = \phi(n) = \phi(p)\phi(q);(4) 代入上文推出的公式;(5) 模乘分配率;(6) 由于 qx \ mod \ n = 0,所以 iqx 一定是 n 的倍数,可以消去;2、安全性证明

    最后来看下 RSA 算法为何安全,全程六个数字:

p、q、n、\phi(n)、e、d \\    而对于外界来说,知道的只有公钥 (n, e),如何通过这两个已知数得到明文?

1)首先,明文需要密文的 d 次幂模上 n 来计算,所以首先要知道 d;2)d 为 e 对 \phi(n) 的逆元,如果知道 \phi(n),则能够通过扩展欧几里德算法计算出 d;3)\phi(n)=(p-1)(q-1),其中 p 和 q 均为素数,只有得知 p 和 q 的值才能计算出 \phi(n);4)n=pq,n 已知,所以如果能够分解 n,则 p 和 q 就能被计算出来。

    综上所述,破解 RSA 的难点在于对 n 的因数分解,然而大整数的因数分解暂时没有高效的算法。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3