公钥密码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^{e^t})^e ≡ c(modn),则有 m^{e^t} ≡ m(mod n) ,即 c^{e^{t-1}} ≡ m(mod n) ;这种攻击只有在t较小的时候才是可行的,和pq的取值有关。具体如下:

???? c^e≡(m^e)^e≡m^{e^2}(mod n)

???? c^{e^2}≡(m^e)^{e^2}≡m^{e^3}(mod n)

????...

???? c^{e^{t-1}}≡(m^e)^{e^{t-1}}≡m^{e^t}(mod n)

???? c^{e^t}≡(m^e)^{e^t}≡m^{e^{t+1}}(mod n)

重复对以e密文c进行加密,并且与 c 进行比对,若一致,得到t值,则攻击成功。

之前看过的一篇关于ctf中对于rsa破解的技巧分享,感觉很受用 【技术分享】CTF中RSA的常见攻击方法

原文地址:https://www.cnblogs.com/zUotTe0/p/10083825.html

时间: 2024-10-29 02:34:59

公钥密码RSA算法记录的相关文章

RSA算法记录----摘抄

RSA算法原理(一) "公钥加密算法". 因为它是计算机通信安全的基石,保证了加密数据不会被破解.你可以想象一下,信用卡交易被破解的后果. 进入正题之前,我先简单介绍一下,什么是"公钥加密算法". 一.一点历史 1976年以前,所有的加密方法都是同一种模式: (1)甲方选择某一种加密规则,对信息进行加密: (2)乙方使用同一种规则,对信息进行解密. 由于加密和解密使用同样规则(简称"密钥"),这被称为"对称加密算法"(Symm

实现 RSA 算法之改进和优化(第三章)(老物)

第三章 如何改进和优化RSA算法 这章呢,我想谈谈在实际应用出现的问题和理解. 由于近期要开始各种忙了,所以写完这章后我短时间内也不打算出什么资料了=- =(反正平时就没有出资料的习惯.) 在讲第一章的时候我提到过两个函数在真实应用时舍弃掉的,为何这样说呢? 因为在实际应用中,生成了数据规模N和两把密钥E与D即可进行RSA算法的运作,在应用RSA时只需要一个a^b%c幂模运算函数,所以优化点集中在了数据类型和数据加密解密速度上. 注意RSA函数有个特点,就是根据源数据产生的密文一定是属于n内的,

跨越千年的RSA算法

跨越千年的RSA算法 数论,数学中的皇冠,最纯粹的数学.早在古希腊时代,人们就开始痴迷地研究数字,沉浸于这个几乎没有任何实用价值的思维游戏中.直到计算机诞生之后,几千年来的数论研究成果突然有了实际的应用,这个过程可以说是最为激动人心的数学话题之一.最近我在<程序员>杂志上连载了<跨越千年的 RSA 算法>,但受篇幅限制,只有一万字左右的内容.其实,从数论到 RSA 算法,里面的数学之美哪里是一万字能扯完的?在写作的过程中,我查了很多资料,找到了很多漂亮的例子,也积累了很多个人的思考

RSA算法使用介绍

http://www.cnblogs.com/AloneSword/p/3326750.html RSA是目前最有影响力的公钥加密算法,该算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥,即公钥,而两个大素数组合成私钥.公钥是可发布的供任何人使用,私钥则为自己所有,供解密之用. 解密者拥有私钥,并且将由私钥计算生成的公钥发布给加密者.加密都使用公钥进行加密,并将密文发送到解密者,解密者用私钥解密将密文解码为明文.

RSA算法原理1

必备数学知识 RSA加密算法中,只用到素数.互质数.指数运算.模运算等几个简单的数学知识.所以,我们也需要了解这几个概念即可. 素数 素数又称质数,指在一个大于1的自然数中,除了1和此整数自身外,不能被其他自然数整除的数.这个概念,我们在上初中,甚至小学的时候都学过了,这里就不再过多解释了. 互质数 百度百科上的解释是:公因数只有1的两个数,叫做互质数.:维基百科上的解释是:互质,又称互素.若N个整数的最大公因子是1,则称这N个整数互质. 常见的互质数判断方法主要有以下几种: 两个不同的质数一定

一个基于RSA算法的Java数字签名例子

原文地址:一个基于RSA算法的Java数字签名例子 一.前言: 网络数据安全包括数据的本身的安全性.数据的完整性(防止篡改).数据来源的不可否认性等要素.对数据采用加密算法加密可以保证数据本身的安全性,利用消息摘要可以保证数据的完整性,但是还有一点就是数据来源的不可否认性(也就是数据来自哪里接收者是清楚的,而且发送数据者不可抵赖). 有些方案曾经使用消息认证码(MAC)来保证数据来源于合法的发送着,但是利用消息认证码会带来一个问题,就是通讯双方必须事先约定两者之间的通讯用共享密码.在我们的互联网

【转】 跨越千年的RSA算法

跨越千年的RSA算法 [转]http://www.matrix67.com/blog/archives/5100 数论,数学中的皇冠,最纯粹的数学.早在古希腊时代,人们就开始痴迷地研究数字,沉浸于这个几乎没有任何实用价值的思维游戏中.直到计 算机诞生之后,几千年来的数论研究成果突然有了实际的应用,这个过程可以说是最为激动人心的数学话题之一.最近我在<程序员>杂志上连载了<跨越千年的 RSA 算法>,但受篇幅限制,只有一万字左右的内容.其实,从数论到 RSA 算法,里面的数学之美哪里

ZipInputStream和RSA算法的纠葛

背景 以前有一篇文章介绍过系统升级操作的实现流程:通过上传zip压缩包.并通过RMI方式调用另一个Java程序执行upgrade.sh脚本完成的.其中有一个系统版本信息校验的逻辑,版本信息是一段xml信息经过RSA算法加密,直接打包到zip文件中.系统升级操作,首先对zip文件中的版本描述信息进行解密. 存在一个诡异的问题,只有我本机的360压缩工具生成的zip文件,直接读取密文并解密才不会出错,而winRAR或者7Zip工具生成的压缩文件都报解密异常.这个问题困扰了鄙人一年,这是个大坑啊,如果

RSA算法原理(简单易懂)

1. 什么是RSA RSA算法是现今使用最广泛的公钥密码算法,也是号称地球上最安全的加密算法.在了解RSA算法之前,先熟悉下几个术语 根据密钥的使用方法,可以将密码分为对称密码和公钥密码 对称密码:加密和解密使用同一种密钥的方式 公钥密码:加密和解密使用不同的密码的方式,因此公钥密码通常也称为非对称密码. 2. RSA加密 RSA的加密过程可以使用一个通式来表达 密文=明文EmodN密文=明文EmodN 也就是说RSA加密是对明文的E次方后除以N后求余数的过程.就这么简单?对,就是这么简单. 从