对称加密与非对称加密,以及RSA的原理

1 篇文章 0 订阅
1 篇文章 0 订阅

一 , 概述

在现代密码学诞生以前,就已经有很多的加密方法了。例如,最古老的斯巴达加密棒,广泛应用于公元前7世纪的古希腊。16世纪意大利数学家卡尔达诺发明的栅格密码,基于单表代换的凯撒密码、猪圈密码,基于多表代换的维吉尼亚密码,二战中德军广泛使用的恩格玛加密机…但最终都找到了有效的破解算法。

现代密码学的诞生标志是1977年1月由美国国家标准局公布的数据加密标准(Data Encryption Standard,DES)。
在经过20多年之后,为适应现代的安全要求,2000年美国国家和标准技术协会筛选和评测出了被称为AES(Advanced Encryption Standard)的加密算法作为新的加密标准。目前,AES已被广泛使用,且未发现致命缺陷。到目前为止,AES是一个安全的加密算法。

然而,在加密算法之外,面临一个问题,那就是:秘钥的分发。就是说,解密方如何获得加密方的秘钥呢? 从而出现了:对称加密和非对称加密。

二,对称加密和非对称加密

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 x x,并且有 x x x+(- x x x)=0;

他的倒数为 x − 1 x^{-1} x1 , 并且有 x × x − 1 x\times x^{-1} x×x1 =1;

同余运算

有整数a,b,正整数m。 假如a除以m余b。我们称为a模m同余b,模数为m。并且记为 a ≡ b ( m o d m ) a\equiv b\pmod{m} ab(modm) ,例如10除以3余1

我们称10模3同余1,记为 10 ≡ 1 ( m o d 3 ) 10\equiv 1\pmod{3} 101(mod3)

我们分别讨论模数为合数和质数情况下,基于同余运算的负数和倒数。

1. 当模数为合数 n n n

简单起见,我们讨论当 n n n为10的情况,10是两个质数乘积

当模数为10的时候,参与运算的都是小于10的数。因为大于10的数除模取余之后都会小于10,所以只需要考虑小于模的数。

那么在同余运算中

一个小于10的数a,他的负数 x x x是什么? 也就是说使得 ( a + x ) ≡ 0 ( m o d 10 ) (a+x)\equiv 0\pmod{10} (a+x)0(mod10) ; 那就是 n − a n-a na,即 x = n − a x=n-a x=na。这里的 x x x就像是常规运算下的-a。常规运算下 a + ( − a ) = 0 a+(-a)=0 a+(a)=0,我们说 − a -a a a a a的负数,这里 ( a + x ) ≡ 0 ( m o d 10 ) (a+x)\equiv 0\pmod{10} (a+x)0(mod10),我们说 x x x a a a的负数。;

a + ( n − a ) = a + ( − a ) + n = n ≡ 0 ( m o d n ) a+(n-a)=a+(-a)+n= n\equiv 0\pmod{n} a+(na)=a+(a)+n=n0(modn) 。 当 n = 10 n=10 n=10的时候 ,有如下表

a a a0123456789
x x x0987654321

那么, a a a的倒数 a − 1 a^{-1} a1是什么呢? 它要使得 a × a − 1 a\times a^{-1} a×a1在模数为n的情况下等于1,即 a × a − 1 ≡ 1 ( m o d n ) a\times a^{-1}\equiv 1\pmod{n} a×a11(modn)

n = 10 n=10 n=10的时候我们会发现,对于有的数我们可以找到它的倒数,有的数却找不到

例如当 a = 3 a=3 a=3,我们可以找到7,使得$3\times7= 21 \equiv 1\pmod {10} $ ;

而当a=4的时候,我们有 4 × 0 = 0 4\times0 = 0 4×0=0 4 × 1 = 4 4\times 1= 4 4×1=4 4 × 2 = 8 4\times2 = 8 4×2=8 4 × 3 = 12 4\times3= 12 4×3=12 4 × 4 = 16 4\times4 = 16 4×4=16 4 × 5 = 20 4\times5 = 20 4×5=20 4 × 6 = 24 4\times6 = 24 4×6=24 4 × 7 = 28 4\times7 = 28 4×7=28 4 × 8 = 32 4\times8 = 32 4×8=32 4 × 9 = 36 4\times9 = 36 4×9=36,在模10的情况下,都不会等于1。

我们对于所有小于10的 a a a都找他的倒数 a − 1 a^{-1} a1,有下表

a a a123456789
a − 1 a^{-1} a11不存在7不存在不存在不存在3不存在9

有什么规律呢?

数学界已证明:当 a &lt; n a&lt;n a<n时,只有当 a a a n n n互质才能找到 a − 1 a^{-1} a1。 同时还有以下结论,当 n = p × q n=p\times q n=p×q ,且 p p p q q q都为质数时,所有小于 n n n的数中,能找到倒数的个数为 ( p − 1 ) × ( q − 1 ) (p-1)\times (q-1) (p1)×(q1)个。如果n有更多的质因子,那么计算会更复杂点。

我们把所有小于n,并且能和n互质的数的总个数记为一个函数 φ ( n ) \varphi(n) φ(n) ,这个函数叫做欧拉函数。例

即当 n = p × q n=p\times q n=p×q ,且 p p p q q q都为质数时,有 φ ( n ) = ( p − 1 ) × ( q − 1 ) \varphi(n)=(p-1)\times(q-1) φ(n)=(p1)×(q1), 那么就有 φ ( 10 ) = ( 2 − 1 ) × ( 5 − 1 ) = 4 \varphi(10)=(2-1)\times(5-1)=4 φ(10)=(21)×(51)=4

同时这些数还有以下两个有趣的情况

  1. 这些数之间进行互乘的同余运算,结果还是这些数。

    例如对于1: 1 × 1 ≡ 1 ( m o d 10 ) 1\times1\equiv 1\pmod{10} 1×11(mod10), 1 × 3 ≡ 3 ( m o d 10 ) 1\times3\equiv 3\pmod{10} 1×33(mod10), 1 × 7 ≡ 7 ( m o d 10 ) 1\times7\equiv 7\pmod{10} 1×77(mod10), 1 × 9 ≡ 9 ( m o d 10 ) 1\times9\equiv 9\pmod{10} 1×99(mod10)

    对于3: 3 × 1 ≡ 3 ( m o d 10 ) 3\times1\equiv 3\pmod{10} 3×13(mod10), 3 × 3 ≡ 9 ( m o d 10 ) 3\times3\equiv 9\pmod{10} 3×39(mod10), 3 × 7 ≡ 1 ( m o d 10 ) 3\times7\equiv 1\pmod{10} 3×71(mod10), 3 × 9 ≡ 7 ( m o d 10 ) 3\times9\equiv 7\pmod{10} 3×97(mod10)

    对于7: 7 × 1 ≡ 7 ( m o d 10 ) 7\times1\equiv 7\pmod{10} 7×17(mod10), 7 × 3 ≡ 1 ( m o d 10 ) 7\times3\equiv 1\pmod{10} 7×31(mod10), 7 × 7 ≡ 9 ( m o d 10 ) 7\times7\equiv 9\pmod{10} 7×79(mod10), 7 × 9 ≡ 3 ( m o d 10 ) 7\times9\equiv 3\pmod{10} 7×93(mod10)

    对于9: 9 × 1 ≡ 9 ( m o d 10 ) 9\times1\equiv 9\pmod{10} 9×19(mod10), 9 × 3 ≡ 7 ( m o d 10 ) 9\times3\equiv 7\pmod{10} 9×37(mod10), 9 × 7 ≡ 3 ( m o d 10 ) 9\times7\equiv 3\pmod{10} 9×73(mod10), 9 × 9 ≡ 1 ( m o d 10 ) 9\times9\equiv 1\pmod{10} 9×91(mod10)

    如果一些数在互相运算之后,得到的结果还是这些数中,我们称这些数在这个运算条件下具有封闭性

  2. 对这些数进行求幂运算,并且再模10,结果如下表

    a a a1379
    a 0 a^0 a01111
    a 1 a^1 a11379
    a 2 a^2 a2 1 × 1 = 1 1\times1=1 1×1=1 3 × 3 = 9 3\times3=9 3×3=9 7 × 7 = 9 7\times7=9 7×7=9 9 × 9 = 1 9\times9=1 9×9=1
    a 3 a^3 a3 1 × 1 × 1 = 1 1\times1\times1=1 1×1×1=1 3 × 3 × 3 = 7 3\times3\times3=7 3×3×3=7 7 × 7 × 7 = 3 7\times7\times7=3 7×7×7=3 9 × 9 × 9 = 9 9\times9\times9=9 9×9×9=9
    a 4 a^4 a4 1 × 1 × 1 × 1 = 1 1\times1\times1\times1=1 1×1×1×1=1 3 × 3 × 3 × 3 = 1 3\times3\times3\times3=1 3×3×3×3=1 7 × 7 × 7 × 7 = 1 7\times7\times7\times7=1 7×7×7×7=1 1 × 1 × 1 × 1 = 1 1\times1\times1\times1=1 1×1×1×1=1

    其中,

    • 我们规定 a 0 ≡ 1 ( m o d 10 ) a^0\equiv 1\pmod{10} a01(mod10)

    • 所有 a φ ( 10 ) a^{\varphi(10)} aφ(10)的结果都为1,即有 a φ ( n ) ≡ 1 ( m o d 10 ) a^{\varphi(n)}\equiv 1\pmod{10} aφ(n)1(mod10)。(根据前面的介绍可知这里的 φ ( 10 ) = ( 2 − 1 ) × ( 5 − 1 ) = 4 \varphi(10)=(2-1)\times(5-1)=4 φ(10)=(21)×(51)=4)

    • 对于3和7来说,他们的 a 0 a^0 a0 a 1 a^1 a1 a 2 a^2 a2 a 3 a^3 a3刚好把1,3,7,9各得到了一遍。到 a 4 a^4 a4时刚好又回到了1,如果大于4之后,又会开始循环

    在模n的情况下一定能找到一个数 g g g,使得 g 0 g^0 g0 g 1 g^1 g1 g 2 g^2 g2、… g φ ( n ) − 1 g^{\varphi(n)-1} gφ(n)1刚好把所有与n互质并且小于n的数各得到一遍。我们把满足这种条件的数称为 生成元

2. 当模数为质数 p p p的时候

当模 p p p为质数的时候,我们假设 p = 7 p=7 p=7时。

同样求小于 p p p 的数 a a a 的负数 x x x 使得 ( a + x ) ≡ 0 ( m o d 10 ) (a+x)\equiv 0\pmod{10} (a+x)0(mod10)有如下表

a a a123456
x x x654321

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

如下表

a a a123456
a − 1 a^{-1} a1145236

它同样有模数为合数 n n n时的性质

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

3. 离散对数问题

前面我们得到了有这么一个结论:

在模n的情况下一定能找到一个数 g g g,使得 g 0 g^0 g0, g 1 g^1 g1 , g 2 g^2 g2、… g φ ( n ) − 1 g^{\varphi(n)-1} gφ(n)1刚好把所有与n互质并且小于n的数各得到一遍。我们把满足这种条件的数称为 生成元

那么,在模 n n n的条件下,给定它的生成元 g g g,以及一个小于 n n n的正整数 a a a。通过一个叫做同余幂的算法能够快速的算出 g a g^a ga的值,我们把算得的结果记为 b b b。 即我们在模 n n n的条件下,能够快速的算出 b = g a b=g^a b=ga的值。

由于生成元的特性,我们知道,在模 n n n的条件下,给定生成元 g g g,以及 b b b的值,一定存在一个小于 n n n的正整数 a a a,使得 b = g a b=g^a b=ga。那么如何求a的值?

我们发现,这个问题没有任何规律。例如,当n=11,g=2时,有如下表

g g g22222222222
b = g a b=g^a b=ga123456789101
a a a018249736510

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

4.RSA原理

n = p × q n=p\times q n=p×q p p p q q q是两个大质数。只知道 n n n的值,想要计算 p p p q q q,这是一个世界性的极为困难的数学难题。RSA的基础就是基于的n的两个质数分解难题。

具体过程如下:

  • Alice选择两个大质数 p p p q q q,求得 n = p × q n=p\times q n=p×q。计算 φ ( n ) = ( p − 1 ) × ( q − 1 ) \varphi(n)=(p-1)\times(q-1) φ(n)=(p1)×(q1),接下来,Alice选择一个与 φ ( n ) \varphi(n) φ(n)互质的数e,并计算$ e^{-1} 在 模 为 在模为 \varphi(n) 下 的 值 , 将 计 算 出 的 值 记 为 下的值,将计算出的值记为 s$。

    我们知道, e e e φ ( n ) \varphi(n) φ(n)互质,所以一定存在 e − 1 e^{-1} e1, 这一步,service 就算出了公钥和私钥,其中,公钥为( e e e n n n),私钥为( s s s n n n)

  • 接下来,Bob可以在非安全信道请求Alice获得公钥。Evl通过中间攻击,只能获得 ( e , n ) (e,n) (e,n),以及密文 D D D。假定Bob需要发送的内容为m,计算 D = m e ( m o d n ) D=m^e\pmod{n} D=me(modn),然后把D发送给Alice

  • Alice收到D之后,计算 m e ( e − 1 ) ( m o d n ) = m e × e − 1 ( m o d n ) ≡ m ( m o d n ) m^{e^{(e^{-1})}}\pmod{n}=m^{e\times e^{-1}}\pmod{n}\equiv m\pmod{n} me(e1)(modn)=me×e1(modn)m(modn).

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

举个例子吧

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

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

  • 14
    点赞
  • 94
    收藏
    觉得还不错? 一键收藏
  • 13
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值