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

一 , 概述

在现代密码学诞生以前,就已经有很多的加密方法了。例如,最古老的斯巴达加密棒,广泛应用于公元前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 a 0 1 2 3 4 5 6 7 8 9
x x x 0 9 8 7 6 5 4 3 2 1

那么, 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 a 1 2 3 4 5 6 7 8 9
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值