公钥密码学 RSA算法

整个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是不可行的

 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值