RSA加密算法

这是去年12月在CSDN写的一篇加密算法文章 现在决定在简书写博客 移植过来方便复习再理解。


最近算法课老师要求小组上台讲算法,我们就去学习了一下RSA算法。

以前的加密算法,大部分属于对称加密算法。通信双方只有掌握同一种规则,才能进行加密解密。这种加密模式有一个最大弱点:甲方必须把加密规则告诉乙方,否则无法解密。就好像一把钥匙单独对应一把锁。但是问题在于,当通信对象很多时,就会有很多把锁和钥匙,这时候保存和传递密钥就是很大的问题。

RSA是一种非对称加密,公开密钥算法。他利用了利用了单向函数正向求解很简单,反向求解很复杂的特性。

具体来说:

1.两个质数相乘很简单,将一个数分解成质数相乘很难

2.(m^e)modN=c 已知m求c很简单,已知c求m很难

而RSA加密算法,就是基于这样的一个正向简单逆向难的数论思路。上面的公式中,m是发送的原数字,c是加密后的数字,e、N是公开的公钥。即使有人截获了加密后的c,也很难破解,获得m。其难度就在于大整数的因式分解

那么,我们获得了c之后,就需要有一套自己独特的方式进行解密,而我们自己的秘密武器,就是私钥d。我们需要有这样一个数d,可以让我们通过(c^d)modN=m推出m。而这个思路和推倒,就利用了欧拉公式,和欧拉定理。

介绍一下我们需要掌握的一些数学定理:

欧拉函数:在小于等于n的正整数之中,有多少个与n构成互质关系?以φ(n)表示。在1到8之中,与8形成互质关系的是1、3、5、7,所以

φ(8) = 4。

注意:如果n是质数,那么φ(n)=n-1。因为质数与小于它的每一个数,都构成互质关系。比如5与1、2、3、4都构成互质关系。

欧拉函数另一种情况:如果n可以分解成两个互质的整数之积,n = p1 × p2则φ(n) = φ(p1p2) = φ(p1)φ(p2)。这里不再证明,有兴趣的查阅数学资料。结合φ(n)=n-1,可以推出φ(n)=(p-1)(q-1)

欧拉定理:如果两个正整数a和n互质,则n的欧拉函数 φ(n) 可以让下面的等式成立:a^φ(n) ≡ 1( mod n)

(符号为同余号,即两边除以n余数相同)

模反元素:如果两个正整数a和n互质,那么一定可以找到整数b,使得 ab-1 被n整除,或者说ab被n除的余数是1。

ab ≡ 1( mod n)这个模反元素,就是我们得到私钥的关键

由上面的思路我们可以想到,如果有这样一个数n,由质数p,q构成因子,那么我们由上式很容易求出φ(n) = φ(p1p2) = φ(p1)φ(p2)=(p1-1)(p2-1),而这个n就用作公钥。

RSA加密算法主要过程如下:

随意选择两个大的质数p和q,p不等于q,计算N=pq。

根据欧拉函数,不大于N且与N互质的整数個数為φ(N)= (p-1)(q-1)。

选择一个整数e与φ(N)互质,并且e小于φ(N)。

用以下这个公式计算d:d× e ≡ 1 (mod φ(N))。

将p和q的记录销毁。

我们一共用到6个数字:p,q,n,φ(n),e,d

再解释一下,pq是我们设置的两个质数,n是质数pq的乘积,φ(n)是欧拉函数,e是我们自己设置的与φ(N)互质的数字,而d是φ(N)的模反元素。 这6个数字中n,e是公钥,所有人可以看到,用来进行加密。n,d是私钥,只有自己能看到,通过私钥我们就可以进行快速正确的解锁。

那么怎么证明 (c^d)modN=m 是成立的呢? 我们看到,已知(m^e)modN=c,将c带入上式

(((m^e)modN)^d)modN=m

上式子可以化简为

((m^e)^d)modN=m即(m^ed)modN=m

为什么可以这样化简?为什么(m^e)modN直接等于了m^e?把Modn约没了?

重点!!!因为

m^e mod n ≡ m^e (mod n)

他们是同余的!我们知道,同余的两个数的N次方,依然是同余的!这里就是关键,我就是卡在这里不明白好久。。- - 所以推倒得出结果

m^ed mod N=m

根据欧拉定理:m^φ(n) ≡1 (mod n),又1^k≡1,所以

m^k*φ(n) ≡1 (mod n)

,两边同乘以m得

m*(m^k*φ(n)) ≡1*m (mod n)

化简得

m^(kφ(n)+1) ≡m(mod n)*

由这两个结果可以得出ed=kφ(n)+1,即d=(k*φ(n)+1)/e*。这个等式是否似曾相识?是的,他就是我们的模反元素求解过程,

而我们在模反元素求解过程中,ab ≡ 1( mod φ(n)) 也可以化简为ab=kφ(n)+1,b=kφ(n)+1/a。 通过推倒,模反元素d就是我们的私钥。通过他,我们可以用一把钥匙解开很多的锁。只要保证私钥的不丢失,密码就很难破解。

最后举个例子。我设置质数p=3,q=11,则n=33,φ(n)=20,e需要取一个小于φ(n)且互质φ(n)的数,这里取e=7,模反元素d: ed≡1(mod φ(n)),即 7*d % 20 =1 求得d=3

现在6个元素都有了值 我们进行加密和解密。

传输m m=5 (m^e)modN=c 即5^7mod 33=14 c=14 加密之后的数是14

我们在通过(c^d)modN=m求得m 即14^3mod33=5 得出加密前,即真正传送的数字是5

想要获得m,必须求得d.而d是通过d=(k*φ(n)+1)/e 得到的。而φ(n)的求得又需要分解N的质因数。我的例子里N比较小。而当数字N越大时,分解N的质因数越难,所以说他的安全系数还是很高的。以上是我对RSA加密算法的一点理解。

(总结这个,又花了两个多小时的时间,希望自己能够真正理解并记住,也它是有用的,能帮到别人理解。毕竟不擅长算法,如果有错误不完善的地方请大家指出!)

参考资料:

1.https://www.zhihu.com/question/25038691

2.http://www.ruanyifeng.com/blog/2013/07/rsa_algorithm_part_two.html

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

推荐阅读更多精彩内容

  • 必备数学知识 RSA加密算法中,只用到素数、互质数、指数运算、模运算等几个简单的数学知识。所以,我们也需要了解这几...
    依然饭太稀阅读 843评论 0 0
  • RSA是第一个比较完善的公开密钥算法,它既能用于加密,也能用于数字签名。RSA以它的三个发明者Ron Rivest...
    暗物质阅读 1,674评论 0 0
  • 前言 本文的RSA例子代码更新在我的github上。 RSA算法是最重要算法之一,它是计算机通信安全的基石,保证了...
    game3108阅读 11,564评论 2 53
  • RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的绝大多数密码攻击,已被ISO推荐为公钥数据加密标准...
    给你一颗小瓜子阅读 1,261评论 0 10
  • 我很高兴的宣布星巴克的Android版中使用了material design的设计语言作为最新的版本更新,这也是我...
    Charles_UI阅读 2,331评论 0 0