学习笔记:白帽子讲web安全11章:加密算法和随机数

看书之前对加密算法是有基本概念了解的。通过学习有了更加的了解,把自己get的点记录一下,其中代码部分没有逐行学习。

分组加密算法和流加密算法

加密算法分为两种:分组加密和流加密。

  • 分组是基于block进行操作,根据算法不同,每个分组的长度可能不同,代表算法DES,3DES,AES。IDEA,
  • 流加密是每次处理一个字节,秘钥是独立于消息之外的,通过异或实现加密和解密。代码算分RC4,SEAL

流秘钥攻击

  •  reused key attack。多次用同一个秘钥加解密,这种情况下,攻击者不需要知道秘钥就可以还原明文  E(A)xor E(B) = A xor B, 这个公式里面,四个中知道3就能算出第四个了,所以即使不知道秘钥也可以实施破解
  • 一次一密。就是初始化向量,防止resued key attack。使用随机的初始化向量,增加了破解的难度,从而增加了安全性。但是如果初始化向量不够随机,攻击者仍然可能实施破解
  • bit flipping attack。修改密文的某个字节,导致另一组明文字节发生变化。  E(A)xor E(B) = A xor B ->A xor E(A) xor b = E(b)可以看出如果我们知道ab的明文,a的密文,可以推导出b的密文。
    • 解决的方式是,验证密文完整性,增加带key的mac消息,通过mac验证密文是否被篡改
    • 通过哈希实现的MAC,就是HMAC,性能较好,被广泛应用。
    • 不知道key的情况下,就不能实现bit flipping攻击

分组加密算法缺陷攻击

  • 分组加密的共识:ECB,CBC,CFB
  • 加密模式被攻击,不管秘钥多长,都不安全
  • ECB 缺陷,对调分组密文,解密后,明文也是对调的。ECB没有混淆分组之间的关系,分组足够多的时候,会暴露一些隐私信息。
  • 多于一个分组的时候,避免使用ECB
  • 针对CBC模式的padding oracle attack,在不知道秘钥的前提下,通过padding bytes尝试,还原明文。是一种边信道攻击

秘钥管理

基本原则:安全性依赖于秘钥复杂性,而不是算法保密性

难的是秘钥管理

秘钥管理常见错误,秘钥硬件编码。预防措施

  • 通过DH交换体系,生成撕咬来完成秘钥分发
  • 改善秘钥体系来保护秘钥
  • 对于web应用,秘钥保存在配置文件或者数据库里面,程序读出秘钥并加载到内存,配置文件或者数据库实施严格的访问控制权限,
  • 定期更换秘钥
  • 只加载到内存,动态获取

伪随机数的问题

  • 前面一次一密提到随机数增加安全性,但应防止一些伪随机。通过数学算法生成的随机,并非真的随机。真的随机是通过wuli系统生成的,如,电压,电磁波。。
  • 弱伪随机会被遍历出来,具有安全的风险。web应用中,key,sessionID,token如果使用了弱伪随机,可能导致严重安全问题。
  • 不要把时间函数当成随时数
  • 使用安全的随机数
    • 足够强壮的随机数生成算法
    • 多个随机数的组合,增加复杂性

web安全关注

  • 好的加密算法
  • 秘钥管理
  • ​​​​​​​强壮的随机数

你可能感兴趣的