我们能做的就是让偷听者即使获取了我们传输的数据,也无法知道我们传的到底是什么,即对数据进行加密。

数据加解密

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

对称性加解密

 
    对称性加解密不安全,原因在于A和B之间要通过对称性加解密算法来进行加解密,他们就必须使用相同的算法以及密钥,而算法和密钥的协商也是需要传输数据包进行协商,协商的数据包被偷听者获取之后,偷听者就获取了加解密算法和密钥,从而在收到A或者B的数据之后可以对数据进行解密,当然也可以用加密算法加密自己的数据传给A或者B。

非对称性加解密

RSA算法原理2

SSH 加密原理

 
6、之后客户端和服务端的信息传递,都使用这个口令进行对称的加密

密钥交换算法

 
    DH密钥交换算法是基于计算离散对数的难度(对于RSA算法是基于大数的因式分解的难度).

离散对数的概念: 
原根:如果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,计算离散对数是十分困难的。

+

相关文章: