常见的中间人攻击方式:
窃听
数据注入
会话劫持
数据加密方法:
对称加密
非对称加密(公钥加密)
单项加密
密钥交换:
两种机制: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