常见的中间人攻击方式

    窃听

    数据注入

会话劫持

数据加密方法

对称加密

非对称加密(公钥加密)

单项加密

密钥交换

两种机制:DH 

          Public key encryption KE 此机制密钥交换比较常用

对称加密

加密方和解密方使用同一个密钥,优点是加密解密速度较快,适合于实现大段数据的加密。

发送方将数据用密码加密,接受方得到密码,将数据进行解密。

公钥加密

每个用户都有一对密钥(公钥和私钥),若公钥加密,则需与之配对的私钥来解密,反之,则需与之配对的公钥来解密。

用对方的公钥加密的数据,自己没法解密,只有对方的私钥可以解密。

数据发送方获得接收方的公钥,用接收方的公钥对数据进行加密,把数据发送给接收方,接收方用自己的私钥对数据进行解密。

但公钥加密速度非常慢,大概比对称加密慢上1000倍,因为密钥长度很长。加密效率低,所以,公钥加密一般不是用来实现数据加密的,而是要实现一定意义上的密钥交换。但此密钥交换仍不可靠。 

为了更安全的发送数据,发送方首先生成一个对称密钥,用对称密钥对数据进行加密,然后获得接收方的公钥,用公钥将之前生成的对称密钥进行加密,将加密后的对称密钥放在数据的后面,与数据一起发送给接收方,接收方用自己的私钥对对称密钥进行解密,然后再用对称密钥对数据进行解密。此方法也不是很安全,因为第三方可以把数据劫持下来,将数据篡改后再发给接收方,接受方变不能读取数据了。

单项加密:可以获取数据特征码

特征1定长输出2不可逆3雪崩效应/蝴蝶效应(输入数据发生的改变,就会导致输出数据的巨大改变)

那如何让接收方知道数据有没有被篡改过呢?

发送方先单项对数据加密计算数据,生成一段特征码,放到数据的后面,为了保证特征码不会被第三方所篡改,便用自己的私钥将特征码进行加密(作用:可以保证数据的完整性,也可以声明发送方的身份,身份验证实现),任何人不能冒名顶替其他人的身份实现数据传输了,不能冒名顶替的这段信息就是签名,保证数据就是发送方发送的叫数字签名,数字签名并不能保证数据本身的保密性,但若想冒名顶替确实不可以的。发送方用自己的私钥将特征码进行加密,接收方若能解密,并且可以用同样的方法对数据进行单项加密,获得一段特征码,两个特征码一样,则数据完整性的到保证。但上述过程中数据的加密却不能够实现了。

若把三种机制结合起来,该如何实现

发送方如何加密:发送方为了保证数据不会被第三方篡改,数据的完整性得到保证,发送方用单项加密的方法得到数据的特征码为了保证发送方的身份,不会被第三方冒名顶替,发送方用自己私钥加密特征码,结果附加在数据的后面;同时,又为了保证数据的保密性,只能被接收方看到,发送方会用对称加密的算法生成一段密码(对称密钥)(谨记,此时一定能用公钥加密,因为加密速度太慢),用生成的密码将整个数据(包括数据后附加的特征码)进行加密;这时,整个数据变成了一个密文,接收方就必须得知道对称加密的密码,发送方此时用接收方的公钥去加密这段密码,然后附加在整个数据的后面,一起发送给接收方。

接收方如何解密:接收方解密的过程与发送方加密的过程正好相反。接收方首先用自己的私钥解密最后附加在数据后的那段密码,得到整个数据(包含特征码),再用发送方的公钥去解密特征码,若能解密,则发送方的身份得到验证。然后再用发送方获取特征码的方法计算数据部分的特征码,比较两者,若相同,数据的完整性得到验证。

数据的保密性、完整性和发送方的身份都得到验证。但此方法还是有漏洞,第三方可以冒充接收方的身份向发送方发送公钥,从而数据被第三方得到。

加密算法:

1对称加密常用算法

DES:(Data Encryption Standard

3DES:加密三次,比较常用

AES: 真正的DES的替代者,高级加密标准

Blowfish

  加密工具:

openssl enc

gpg:是一个pgp工具,遵循pgp规范

2公钥加密常用算法

公钥可以做签名,

可以实现加密和签名:RSA     ELGamal

只可以支持签名: DSA(数据签名算法)

  加密工具:

gpg

openssl rsautl

3单向加密常用算法

MD5:  定长输出128

SHA1: 定长输出160,更安全的是256

CRC-32:  循环冗余校验码,严格来说不能算是单项加密算法

  加密工具:

md5sum   计算文件MD5格式的校验码  

sha1sum   计算文件SHA1格式的校验码

opensssl dgst