网络安全(2)-数据加解密

    以前讲了身份认证,身份认证可让咱们确认收到的数据来自正确的发送者。可是传送的数据在通过中间节点的时候(或者在无线信道下并不须要通过中间节点,只要可以收到信号)可能会被偷听者收到,咱们并不能阻止数据包被偷听者获取,由于数据包在在网线上或无线信道上传输,任何人都有可能经过信号接收设备获取传输的模拟信号,从而进一步解析获得以太网帧(或其余链路层协议帧)、IP报文、UDP/TCP报文、应用层数据.... 
    咱们能作的就是让偷听者即便获取了咱们传输的数据,也没法知道咱们传的究竟是什么,即对数据进行加密。
html

数据加解密

    数据加解密算法分为两类:对称性加解密和非对称性加解密,前者如AES,DES,后者如RSA。算法

对称性加解密

    对称性加解密的加密和解密相同的密钥,且能经过加密算法推导出解密算法,或者经过解密算法推导出加密算法。这种作法加解密速度快,适合于对大量数据进行加解密,但密钥管理困难(防止偷听者获取密钥和加解密算法)。 
    好比一个简单的对称性加解密能够为:加密时将数据每一个字节都加3,解密时将每一个字节都减3.3就能够视为一个密钥,加减操做视为加解密算法。 
    对称性加解密不安全,缘由在于A和B之间要经过对称性加解密算法来进行加解密,他们就必须使用相同的算法以及密钥,而算法和密钥的协商也是须要传输数据包进行协商,协商的数据包被偷听者获取以后,偷听者就获取了加解密算法和密钥,从而在收到A或者B的数据以后能够对数据进行解密,固然也能够用加密算法加密本身的数据传给A或者B。
安全

非对称性加解密

    非对称性加解密须要两个密钥,公钥和私钥,使用公钥加密的数据只能用私钥解密,使用私钥加密的数据只能用公钥解密。 
    A若想和B通讯,A能够先生成一个公钥和私钥,而后将公钥发送给B,B经过公钥加密数据,而后发送给A,A经过私钥解密得到数据;而若是中间有C偷窥了B发送的数据,可是C没有A的私钥没法解密。一样,B生成一对公钥和私钥,公钥发送给A,A用公钥加密数据发送给B,B收到数据后用私钥解密,中间数据被C窃取,C也没法解密。 
    非对称性加解密相比于对称性加解密安全,由于密钥非对称,公钥随便公开,只要私钥不在网络上传输,别人即便得到公钥,窃取了加密后的数据,也没法解密。可是,非对称加解密的算法复杂度较高,对于实时性的数据加密压力较大。因此通常使用的数据加解密方法是,使用非对称性加解密方法传输对称性加解密算法的密钥,传输数据时,用对称性加解密方法加解密。 
    常见的非对称性加密算法如RSA算法,RSA是三我的共同提出的,因此以三我的的姓氏首字母命名。它是基于大数的因式分解的数学难题而提出的,对一个大数进行因式分解,其复杂度至关高。 
RSA加密算法的原理见:RSA算法原理1, RSA算法原理2
服务器

SSH 加密原理

    SSH安全协议是一种非对称加密和对称加密算法的结合。 
一、首先服务端会经过非对称加密,产生一个公钥和一个私钥 
二、在客户端发起请求时,服务端将公钥暴露给客户端,这个公钥能够被任意暴露 
三、客户端在获取公钥以后,会先产生一个由256位随机数字组成的会话密钥,称为口令 
四、客户端经过公钥将这个口令加密,发送给服务器端 
五、服务器端经过私钥进行解密,获取到通信口令 
六、以后客户端和服务端的信息传递,都使用这个口令进行对称的加密
网络

密钥交换算法

    若是要进行对称性加解密,通讯双方须要使用相同的加解密算法和密钥,那么双方如何协商他们使用的密钥呢?一种方式是双方使用RSA等非对称性加密算法进行密钥的交换,还有一些其余的密钥交换算法,好比DH密钥交换算法: 
    DH密钥交换算法是基于计算离散对数的难度(对于RSA算法是基于大数的因式分解的难度).
ssh

离散对数的概念: 
原根:若是a是素数p的一个原根,那么数值: 
a mod p,a^2 mod p,…,a^(p-1) mod p 
是各不相同的整数,且以某种排列方式组成了从1到p-1的全部整数。 
离散对数:若是对于一个整数b和素数p的一个原根a,能够找到一个惟一的指数 i,使得: 
b =(a的i次方) mod p 其中0 ≦ i ≦ p-1 
那么指数i称为b的以a为基数的模p的离散对数。 
Diffie-Hellman 算法的有效性依赖于计算离散对数的难度,其含义是:当已知大素数p和它的一个原根a后,对给定的 b,要计算 i ,被认为是很困难的,而给定 i 计算b 却相对容易。 
Diffie-Hellman算法: 
假如用户A和用户B但愿交换一个密钥。 
取素数p和整数a,a是p的一个原根,公开a和p。 
A选择随机数XA< p, 并计算 YA=a^XA mod p。 
B选择随机数XB< p,并计算 YB=a^XB mod p。 
每一方都将X保密而将Y公开让另外一方获得。 
A计算密钥的方式是:K=(YB) ^XA mod p 
B计算密钥的方式是:K=(YA) ^XB mod p 
证实: 
(YB)^ XA mod p = (a^XB mod p)^ XA mod p 
= (a^XB)^ XA mod p = (a^XA) ^XB mod p (<-- 密钥即为 a^(XA*XB) mod p) 
=(a^XA mod p)^ XB mod p= (YA) ^XB mod p 
因为XA和XB是保密的,而第三方只有p、a、YB、YA能够利用,只有经过取离散对数来肯定密钥,但对于大的素数p,计算离散对数是十分困难的。
加密

+
相关文章
相关标签/搜索