加密算法主要分为两大类:对称加密和非对称加密
对称加密算法
发送者和接受者共享相同的密钥,密钥长度一般在40-256bit之间。
常见的对称加密算法有DES、3DES、AES、RC4
DES(DataEncryption Standard),于1975年由IBM开发,使用固定56bit长度的密钥,基于加密密钥进 行一系列的移换位操作,由于只是使用了简单的逻辑操作,很容易使用硬件实现加速
DES有两种模式的块加密方式:
1、ECB mode(Electronic CodeBook,电子密码本)
相同的明文产生相同的密文;这种模式容易遭受字典攻击
2、CBC mode(Cipher Block Chaining,加密块链接)
加密前,将当前的明文块与一个IV字段进行异或操作
3DES(Triple DES),基于DES,密钥长度放大3倍,168bit长度;算法强度更好
AES(Advanced Encryption Standard),在密码学中又称Rijndael加密法,但AES和Rijndael又不尽相同,Rijndael加密法可以支持更大范围的区块和密钥长度:AES的区块长度固定为128比特,密钥长度则可以是128,192或256比特;而Rijndael使用的密钥和区块长度可以是32位的整数倍,以128位为下限,256比特为上限。AES的软件和硬件运行效率均非常高,广泛用于对无线和语音的加密
对称加密的特点:
1、对称加密算法加密数据速度快,而且紧凑
2、明文传输共享密钥,容易出现中途挟持和窃听的问题
3、密钥数量以参与者平方的速度增长,当数量过多时,不便管理和储存
4、不支持数字签名和检验数据的不可否认性
非对称加密算法
使用一对密钥进行加密和解密,这一对密钥为公钥和私钥,用其中一个密钥加密的数据只能用另一个密钥来解密,密钥长度一般在512-2048bit之间,非对称加密算法的加密速度较慢,一般用来加密很小的数据,两大用途:数字签名和密钥交换.
在一对密钥中,公钥可由私钥导出,但公钥无法导出私钥
发送方用自己的私钥加密数据,可以实现身份验证
发送方用对方的公钥加密数据,可以保证数据机密性
常用的非对称加密算法有RSA、DSA、ECC
RSA:由RSA公司发明,是一个支持变长密钥的公共密钥算法,需要加密的文件块的长度也是可变的
RSA加密解密过程
DSA是一种标准的数字签名算法
ECC与RSA相比,有极大的优势,主要表现在:
1、抗攻击性更强
2、计算量小,处理速度快
3、存储空间占用小
散列算法
散列算法是对数据进行提炼,生成数据的特征码,保证数据的完整性
散列算法的特点
1. 固定大小
散列函数可以接收任意大小的数据,但输出的散列值长度是固定的
2. 雪崩效应
原始数据就算修改一个bit,计算得到的散列值也会发生巨大的改变
3. 单向性
只能从原始数据计算得到散列值,无法从散列值求出原始数据
4. 冲突避免
两个不同数据计算得到的散列值必然不相同
常见的散列算法
MD5,一种单向散列算法,非可逆,相同的明文产生相同的密文。使用128bit固定输出
SHA-1,可以对任意长度的数据运算生成一个160位的数值,与MD5相比,SHA-1具有更强的安全性,但运行速度比MD5慢
DH 协议(Diffie-Hellman)
DH协议是一种密钥协商协议,通信双方不在互联网上直接传送密钥,而是经过一系列数据的交换,最后计算出双方共享的密钥,大大提高的通信的安全性
原理:
DH基于大素数的数学难题:现有g b p三个数,其中c为一个大素数,则已知p、g和g^b%p无法推出b。
A、B通信双方约定一个初始数g和一个大素数p
A生成一个保密的随机数x,并计算g^x%p
将g^x%p的值发送给B
B生成一个保密的随机数y,并计算g^y%p
B将g^y%p的值发送给A
A计算(g^y%p)^x的值并将其作为通信的密钥
B计算(g^x%p)^y的值并将其作为通信的密钥
在整个密钥协商的过程中,g、p、g^x%p、g^y%p是公开的,而x、y是保密的,所以第三方无法计算出密钥
在互联网中,通信过程一般有下面2种:
一、
A和B拿到彼此的公钥
双方通过DH协商产生密钥;
A通过计算产生要发送数据的特征码,用自身私钥加密特征码
用经过协商得到的对称密钥加密数据和特征码,保证了通信的私密性、完整性和身份验证
二、
A和B拿到彼此的公钥;
A通过计算产生要发送数据的特征码,用自身私钥加密特征码
用随机数加密数据和特征码
用B的公钥加密随机数,一并打包发送到b,保证了通信的私密性、完整性和身份验证