前面讲了一些数论的基础知识,理解了什么是欧拉函数、欧拉定理以及如何求模反元素,那么接下来的问题就是如何生成密钥。


目录

1.公钥私钥生成过程

2.可靠性分析

3.总结


1.公钥私钥生成过程

第一步:随机选择两个不相等的质数p和q

比如选择61和53(实际应用中,这两个质数越大,就越难破解)。

第二步:计算p和q的乘积n

n = 61×53 = 3233

n的长度就是密钥长度。3233写成二进制是110010100001,一共有12位,所以这个密钥就是12位。实际应用中,RSA密钥一般是1024位,重要场合则为2048位。

第三步:计算n的欧拉函数φ(n)

φ(n) = (p-1)(q-1)

φ(3233) = φ(61)*φ(53)=60*52=3120

算出φ(3233)等于60×52,即3120。

第四步,随机选择一个整数e

条件是在1到3120之间,随机选择了17。(实际应用中,常常选择65537)

第五步,计算e对于φ(n)的模反元素d

所谓"模反元素"就是指有一个整数d,可以使得ed被φ(n)除的余数为1。

ed ≡ 1 (mod φ(n))

这个式子等价于

ed - 1 = kφ(n)

于是,找到模反元素d,实质上就是对下面这个二元一次方程求解。

ex + φ(n)y = 1

已知 e=17, φ(n)=3120,

17x + 3120y = 1

这个方程可以用"扩展欧几里得算法"求解,此处后续将会介绍。最后算出一组整数解为 (x,y)=(2753,-15),即 d=2753。

第六步,将n和e封装成公钥,n和d封装成私钥。

通过上述计算得到:n=3233,e=17,d=2753,所以公钥就是 (3233,17),私钥就是(3233, 2753)

实际应用中,公钥和私钥的数据都采用ASN.1格式表达。

至此所有计算完成。

2.可靠性分析

通过前面的计算,得到了若干数据,可能感觉比较乱,为了方便后续的理论分析,我将出现的数据进行列表展示。

p 61
q 53
n 3233
φ(n) 3120
e 17
d 2753

这六个数字之中将n和e封装成公钥,n和d封装成私钥。公钥用到了两个(n和e),其余四个数字都是不公开的。其中最关键的是d,因为n和d组成了私钥,一旦d泄漏,就等于私钥泄漏。

那么进一步分析,有无可能私钥d会被破解出来?在知道了公钥n和e后能否推导出d?

① ed - 1 = kφ(n):如果想知道d,就必须要知道e和φ(n)。

② φ(n) = (p-1)(q-1):如果想求φ(n) ,那么就要知道p和q。

③ n=pq:只有将n因数分解,才能算出p和q。

可以发现,如果n被因数分解了,那么d就会被推导出来,那么私钥就会丢失。想想看n很容易被分解么?

其实大整数的因数分解,是一件非常困难的事情。目前,除了暴力破解,还没有发现别的有效方法。维基百科这样写道:

"对极大整数做因数分解的难度决定了RSA算法的可靠性。换言之,对一极大整数做因数分解愈困难,RSA算法愈可靠。

假如有人找到一种快速因数分解的算法,那么RSA的可靠性就会极度下降。但找到这样的算法的可能性是非常小的。今天只有短的RSA密钥才可能被暴力破解(1024位以上就已经无法破解了)。

只要密钥长度足够长,用RSA加密的信息实际上是不能被解破的。"

举例来说,你可以对3233进行因数分解(61×53),但是你没法对下面这个整数进行因数分解。

1230186684530117755130494958384962720772853569595334792197322452151726400507263657518745202199786469389956474942774063845925192557326303453731548268507917026122142913461670429214311602221240479274737794080665351419597459856902143413 。

事实上,这大概是人类已经分解的最大整数(232个十进制位,768个二进制位)。比它更大的因数分解,还没有被报道过,因此目前被破解的最长RSA密钥就是768位。

3.总结

我通过了一段时间的学习,对非对称加密公钥私钥生成有了初步的认识,后期将会对其如何加密解密进行说明。相信只有懂得原理,才能更好的发展。欢迎大佬的补充留言。

【RSA原理5】浅谈--密钥如何生成及其可靠性说明相关推荐

  1. Android安全开发之浅谈密钥硬编码

    Android安全开发之浅谈密钥硬编码 作者:伊樵.呆狐@阿里聚安全 1 简介 在阿里聚安全的漏洞扫描器中和人工APP安全审计中,经常发现有开发者将密钥硬编码在Java代码.文件中,这样做会引起很大风 ...

  2. Android应用安全开发之浅谈密钥硬编码

    Android应用安全开发之浅谈密钥硬编码 作者:伊樵.呆狐@阿里聚安全 1 简介 在阿里聚安全的漏洞扫描器中和人工APP安全审计中,经常发现有开发者将密钥硬编码在Java代码.文件中,这样做会引起很 ...

  3. 038 浅谈PHP动态生成静态页面

    浅谈PHP动态生成静态页面 2007-09-22 17:55:15| 分类: 思绪燃星火--技 题记:想做一件事,就要从0开始,我相信自己会成功的! 面对资金的问题,一些站长被迫只能先开个满足几千流量 ...

  4. 计算机网络可靠性的重要指标,浅谈如何提高计算机网络的可靠性

    浅谈如何提高计算机网络的可靠性 1提高计算机网络的可靠性是势在必行的 近年来,计算机网络不断发展,各行各业的主要业务都依赖于计算机网络.下面,笔者将列举几个具有代表性的行业对计算机网络的依赖性. 1. ...

  5. 保证计算机网络的稳定运行,[计算机如何连接网络]浅谈如何提高计算机网络的可靠性...

    <[计算机如何连接网络]浅谈如何提高计算机网络的可靠性>由会员分享,可在线阅读,更多相关<[计算机如何连接网络]浅谈如何提高计算机网络的可靠性(3页珍藏版)>请在装配图网上搜索 ...

  6. 动态磅是怎么原理_浅谈动态地磅的原理及未来发展方向

    浅谈动态地磅的原理及未来发展方向: 文章介绍了动态地磅的结构和工作原理,针对动态地磅的分类做了全面的概述,分别对不同的动态地磅做了对比及详细的阐述,说明选择和使用动态地磅器的注意事项,凸显了轴组式动态 ...

  7. 相片打印机原理_浅谈喷墨打印机的照片输出(一)照片输出的需求与喷打在其中的地位和作用...

    浅谈喷墨打印机的照片输出(一) ---- 照片输出的需求与喷打在其中的地位和作用 自从有了照相机也就有了照片输出, 且不说冲印与打印的照片效果质量和原理方法到底如 何,单就打印机照片输出来说就分门别类 ...

  8. flink运行原理_浅谈Flink分布式运行时和数据流图的并行化

    本文将以WordCount的案例为主线,主要介绍Flink的设计和运行原理.关于Flink WordCount程序可以参考我之前的文章:读取Kafka实时数据流,实现Flink WordCount.阅 ...

  9. synchronized原理_浅谈synchronized的实现原理

    Synchronized是Java中的重量级锁,在我刚学Java多线程编程时,我只知道它的实现和monitor有关,但是synchronized和monitor的关系,以及monitor的本质究竟是什 ...

最新文章

  1. can是什么时候处于显性_can总线怎么传输数据格式过程分析
  2. 工作经验(体感开发篇)
  3. UIView翻译 (参考)
  4. 脊髓损伤有哪些方法方法?顾连康复方法有哪些
  5. Mono项目的新进展
  6. WebRTC学习与DEMO资源一览
  7. 详述ArrayList类contains方法
  8. matlab版本和yalmip兼容,科学网—matlab cvx + yalmip - 吴锐的博文
  9. 一文教会你使用 Neo4j 快速构建明星关系图谱
  10. dws中间表模型设计: 页面受访明细宽表
  11. 中国农业大学计算机专业在陕西录取分数线,2017中国农业大学各省各专业录取分数线(8)...
  12. 电脑一敲键盘就跳转计算机,Win10系统电脑关机后一敲键盘就开机 win10系统为什么按键盘任意键自动开机...
  13. spring-boot-starter-quartz 添加定时任务立即执行一次的问题解决
  14. linux 下的 包过滤器 BPF
  15. 常见电子邮件英文缩写
  16. Mcad学习笔记之委托再理解(delegate的构造器,MulticastDelegate,BeginInvoke,EndInvoke,Invoke4个方法的探讨)...
  17. c语言篮球24秒计时器编程,[转载]篮球24秒计时器的设计
  18. 理解WebKit和Chromium: WebKit, WebKit2, Chromium和Chrome介绍
  19. CorelDRAW利用真实图片制作写意水墨画效果
  20. 拍出天价,乔布斯1973年求职申请表曝光

热门文章

  1. 1064:奥运奖牌计数
  2. Linux驱动开发之platform设备驱动实验【完整教程】
  3. Openshift中Pod的SpringBoot2健康检查
  4. 重装win10操作系统(制作系统U盘方法)
  5. 汇智动力——贵哥说“Python”
  6. HIVE与数据库工具建立连接
  7. 论文《Efficient palette-based decomposition and recoloring of images via RGBXY-space geometry》笔记
  8. springboot+vue+elementUI 高校学生实习管理管理系统 #毕业设计
  9. 麒麟Kylin-V10-arm64-操作系统永久修改分辨率——趟坑
  10. java毕业设计项目源代码javaweb在线商城电商项目|购物