我们能做的就是让偷听者即使获取了我们传输的数据,也无法知道我们传的到底是什么,即对数据进行加密。
数据加解密
数据加解密算法分为两类:对称性加解密和非对称性加解密,前者如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,计算离散对数是十分困难的。