首页 > 代码库 > 《白帽子讲WEB安全》学习笔记之第11章 加密算法与随机数
《白帽子讲WEB安全》学习笔记之第11章 加密算法与随机数
第11章 加密算法与随机数
11.1 概述
攻击密码系统的方法
密码分析者攻击密码系统的方法主要有以下三种:
(1)穷举攻击
所谓穷举攻击是指密码分析者采用依次试遍所有可能的密钥对所获密文进行解密,直至得到正确的明文.
(2)统计分析攻击
所谓统计分析攻击就是指密码分析者通过分析密文和明文的统计规律来破译密码。
(3)数学分析攻击
所谓数学分析攻击是指密码分析者针对加解密算法的数学基础和某些密码学特性,通过数学求解的方法来破译密码。
破译密码的类型
(1)唯密文攻击(Ciphertext-only attack)
已知:
C1=EK ( P1 ),C2=EK( P2 ),……,Ci=EK(Pi)
推导出:
P1,P2,……,Pi,K或者找出一个算法从Ci+1=EK(Pi+1 )推出Pi+1
(2)已知明文攻击(Know-plaintext attack)
已知:
P1,C1=EK ( P1 ),P2, C2=EK(P2 ) ,……, Pi,Ci=EK( Pi) ,
推导出:
密钥k,或从Ci+1=EK(Pi+1 )推出Pi+1
(3)选择明文攻击(Chosen-plaintext attack)
已知:
P1,C1=EK ( P1 ),P2, C2=EK(P2 ) ,……, Pi,Ci=EK( Pi) ,其中P1,P2,……, Pi是由密码分析者选择的。
推导出:
密钥k,或从Ci+1=EK(Pi+1 )推出Pi+1
(4)自适应选择明文攻击(Adaptive-chosen-plaintext attack)
(5)选择密文攻击(Chosen-ciphertext attack)
(6)选择密钥攻击(Chosen-key attack)
(7)软磨硬泡攻击
11.6 密钥管理
密钥的保密性比算法的保密性重要多了。密钥最好是动态的,会定期更新。
11.7 伪随机数问题
在Java中使用java.util.Random是不安全的,因为其是使用系统时间的作为种子生成的伪随机数。在种子相同的情况下,其生成的随机数的顺序都是相同的。
java.security.SecureRandom是安全随机数,可以在项目中使用。
加密算法的最佳实践:
q 不要使用ECB模式
q 不要使用流密码
q 使用HMAC-SHA1代替MD5(甚至代替SHA1)
q 不要使用相同的key做不同的事
q salts与IV需要随机产生
q 不要自己实现加密算法,尽量使用稳定的加密库
q 不要依赖于系统的保密性
本文出自 “梦朝思夕” 博客,请务必保留此出处http://qiangmzsx.blog.51cto.com/2052549/1859557
《白帽子讲WEB安全》学习笔记之第11章 加密算法与随机数