赞
踩
1、加密算法
常见的加密算法通常分为分组加密算法与流密码加密算法。
分组加密算法基于“分组”(block)进行操作,根据算法的不同,每个分组的长度可能不同。分组加密算法的代表有:DES、3-DES、Blowfish、IDEA、AES等。
下图演示了一个使用CBC模式的分组加密算法的加密过程:
流密码加密算法,则每次只处理一个字节,密钥独立于消息之外两者通过异或实现加密与解密。流密码加密算法的代表有RC4、ORYX、SEAL等。
下图演示了流密码加密算法的加密过程。
根据攻击者能获取的信息,将加密算法的攻击分为:
已知:
C1=EK ( P1 ),C2=EK( P2 ),……,Ci=EK(Pi)
推导出:
P1,P2,……,Pi,K或者找出一个算法从Ci+1=EK(Pi+1 )推出Pi+1
已知:
P1,C1=EK ( P1 ),P2, C2=EK(P2 ) ,……, Pi,Ci=EK( Pi) ,
推导出:
密钥k,或从Ci+1=EK(Pi+1 )推出Pi+1
已知:
P1,C1=EK ( P1 ),P2, C2=EK(P2 ) ,……, Pi,Ci=EK( Pi) ,其中P1,P2,……, Pi是由密码分析者选择的。
推导出:
密钥k,或从Ci+1=EK(Pi+1 )推出Pi+1
2、Stream Cipher Attack
流密码的加密是基于异或(XOR)操作进行的,每次都只操作一个字节。
3、Reused Key Attack
在流密码的使用中,最常见的错误便是使用同一个密钥进行多次加密/解密。这使得破解流密码变得非常简单,这种攻击称为“Reused Key Attack”,攻击者不需要知道密钥即可还原出明文。
为了增强攻击难度,IV应随机。
4、Bit-flipping Attack
当攻击者在不知道明文情况下,通过改变密文,使得明文按其需要的方式发生改变的攻击方式,被称为Bit-flipping Attack。解决方法是验证密文的完整性:
5、WEP破解
一种最著名的针对流密码的攻击可能就是WEP密钥的破解。
WEP在加密过程中,有两个关键因素
实际破解WEP的步骤(Aircrack实现):
6、ECB模式的缺陷
分组加密算法来说,常见的加密模式有:ECB、CBC、CFB、OFB、CTR等。
ECB模式(电码薄模式)是最简单的一种加密模式,它的每个分组之间相对独立,其加密过程:
但问题也在分组上,对调任意分组的密文,经过解密后,得到的明文顺序也是经过对调的。
CBC(链式加密模式)的分组前后之间会互相关联,一个字节变化,会导致整个密文发生变化。
当需要加密的明文多于一个分组的长度时,应该避免使用ECB。
7、密钥管理
密码学有个基本原则:密码系统的安全性应该依赖于密钥的复杂性,而不应该依赖于算法的保密性。
密钥管理中最常见的错误,就是将密钥硬编码在代码里。对于web应用来说,常见的做法是将密钥(包括密码)保存在配置文件或者数据库中。另外,密钥所在的配置文件或数据库需要严格的控制访问权限,同时也要确保运维或DBA中具有访问权限的人越少越好。
8、伪随机数
伪随机数问题:伪随机数不够随机。
伪随机数,是通过一些数字算法生成的随机数,并非真正的随机数。真正的随机数,是通过一些物理系统生成的随机数。
不要把时间函数当成随机数使用,很容易被猜解。
伪随机数是由数学算法实现的,它真正随机的地方在于“种子"(seed)。种子一旦确定后,在通过同一伪随机数算法计算出的随机数,其值是固定的,多次计算所得的值的顺序也是固定的。
9、使用安全的随机数
在重要或者敏感的系统中,一定要使用足够强壮的随机数生成算法。
10、小结
加密算法的最佳实践:
当你不知道该如何选择时,有以下建议:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。