公钥密码RSA算法记录
介绍: RSA算法是1978年由 R.Rivest、A.Shamir、L.Adleman提出的一种用数论构造的、也是迄今为止理论上最为成熟、完善的公钥密码体,该体制已得到广泛的应用。
算法描述:
1. 密钥的产生
(1) 选两个保密的两个大素数 p 和 q 。
(2) 计算 n=p*q,φ(n) = (p-1)*(q-1),其中,φ(n)是n的欧拉函数值 (即满足和n互素的在[1,n)区间的数的个数,定理[ φ(m*n) = φ(m)*φ(n),仅当m,n互素时]);
(3) 选一个整数 e ,满足 1 < e < φ(n),且 gcd(φ(n),e) = 1;
(4) 计算 d,满足 d*e ≡ 1 mod φ(n),即 d 是 e 在摸φ(n) 下的乘法逆元,因e与φ(n)互素,由模运算可知,他的乘法逆元一定存在[贝祖等式:s*a + t*b = (a,b),此时(e,φ(n))=1,因此必然存在逆元];
(5) 以 {e,n} 为公钥,以 {d,n} 为私钥。
2.加密
加密时首先将明文比特串分组,使得每个分组对应的十进制数小于n
,即分组长度小于log2(n)
(目的应该在于解密时答案的唯一性,即模余值)。然后对每个明文分组m,做加密运算,即
c ≡ m^e mod(n)
4. 解密
对密文分组的解密运算为
m ≡ c^d mod(n)
其中的原理易于理解,利用欧拉定理 $a^{φ(m)} ≡ 1 (mod m)$ 以及 $d*e ≡ 1 mod φ(n)$可以得出结论。
攻击:
对 n 进行暴力分解出 p 和 q,从而轻易的到密钥 e;本地的工具有windows上的RSATool2v17
,可分解256 比特的n,yafu CTF比赛中遇到难以分解的 n 可以试一下,rsa-wiener-attack 用于当e过大或过小时;而目前1024~2048 比特之间的RSA是安全的;
共模攻击、两大数 n1 和 n2 用相同大素数公约数和低指数攻击;
重复加密攻击:若 m{e{t+1}} ≡ c(mod n),即 (m{et})^e ≡ c(modn),则有 m{et} ≡ m(mod n) ,即 c{e{t-1}} ≡ m(mod n) ;这种攻击只有在t较小的时候才是可行的,和p
和q
的取值有关。具体如下:
ce≡(me)e≡m{e^2}(mod n)
c{e2}≡(me){e2}≡m{e^3}(mod n)
...
c{e{t-1}}≡(me){e{t-1}}≡m{e^t}(mod n)
c{et}≡(me){et}≡m{e^{t+1}}(mod n)
重复对以e
密文c
进行加密,并且与 c 进行比对,若一致,得到t
值,则攻击成功。
之前看过的一篇关于ctf中对于rsa破解的技巧分享,感觉很受用 [【技术分享】CTF中RSA的常见攻击方法](https://www.anquanke.com/post/id/84632)
公钥密码RSA算法记录的更多相关文章
- RSA算法记录----摘抄
RSA算法原理(一) "公钥加密算法". 因为它是计算机通信安全的基石,保证了加密数据不会被破解.你可以想象一下,信用卡交易被破解的后果. 进入正题之前,我先简单介绍一下,什么 ...
- 实现 RSA 算法之改进和优化(第三章)(老物)
第三章 如何改进和优化RSA算法 这章呢,我想谈谈在实际应用出现的问题和理解. 由于近期要开始各种忙了,所以写完这章后我短时间内也不打算出什么资料了=- =(反正平时就没有出资料的习惯.) 在讲第一章 ...
- 跨越千年的RSA算法
转载自http://www.matrix67.com/blog/archives/5100 数论,数学中的皇冠,最纯粹的数学.早在古希腊时代,人们就开始痴迷地研究数字,沉浸于这个几乎没有任何实用价值的 ...
- RSA算法使用介绍
http://www.cnblogs.com/AloneSword/p/3326750.html RSA是目前最有影响力的公钥加密算法,该算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那 ...
- RSA算法优化
RSA算法优化 大数乘法 模乗优化 剩余定理(孙子定理) RSA加解密 python的RSA计算优化 #-*- coding: utf-8 -*- ''' /********************* ...
- RSA算法原理——(3)RSA加解密过程及公式论证
上期(RSA简介及基础数论知识)为大家介绍了:互质.欧拉函数.欧拉定理.模反元素 这四个数论的知识点,而这四个知识点是理解RSA加密算法的基石,忘了的同学可以快速的回顾一遍. 一.目前常见加密算法简介 ...
- [转] 带你彻底理解RSA算法原理
http://blog.csdn.net/dbs1215/article/details/48953589 1. 什么是RSA RSA算法是现今使用最广泛的公钥密码算法,也是号称地球上最安全的加密算法 ...
- [转载]RSA算法详解
原文:http://www.matrix67.com/blog/archives/5100 数论,数学中的皇冠,最纯粹的数学.早在古希腊时代,人们就开始痴迷地研究数字,沉浸于这个几乎没有任何实用价值的 ...
- 一个基于RSA算法的Java数字签名例子
原文地址:一个基于RSA算法的Java数字签名例子 一.前言: 网络数据安全包括数据的本身的安全性.数据的完整性(防止篡改).数据来源的不可否认性等要素.对数据采用加密算法加密可以保证数据本身的安全性 ...
随机推荐
- 什么是移动BI
移动商务智能(移动商务智能或移动智能)定义为一个包含技术和组织元素的系统,可向用户提供历史和/或实时信息,以便在智能手机和平板电脑等移动设备上进行分析笔记本电脑),以实现有效的决策和管理支持,以提高公 ...
- Android使用google breakpad捕获分析native cash
Android 开发高手课 课后练习(1) 一.Chapter01 崩溃 https://time.geekbang.org/column/article/70602 https://github.c ...
- 12.22 大湾区.NET Meet 大会
今年的 Connect(); 主题更加聚焦开发者工具生产力.开源,以及无服务器(Serverless)云服务. Visual Studio 2019 AI 智能加持的 IntelliCode.实时代码 ...
- 图的BFS----迷宫问题
题目描述: ...11111111111111111111111111111 11.111111........1111111111.1111 11.111111..111.11111111..... ...
- Dom4J配合XPath解析schema约束的xml配置文件问题
如果一个xml文件没有引入约束,或者引入的是DTD约束时,那么使用dom4j和xpath是可以正常解析的,不引入约束的情况本文不再展示. 引入DTD约束的情况 mybook.dtd: <?xml ...
- mysql的学习笔记(三)
1.外键约束(保持数据一致,完整.实现一对多或一对一) 父表(参照的表)和子表(有外键列的表)必须使用相同的存储引擎InnoDB,禁止使用临时表. 外键列和参照列必须具有相似的数据类型.其中数字的长度 ...
- LindDotNetCore~添加路由前缀
回到目录 路由前缀就是我们所说的api/values里的api,这里的api可以用其它具体含义的字符表示,如Shop,Order,Game,它可以表示一个个模块,这一般在单体架构里;也可以是一个个小服 ...
- java编程行业微信群,无论新手老手欢迎加入,会一直更新
纯技术交流群 每日推荐 - 技术干货推送 跟着泥瓦匠,一起问答交流 扫一扫,我邀请你入群 纯技术交流群 每日推荐 - 技术干货推送 跟着泥瓦匠,一起问答交流 扫一扫,我邀请你入群
- leetcode math类型题目解题总结
2. Add Two Numbers https://leetcode.com/problems/add-two-numbers/description/ class Solution { publi ...
- 【转载】Win10系统如何设置所有程序默认以管理员身份运行?
在win10系统中有些用户发现一些程序只有使用管理员身份运行能才打开,这样的话就感觉会麻烦很多,那么有没有办法设置所有程序都默认以管理员身份运行,而无需我们一个一个右键点击再打开呢? 目前最好的方法就 ...