ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

[crypto]-RSA算法的介绍

2021-06-22 14:03:05  阅读:167  来源: 互联网

标签:3233 公钥 私钥 推导 crypto RSA 算法 计算 mod


说明:本文使用的数据来自网络,重复的太多了,也不知道哪篇是原创.

算法原理介绍

step 说明 描述 备注
1 找出质数 P 、Q -
2 计算公共模数 N = P * Q -
3 欧拉函数 φ(N) = (P-1)(Q-1) -
4 计算公钥E 1 < E < φ(N) E的取值必须是整数
E 和 φ(N) 必须是互质数
5 计算私钥D E * D % φ(N) = 1 -
6 加密 C = ME mod N C:密文 M:明文
7 解密 M =CD mod N C:密文 M:明文
step decription equation note
1 Find the prime pairs P 、Q -
2 Calculate the common module N = P * Q -
3 euler function φ(N) = (P-1)(Q-1) -
4 Calculate the public key - E 1 < E < φ(N) E must be an integer
E and φ(N) are prime numbers
5 Calculate the private key - D E * D % φ(N) = 1 -
6 encryption C = ME mod N C:ciphertext ,M:plaintext
7 decryption M =CD mod N C:ciphertext ,M:plaintext

算法举例

  • 随机选择两个不相等的质数 : p=61、q=53
  • 计算 n = p × q = 61×53 = 3233
  • 计算n的欧拉函数 : φ(n) = (p-1)(q-1) = 3120
  • 随机选择一个整数e,条件是1< e < φ(n),且e与φ(n) 互质, 我们选择一个 e=17
  • 计算e对于φ(n)的模反元素d : d*e%φ(n)=1

支持 n e d都算出来了,n=3233,e=17,d=2753,所以公钥就是 (3233,17),私钥就是(3233, 2753)

公钥能否推导出私钥,也就是n和e的情况下,推导出d

  • (1)ed%φ(n)=1, 推导d, 需要知道e和φ(n)
  • (2)φ(n)=(p-1)(q-1)。计算φ(n), 需要知道p和q
  • (3)n=pq。只有将n因数分解,才能算出p和q.

私钥能否推导出公钥,也就是n和d的情况下,推导出e

  • (1)ed%φ(n)=1, 推导e, 需要知道d和φ(n)
  • (2)φ(n)=(p-1)(q-1)。计算φ(n), 需要知道p和q
  • (3)n=pq。只有将n因数分解,才能算出p和q.

对于3233您可以进行因数分解(3233=61×53),那么对于下面一个这样很大的数字呢?

12301866845301177551304949
  58384962720772853569595334
  79219732245215172640050726
  36575187452021997864693899
  56474942774063845925192557
  32630345373154826850791702
  61221429134616704292143116
  02221240479274737794080665
  351419597459856902143413

它等价于:

33478071698956898786044169
  84821269081770479498371376
  85689124313889828837938780
  02287614711652531743087737
  814467999489
    ×
  36746043666799590428244633
  79962795263227915816434308
  76426760322838157396665112
  79233373417143396810270092
  798736308917

公钥(e,n)对明文m进行加密 : c = m^e % n
私钥(d,n)对密文c进行解密 : m = c^d % n

其中e和d是对等的,一样的地位,可以互换的. 所以,公钥推出私钥比较困难,那么私钥推出公钥也是比较困难.
另外,在密码学中,我们一般不说通过公钥并不是完全不能推算出私钥, 而是表述为:通过公钥推算私钥在计算上是困难的。

那么为什么我们在平时使用时,感觉的是公钥不能推导私钥,但私钥可以推导公钥呢?
因为在PEM或DER的编码格式中,公钥包含了N和E,私钥包含了N E D P Q等信息,也就是私钥已经包含了公钥,故私钥是能推出公钥的。
另外在通常使用中,e一般就等于65535,所以无需推导.

标签:3233,公钥,私钥,推导,crypto,RSA,算法,计算,mod
来源: https://blog.51cto.com/u_15278218/2936789

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有