一 , 概述

在现代密码学诞生以前,就已经有很多的加密方法了。例如,最古老的斯巴达加密棒,广泛应用于公元前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原理

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

整数运算

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

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

同余运算

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

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

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

1. 当模数为合数nnn时

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

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

那么在同余运算中

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

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

aaa 0 1 2 3 4 5 6 7 8 9
xxx 0 9 8 7 6 5 4 3 2 1

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

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

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

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

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

aaa 1 2 3 4 5 6 7 8 9
a−1a^{-1}a−1 1 不存在 7 不存在 不存在 不存在 3 不存在 9

有什么规律呢?

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

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

即当n=p×qn=p\times qn=p×q ,且ppp和qqq都为质数时,有φ(n)=(p−1)×(q−1)\varphi(n)=(p-1)\times(q-1)φ(n)=(p−1)×(q−1), 那么就有φ(10)=(2−1)×(5−1)=4\varphi(10)=(2-1)\times(5-1)=4φ(10)=(2−1)×(5−1)=4

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

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

    例如对于1:1×1≡1(mod10)1\times1\equiv 1\pmod{10}1×1≡1(mod10), 1×3≡3(mod10)1\times3\equiv 3\pmod{10}1×3≡3(mod10), 1×7≡7(mod10)1\times7\equiv 7\pmod{10}1×7≡7(mod10), 1×9≡9(mod10)1\times9\equiv 9\pmod{10}1×9≡9(mod10)

    对于3:3×1≡3(mod10)3\times1\equiv 3\pmod{10}3×1≡3(mod10), 3×3≡9(mod10)3\times3\equiv 9\pmod{10}3×3≡9(mod10), 3×7≡1(mod10)3\times7\equiv 1\pmod{10}3×7≡1(mod10), 3×9≡7(mod10)3\times9\equiv 7\pmod{10}3×9≡7(mod10)

    对于7:7×1≡7(mod10)7\times1\equiv 7\pmod{10}7×1≡7(mod10),7×3≡1(mod10)7\times3\equiv 1\pmod{10}7×3≡1(mod10),7×7≡9(mod10)7\times7\equiv 9\pmod{10}7×7≡9(mod10),7×9≡3(mod10)7\times9\equiv 3\pmod{10}7×9≡3(mod10)

    对于9:9×1≡9(mod10)9\times1\equiv 9\pmod{10}9×1≡9(mod10),9×3≡7(mod10)9\times3\equiv 7\pmod{10}9×3≡7(mod10),9×7≡3(mod10)9\times7\equiv 3\pmod{10}9×7≡3(mod10),9×9≡1(mod10)9\times9\equiv 1\pmod{10}9×9≡1(mod10)

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

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

    aaa 1 3 7 9
    a0a^0a0 1 1 1 1
    a1a^1a1 1 3 7 9
    a2a^2a2 1×1=11\times1=11×1=1 3×3=93\times3=93×3=9 7×7=97\times7=97×7=9 9×9=19\times9=19×9=1
    a3a^3a3 1×1×1=11\times1\times1=11×1×1=1 3×3×3=73\times3\times3=73×3×3=7 7×7×7=37\times7\times7=37×7×7=3 9×9×9=99\times9\times9=99×9×9=9
    a4a^4a4 1×1×1×1=11\times1\times1\times1=11×1×1×1=1 3×3×3×3=13\times3\times3\times3=13×3×3×3=1 7×7×7×7=17\times7\times7\times7=17×7×7×7=1 1×1×1×1=11\times1\times1\times1=11×1×1×1=1

    其中,

    • 我们规定a0≡1(mod10)a^0\equiv 1\pmod{10}a0≡1(mod10)

    • 所有aφ(10)a^{\varphi(10)}aφ(10)的结果都为1,即有aφ(n)≡1(mod10)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)=(2−1)×(5−1)=4)

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

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

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

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

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

aaa 1 2 3 4 5 6
xxx 6 5 4 3 2 1

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

如下表

aaa 1 2 3 4 5 6
a−1a^{-1}a−1 1 4 5 2 3 6

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

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

3. 离散对数问题

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

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

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

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

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

ggg 2 2 2 2 2 2 2 2 2 2 2
b=gab=g^ab=ga 1 2 3 4 5 6 7 8 9 10 1
aaa 0 1 8 2 4 9 7 3 6 5 10

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

4.RSA原理

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

具体过程如下:

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

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

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

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

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

举个例子吧

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

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

对称加密与非对称加密,以及RSA的原理相关推荐

  1. 对称加密、非对称加密、RSA、消息摘要、数字签名、数字证书与 HTTPS 简介

    文章目录 1.加密算法简介 1.1 对称加密(Symmetric Key Algorithms) 1.2 非对称加密(Asymmetric Key Algorithms) 1.3 非对称加密 RSA ...

  2. 对称加密、非对称加密、DES、AES、RSA、OpenSSL、数字签名、防篡改

    本公众号分享的所有技术仅用于学习交流,请勿用于其他非法活动,如果错漏,欢迎留言指正 <加密与解密>第4版 加解密 安全领域的重要分支和基础设施 互联网重要数据的传输需要加解密 TCP/IP ...

  3. 对称加密和非对称加密介绍和区别

    什么是对称加密技术? 对称加密采用了对称密码编码技术,它的特点是文件加密和解密使用相同的密钥,即加密密钥也可以用作解密密钥,这种方法在密码学中叫做对称加密算法,对称加密算法使用起来简单快捷,密钥较短, ...

  4. 【上】安全HTTPS-全面详解对称加密,非对称加密,数字签名,数字证书和HTTPS

    此文章转载来源于http://blog.csdn.net/tenfyguo/article/details/40922813点击打开链接 一,对称加密 所谓对称加密,就是它们在编码时使用的密钥e和解码 ...

  5. 对称加密、非对称加密深度解析

    密码学的发展 加密的发展史随着人类的进化逐步复杂.严谨也更安全,对于早期的移位和字母对应等加密方式我们不难理解. 移位 : 比如恺撒密码, 简单点说将 26个英文字母的顺序打乱,得到一个新的字母顺序, ...

  6. 网络协议从入门到底层原理(7)网络安全 - 常见攻击、单向散列函数、对称加密、非对称加密、混合密码系统、数字签名、证书

    网络安全 网络层 - ARP欺骗 DoS.DDoS 介绍与防御 传输层 - SYN洪水攻击(SYN flooding attack) 传输层 - LAND攻击 应用层 - DNS劫持.HTTP劫持 H ...

  7. IPSEC对称解密以及非对称加密

    **IPSEC对称加密:**对称加密是我跟你之间共享一把相同的秘钥,我们用相同的秘钥去做加密去做解密,在发送数据前我用秘钥加密数据,这数据加密后就变成乱码,这样发保证数据的私密性,接收方接收到数据之后 ...

  8. JackHttp -- 浅谈编码、加密(对称加密,非对称加密,Hash算法)

    如果你还不清楚 JackHttp 是什么,请戳这里!!! JackHttp 是一个网络框架系列,为什么还要分享编码和加密呢?主要有如下几个原因: HTTP 在网络传输过程中是明文的. HTTP 在网络 ...

  9. 对称加密和非对称加密,数字签名和证书

    目录 如何加密解密? 对称加密(对称密码) 非对称加密(公钥密码) 对称加密 DES 3DES AES 密钥配送问题 如何解决密钥配送问题 非对称加密 公钥.私钥 解决密钥配送问题 RSA 混合密码系 ...

最新文章

  1. ASP.NET管理状态的十种途径
  2. 可操作性强!Python实现一个电影订票系统!
  3. BIOS英文报错详解;你虽会做系统,但你会看BIOS英文报错吗,仅供大家参考学习。...
  4. LiveVideoStackCon 2020上海 6月见
  5. 可以获得索引值码_SEO优化细节,怎样优化才能让网站获得更好的排名?
  6. 单例初始化(MRC模式之autorelease)
  7. 软件工程-图书馆管理系统
  8. TcPlayer腾讯播放器
  9. 启动tomcat服务器,struts2报此错:org.apache.catalina.core.StandardContext.filterStart Exception starting filt
  10. Grounded theory相关知识
  11. cocos2d-x android 直接加载下载到sd的zip里的资源文件(一)
  12. linux 2048移动代码,2 的威力,Linux 的威力:终端中的 2048
  13. List集合中 中contains方法的使用详解
  14. linux qq java_Java实现QQ登陆界面
  15. postfix + dovecot + mysql 创建虚拟用户(二)
  16. 基于vue的图片裁剪插件vue-cropper
  17. 删除iPhone邮箱smtp服务器,如何在iPhone上删除电子邮件帐户-万兴恢复专家
  18. PaddlePaddle 系列之三行代码从入门到精通
  19. python读取csv指定行_Python 读取csv的某行
  20. Latex和Markdown中的数字字体和数学符号

热门文章

  1. SBUS协议(20200210)
  2. windows凭据管理
  3. 南京都昌公司乔迁之志
  4. latex大括号 多行公式_如何快速入门 LaTeX,在 XMind 2020 中轻松输入方程。
  5. MathType怎么编辑等号带点
  6. CentOS7.9安装教程,以及出现dracut- initqueue timeout-starting…starting timeout scripts 解决办法,linux配置静态IP地址
  7. 计算2个时间段的重叠天数
  8. 2022年分享一些好用的内网穿透软件
  9. PreScan 教程:0. PreScan与Matlab连接
  10. Angular primeng tree 组件数据解析(适用于Angular2+)