RSA加解密演算与暴力破解12位

RSA号称地球上最安全的加密算法,https、ssl、网银密码等大多都是基于RSA加密的。那么RSA的基本原理是什么?我们都很好奇,在云计算发达与量子计算崭露头角的今天,RSA加密还是地球最安全的吗?本文为大家以12位演算RSA的加密解密,与暴力破解12位RSA之法。

一、RSA12位加密解密演算

(1) 生成公钥密钥

大家都知道RSA是非对称加密,解密方生成公钥和密钥,公钥公开给加密方加密,密钥留给自己解密是不公开的。

1.随机选两个质数,我们用p、q来代替 (质数的数值越大位数就越多可靠性就越高)
假设我们取了47与59
p = 47
q = 59

2.计算这两个质数的乘积,用n代替
n = 47 x 59 = 2773

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

3.计算n的欧拉函数φ(n)
欧拉函数公式:φ(n) = (p-1)(q-1)
代入:φ(2773) = (47 - 1) x (59 - 1) = 46 x 58 = 2668

4.随机选择一个整数e,条件是1< e < φ(n),且e与φ(n) 互质
那么我们就在1到2668之间,随机选择了17
e = 17

5.计算e对于φ(n)的模反元素d
模反元素公式: ax ≡ 1 (mod b)
这是欧拉定理推导出来的,若a、b互质则a乘以一个整数除以b的余数是1。这个整数就是a与b的模反元素。
该公式可以写成:ax - b = 1 则 x = (1 + b) / a

代入: d = (1 + φ(n)) / e = (1 + 2668) / 17 = 157
是一个整数,但很多情况下结果不一定是整数,我们为了计算的方便,在公式里追加一个整数k: x = (1 + kb) / a,加上k来乘以b并不影响余数1的结果。

重新代入: d = (1 + kφ(n)) / e = (1 + k x 2668) / 23
即得到一个线性方程
求解的坐标点(k,d)有很多 (1,157)、(18,2825)、(35,5493) ....
我们随机出一个坐标点: (1,157)
即:d = 157

6.将n和e封装成公钥,n和d封装成私钥
即公开的公钥为:n = 2773,e = 17
保密的私钥为:n = 2773,d = 157
就是这样子12位RSA的公私钥生成好了!

(2) 用公钥加密字符串

假设我们加密一个字符"A"
再用数值表示,一般用Unicode或ASCII码表示
转ASCII码十进制为65,我们用m来代替明文,c来代替密文
m = 65
RSA加密公式:me ≡ c (mod n)
RSA加密公式由欧拉函数公式与反模元素公式推导出来

代入:c = 6517 % 2773 = 601
这样密文就出来了!

(3) 用私钥解密密文

RSA解密公式:cd ≡ m (mod n)
RSA解密公式由欧拉函数公式与反模元素公式推导出来

代入:m = 601157 % 2773 = 65
这样明文就出来了!

公式的推导过程请参考阮老师的博客:
RSA算法原理(一)
RSA算法原理(二)

二、RSA12位暴力破解

(1) RSA的可靠性在于因数分解的难度

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

(1)ed≡1 (mod φ(n))。只有知道e和φ(n),才能算出d。
(2)φ(n)=(p-1)(q-1)。只有知道p和q,才能算出φ(n)。
(3)n=pq。只有将n因数分解,才能算出p和q。

由此可见推导出d就必须因数分解出p和q
公钥里面有n = 2773
那么暴力破解的方法就是把2773因数分解出两个相乘的质数。

最简单的方法就是遍历穷举质数的乘积:
<pre>
var distNum = 2773;
var numList = [];
var p = 1;
var q = 1;
for(var i = 1; i < 100; i++) {
var isGetResult = false; // 是否找到结果
var isUseful = true; // 是否质数
var isHave = false; // 是否在质数列表中存在
for(var j = 0; j < numList.length; j++) {
if(numList[j] == i) {
isHave = true;
break;
}
}
for(var k = 2; k < i; k++ ) {
if(i % k == 0) {
isUseful = false;
break;
}
}
if(!isHave && isUseful) {
numList.push(i); // 加入质数列表
// 匹配乘积
for(var n = 0; n < numList.length; n++) {
if(i != numList[n] && i * numList[n] == distNum) {
p = i;
q = numList[n];
isGetResult = true;
break;
}
}
}
console.log(JSON.stringify(numList));
if(isGetResult) {
console.log('p = ' + p);
console.log('q = ' + q);
break;
}
}
</pre>

运行结果:

12位的RSA加密瞬间破解出来了!

三、结语

RSA加密的可靠性是基于因数分解的计算难度,但随着量子计算、云计算的发达,现在用的1024位RSA甚至2048位RSA都面临着挑战,据说40个量子比特位相当于一台超级计算机。

参考资料:
RSA算法原理(一)
RSA算法原理(二)

您的意见是我改善的东西,欢迎评论提建议,如果对您有帮助,请点个赞,谢谢~~
菲麦前端专题,汇聚前端好文,邀您关注!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,347评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,435评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,509评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,611评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,837评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,987评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,730评论 0 267
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,194评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,525评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,664评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,334评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,944评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,764评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,997评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,389评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,554评论 2 349

推荐阅读更多精彩内容

  • 前言 本文的RSA例子代码更新在我的github上。 RSA算法是最重要算法之一,它是计算机通信安全的基石,保证了...
    game3108阅读 11,628评论 2 53
  • 姓名:于川皓 学号:16140210089 转载自:https://baike.baidu.com/item/RS...
    道无涯_cc76阅读 2,540评论 0 1
  • Base64 base64是一种基于64个可打印字符来表示二进制数据的表示方法.严格来说它只能算作一种编码方式.B...
    miku酱啦阅读 1,183评论 0 3
  • 这是去年12月在CSDN写的一篇加密算法文章 现在决定在简书写博客 移植过来方便复习再理解。 最近算法课老师要求小...
    icecrea阅读 1,289评论 1 1
  • 生成密钥随机选择两个不相等的质数p和q。例:61和53。(实际应用中,这两个质数越大,就越难破解。)计算p和q的乘...
    未知代码阅读 537评论 0 1