非对称加密及RSA的原理

本人以前对非对称加密有一些了解,但是对非对称加密为啥是安全的一直不是很清楚,所以今天打算弄懂这个问题。

一,对称加密和非对称加密

1. 对称加密

对称加密指的就是加密和解密使用同一个秘钥,所以叫做对称加密。对称加密只有一个秘钥,作为私钥。
常见的对称加密算法:DES,AES,3DES等等。

2. 非对称加密

非对称加密指的是:加密和解密使用不同的秘钥,一把作为公开的公钥,另一把作为私钥。公钥加密的信息,只有私钥才能解密。私钥加密的信息,只有公钥才能解密。
常见的非对称加密算法:RSA,ECC

3. 区别

对称加密算法相比非对称加密算法来说,加解密的效率要高得多。但是缺陷在于对于秘钥的管理上,以及在非安全信道中通讯时,密钥交换的安全性不能保障。所以在实际的网络环境中,会将两者混合使用.

例如针对C/S模型

  1. 服务端计算出一对秘钥pub/pri。将私钥保密,将公钥公开。
  2. 客户端请求服务端时,拿到服务端的公钥pub。
  3. 客户端通过AES计算出一个对称加密的秘钥X。 然后使用pub将X进行加密。
  4. 客户端将加密后的密文发送给服务端。服务端通过pri解密获得X。
  5. 然后两边的通讯内容就通过对称密钥X以对称加密算法来加解密

二,RSA原理

我们先来看这样一些基础知识,并且以下我们讨论全都是整数:

整数运算

在整数运算中 我们定义一个整数x,那么他的负数为-x,并且有x+(-x)=0;
他的倒数为x^(-1), 并且有x * x^(-1) = 1;

同余运算

有整数a,b,正整数m。 假如a除以m余b。我们称为a模m同余b,模数为m。并且记为a≡b(modm),例如10除以3余1
我们称10模3同余1,记为10≡1(mod3)。
我们分别讨论模数为合数和质数情况下,基于同余运算的负数和倒数。

1. 当模数为合数n时

简单起见,我们讨论当n为10的情况,10是两个质数乘积
当模数为10的时候,参与运算的都是小于10的数。因为大于10的数除模取余之后都会小于10,所以只需要考虑小于模的数。
那么在同余运算中,一个小于10的数a,他的负数x是什么? 也就是说使得(a+x)≡0(mod10); 那就是n−a,即x=n−a。这里的x就像是常规运算下的-a。常规运算下a+(−a)=0,我们说−a是a的负数,这里(a+x)≡0(mod10),我们说x是a的负数。
有a+(n−a)=a+(−a)+n=n≡0(modn)。 当n=10的时候 ,有如下表

a 0 1 2 3 4 5 6 7 8 9
x 0 9 8 7 6 5 4 3 2 1

那么,a的倒数a^(−1)是什么呢? 它要使得a×a^(−1) 在模数为n的情况下等于1,即a×a^(−1)≡1(modn)。当n=10的时候我们会发现,对于有的数我们可以找到它的倒数,有的数却找不到。例如当a=3,我们可以找到7,使得3×7=21≡1(mod10) ;而当a=4的时候,我们有4×0=0,4×1=4,4×2=8,4×3=12,4×4=16,4×5=20,4×6=24,4×7=28,4×8=32,4×9=36,在模10的情况下,都不会等于1。
我们对于所有小于10的a都找他的倒数a^(−1),有下表

a 1 2 3 4 5 6 7 8 9
x 1 不存在 7 不存在 不存在 不存在 3 不存在 9

有什么规律呢?
数学界已证明:当a<n时,只有当a和n互质才能找到a^(−1)。 同时还有以下结论,当n=p×q,且p和q都为质数时,所有小于n的数中,能找到倒数的个数为(p−1)×(q−1)个。如果n有更多的质因子,那么计算会更复杂点。
我们把所有小于n,并且能和n互质的数的总个数记为一个函数φ(n)
,这个函数叫做欧拉函数。例即当n=p×q ,且p和q都为质数时,有φ(n)=(p−1)×(q−1), 那么就有φ(10)=(2−1)×(5−1)=4 。
同时这些数还有以下两个有趣的情况
1.这些数之间进行互乘的同余运算,结果还是这些数。
例如
对于1:1×1≡1(mod10), 1×3≡3(mod10), 1×7≡7(mod10), 1×9≡9(mod10)
对于3:3×1≡3(mod10), 3×3≡9(mod10), 3×7≡1(mod10), 3×9≡7(mod10)
对于7:7×1≡7(mod10),7×3≡1(mod10),7×7≡9(mod10),7×9≡3(mod10)
对于9:9×1≡9(mod10),9×3≡7(mod10),9×7≡3(mod10),9×9≡1(mod10)
如果一些数在互相运算之后,得到的结果还是这些数中,我们称这些数在这个运算条件下具有封闭性
2.对这些数进行求幂运算,并且再模10,结果如下表

a 1 3 7 9
a^0 1 1 1 1
a^1 1 3 7 9
a^2 1×1=1 3×3=9 7×7=9 9×9=1
a^3 1×1×1=1 3×3×3=7 7×7×7=3 9×9×9=9
a^4 1×1×1×1=1 3×3×3×3=1 7×7×7×7=1 1×1×1×1=1

其中,

  • 我们规定a0≡1(mod10)
  • 所有a^(φ(10)) 的结果都为1,即有a^(φ(n))≡1(mod10)。(根据前面的介绍可知这里的φ(10)=(2−1)×(5−1)=4)
  • 对于3和7来说,他们的a^0 、a^1 、a^2 、a^3 刚好把1,3,7,9各得到了一遍。到a^4时刚好又回到了1,如果大于4之后,又会开始循环
    在模n的情况下一定能找到一个数g,使得g^0 、g^1 、g^2 、……g^(φ(n)−1)
    刚好把所有与n互质并且小于n的数各得到一遍。我们把满足这种条件的数称为 生成元
2. 当模数为质数p的时候

当模p为质数的时候,我们假设p=7时。
同样求小于 p的数 a的负数 x使得(a+x)≡0(mod10)有如下表

a 1 2 3 4 5 6
x 6 5 4 3 2 1

而求a的倒数时,因为p是质数,所有小于p的数都和它互质。所以,所有小于p
的数a都能找到它的倒数a^(−1)。它的欧拉函数φ(n)=p−1。

a 1 2 3 4 5 6
a^(-1) 1 4 5 2 3 6

它同样有模数为合数n时的性质
1.这些数在同余运算规则下进行乘法运算,同样具有封闭性
2.任意的a求幂依然满足aφ(n)=1的规则,且同样有生成元

3. 离散对数问题

前面我们得到了有这么一个结论:
在模n的情况下一定能找到一个数g,使得g^0, g^1 ,g^2 、……g^(φ(n)−1)刚好把所有与n互质并且小于n的数各得到一遍。我们把满足这种条件的数称为生成元
那么,在模n的条件下,给定它的生成元g,以及一个小于n的正整数a。通过一个叫做同余幂的算法能够快速的算出g^a的值,我们把算得的结果记为b。 即我们在模n的条件下,能够快速的算出b=g^a的值。
由于生成元的特性,我们知道,在模n的条件下,给定生成元g,以及b的值,一定存在一个小于n的正整数a,使得b=g^a。那么如何求a的值?
我们发现,这个问题没有任何规律。例如,当n=11,g=2时,有如下表

g 2 2 2 2 2 2 2 2 2 2 2
b=g^a 1 2 3 4 5 6 7 8 9 10 1
a 0 1 8 2 4 9 7 3 6 5 10

在实数计算中,我们知道当b=g^a时,a=logbg
。然而这个计算在模n的条件下非常困难。这样一个问题被称为离散对数问题。在目前的技术条件下,这是一个极为困难的计算。当这个n值达到十进制两三百位时,即便是有大型计算机的情况下,所要花费的时间依然是个天文数字

4.RSA原理

当n=p×q,p与q是两个大质数。只知道n的值,想要计算p和q,这是一个世界性的极为困难的数学难题。RSA的基础就是基于的n的两个质数分解难题。
具体过程如下:

  • Alice选择两个大质数p和q,求得n=p×q。计算φ(n)=(p−1)×(q−1),接下来,Alice选择一个与φ(n)互质的数e,并计算e^(−1)在模为φ(n)下的值,将计算出的值记为s。
    我们知道,e与φ(n)互质,所以一定存在e^(−1), 这一步,service 就算出了公钥和私钥,其中,公钥为(e,n),私钥为(s,n)
  • 接下来,Bob可以在非安全信道请求Alice获得公钥。Evl通过中间攻击,只能获得(e,n),以及密文D。假定Bob需要发送的内容为m,计算D=m^e(modn),然后把D发送给Alice
  • Alice收到D之后,计算m^ (e ^ (1/e))(modn)=m^ (e×1/e)(mod n)≡m(modn)

其中,在不安全信道中传输的是n和e。然而,p和q只有Alice才知道,即便Eval获得了n,基于质数分解难题,他无法算出p和q,也就无法算出私钥s来揭秘被加密的消息。
且,m不能是大于n的数,当m大于n时可以拆分之后分段加密。

举个例子吧

  • 假设取两个质数p=11, q=13,那么n=143. φ(n)=(p−1)×(q−1)=120。 随意选取一个和φ(n)互质的数e,假定这个数字为7,即e=7, 那么e(−1)=63,使得e×e(−1)再模φ(n)等于1,即e×e^(−1)≡1(modφ(n)),即7×63=441≡1(mod120).
  • 公钥为(e,n),即(7,143)。 私钥为(s,n), 即(63,143)。 要加密的原始数据为m,假设m=13。(计算机中任何数据,最后传输或者保存都会转换成二进制的数据)
  • 加密过程:Bob请求Alice,获得公钥,密文为D, D=13^7(mod143)=117。 Bob将D传输出去
  • Evl通过中间攻击,只能获得(e,n),以及密文 D
  • 解密过程:Alice获得D,通过只有Alice才有的私钥进行解密。117^63(mod143)=13,获得了原始数据。

这里的11和13比较小,知道公钥为(7,143)之后,容易将143做因式分解求的11与13,从而可以算出e^(−1)。但是当p和q是两个非常大的的质数的时候,就很难将其分解出来。 这样,就无法算出e^(−1)。从而不能从密文中获得原始数据。

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