公钥密码学 RSA算法

版权声明:转载请附上文章地址 https://blog.csdn.net/weixin_38134491/article/details/84972135

整个RSA过程大体是 生成秘钥、加密、解密3个步骤

第一步 生成秘钥

选两个素数 p,q 保密,然后计算 n=pq 公开,                    

在1<e<Ø(n)范围内选择一个数e作为公钥,e要与Ø(n)互素就行,即gcd(Ø(n),e)=1

求出私钥 d≡e^-1 mod Ø(n)       

所以 公钥PU={e,n}, 私钥 PR={d,n}

第二步 加密(sender)

C=M^e mod n=

第三步 解密(receiver)

M=C^d mod n=

下面一起举个例子看看:

  • 得出公钥和私钥
  1. 选择两个素数,p=17, q=11
  2. 计算 n=pq=17*11=187
  3. 计算Ø(n)=(p-1)(q-1)=160
  4. 选择e使其与Ø(n)互素且小于Ø(n), 我们随便选个e=7
  5. 确定d使得de≡1 (mod 160) 且d<160, 因为23*7=161,所以d=23, 这里d可以利用扩展的欧几里得算法求出

所以 公钥PU={7, 187}  私钥 PR={23, 187}

  • 加密

如果明文M=88, 则

密文 C=M^e mod n=88^7 mod 187=

88^1 mod 187=88

88^2 mod 187=7744 mod 187=77

88^4 mod 187= 59969536 mod 187= 132

88^7 mod 187=(88^4* 88^2 *88^1) mod 187=(132*77*88) mod 187= 894432 mod 1877=11

  • 解密

M=C^d mod n= 11^23 mod 187=  

11^1 mod 187=11

11^2 mod 187=121

11^4 mod 187= 121*121 mod 187=55

11^8 mod 187= 55*55 mod 187=33

11^16 mod 187= 33*33 mod 187=154

11^23 mod 187= (11^16* 11^4 *11^2 *11^1) mod 187= 154*55*121*11 mod 187=88

RSA算法保密性分析:

发送方C=M^e mod n知道 e, n

接收方M=C^d mod n 知道 d , n

要想得出e,那么发送方一定知道 Ø(n), 要想知道 Ø(n)发送方一定知道 p,q ,所有当然知道n

接收方要想得出 d,

上面是简洁的介绍,下面再强调一些细节:

RSA体制是一种分组密码,其明文和密文均是0到n-1之间的整数,通常n的大小为1024位二进制或者309位十进制,也就是n<2^1024。

RSA算法使用乘方算法,明文以分组为单位进行加密,每个分组的二进制均小于n,也就是说分组的大小必须小于或等于log2(n+1) +1, 在实际应用中,分组的大小是i位,其中 2^i<n<=2^(i+1), 对于明文分组 M 和密文分组 C进行加解密。

解密公式化简一下是  M=C^d mod n= (M^e)^d mod n= M^(ed) mod n

其中收发双方都知道n,发送方知道e,接收方知道d

RSA算法成立的条件是什么?

  • 可以找到e,d,n, 使得对所有M<n, 有M^(ed) mod n=M
  • 对所有M<n, 计算 M^e mod n 和 C^d是比较容易的
  • 由e和n确定d是不可行的

猜你喜欢

转载自blog.csdn.net/weixin_38134491/article/details/84972135