深入理解RSA算法

本文结构:

  • 一些基本的数学知识
  • RSA的具体过程
  • 为什么RSA的私钥解密一定能得到明文
  • RSA算法可靠吗
  • RSA算法的一些其他特征

假设alice想要通过rsa算法在公网上,将消息加密传递给bob,他们应该怎么做呢?
分为以下几个步骤:
1.bob生成一堆共私钥,将公钥在网上公开,私钥自己保存
2.alice通过bob的公钥加密明文消息m,得到密文c,并将密文c传递给bob
3.bob用自己的私钥解密密文c,得到明文m

一些基本的数学知识

  • 质数(素数)p:只有1和他本身能被自己整除。
  • 互质:如果两个正整数,除了1以外,没有其他公因子,我们就称这两个数是互质关系
    比如,15和32没有公因子,所以它们是互质关系。这说明,不是质数也可以构成互质关系。
  • 欧拉函数φ(n):小于n的正整数中,与n互质的整数的个数。例如φ(8)=4(因为小于8的正整数中只有1,3,5,7与8互质)
  • 若n为质数,则φ(n)=n-1
  • n如果可以分为两个质数(p,q)的乘积,则φ(n)=φ(p*q)=φ(p)φ(q)=(p-1)(q-1)
  • 欧拉定理:如果两个正整数a和n互质,则:

a^φ(n)≡1 mod n。

特别的,当n为质数时: a^(n-1)≡1 mod n

  • 模反元素: 如果两个正整数a和n互质,那么一定可以找到整数b,满足:

a×b≡1 mod n

(ab-1 被n整除,或者说ab被n除的余数是1)
这时,b就叫做a的"模反元素"

RSA的具体过程:

秘钥的产生

  • bob选择两个保密的大质数p和q(这里假设是p=61,q=53)
  • 计算n=p×q=61×53=3233,φ(n)=φ(p*q)=φ(p)φ(q)=(p-1)(q-1)=60×52=3120
    这里 n的长度就是秘钥的长度 。3233写成二进制是110010100001,一共有12位,所以这个密钥就是12位。
  • 选一个整数e,满足1< e < φ(n),且e与φ(n) 互质。
    bob就在1到3120之间,随机选择了17。(实际应用中,常常选择65537。)
  • 求解e关于φ(n)的模反元素d(由于e与φ(n)互质,所以d一定存在)

ed ≡ 1 (mod φ(n)) 等价于 ed - 1 = kφ(n),这里就是17d-1 =3120k
很容易求得(d,k)=(2753,-15),即 d=2753。

  • n和e封装成公钥,n和d封装成私钥
    这个例子中 n=3233,e=17,d=2753,所以公钥就是 (3233,17),私钥就是(3233, 2753)。

加密

假设alice要向bob发送明文信息m,则用bob的公钥 (n,e) 对m进行加密。
并且加密时必须将明文进行比特串分组,保证每个分组对应的十进制数小于n,即保证m<n。

c ≡ m^e (mod n)

这里m假设是65,那么可以算出下面的等式:65^17 ≡ 2790 (mod 3233)
于是,c等于2790,alice就把2790发给了bob。

解密

bob拿到2790以后,就用自己的私钥(n=3233, d=2753) 进行解密。

m ≡ c^d (mod n)

现在,c等于2790,私钥是(3233, 2753),那么,bob算出
2790^2753 ≡ 65 (mod 3233)
因此,bob知道了alice加密前的原文就是65。

为什么RSA的私钥解密一定能得到明文

对于密文的解密运算为:

m ≡ c^d (mod n)

现在来证明上面的公式恒成立。将c ≡ m^e (mod n)代入右边,可得

右边=c^d (mod n)=(m^e )^d(mod n) = m^(ed)(mod n)

又由于ed ≡ 1 (mod φ(n))可知必有ed=kφ(n)+1,故有

右边=m^(ed)(mod n) = m^(kφ(n)+1)(mod n)

下面分两种情况证明 m^(kφ(n)+1)(mod n) = m
1)明文m与n互质。那么由欧拉定理知

m^φ(n) ≡ 1 mod n
于是 m^( kφ(n) ) ≡ 1 mod n
于是 m^( kφ(n) + 1 ) ≡ m mod n = m

2)明文m与n不互质:
m与n不互质,说明m与n有公因子。
又因为n=pq,且p和q都为质数,所以n的因子只有p,q,那么m与n的公因子只能是p或者q。所以m为p或q的倍数
假设m=tp,(t为一正整数),且t与q互质(若t与q不互质,假设t=kq,则m=tp=kpq=kn,违反了m<n)
因为m=tp与q互质,由欧拉定理知

m^φ(q)≡ 1 mod q

两边同时取kφ(p)次方,得

[m^φ(q) ]^(kφ(p)) ≡ 1 mod q
==> m^[kφ(q)φ(p)] ≡ 1 mod q
==> m^(kφ(n)) ≡ 1 mod q
==> m^(kφ(n)) = 1 + rq (r为一正整数)
==> m^(kφ(n)+1) = tp(1 + rq) = tp + tprq = m + trn (两边同时乘上m=tp)
==> m^(kφ(n)+1) ≡ m mod n

m ≡ c^d (mod n) 得证。

RSA算法可靠吗

回顾上面的密钥生成步骤,一共出现六个数字:

  p(保密)
  q(保密)
  n(公开)
  φ(n)(保密)
  e(公开)
  d(保密)

公钥用到了两个(n和e),私钥用到了两个(n和d)。
那么,有无可能在已知n和e的情况下,推导出d?

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

结论:如果n可以被因数分解,d就可以算出,也就意味着私钥被破解
但是大整数的因数分解是非常困难的,n越大,算法约安全,目前推荐用的rsa秘钥长度为2018及上。

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

RSA算法的一些其他特征

同秘钥RSA有乘法同态。
简单来说:

假设:明文m=m1 * m2 , 且c1位m1对应的密文,c2位m2对应密文。
则:m对应的密文m=c1 * c2

原理:

若: A * B = C mod n
则 :A^d ∗ Bd=Cd mod n

同价加密的一些相关知识:https://yeasy.gitbooks.io/blockchain_guide/content/crypto/homoencryption.html

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

推荐阅读更多精彩内容