《程序员密码学》读书笔记

文章目录
  1. DES被攻破的方法:差分密码分析,而AES可以抵抗这种攻击~
  2. 分组密码等同于伪随机置换(PRP ):伪随机置换就是由算法创建的一种对符号的重新排列,一个安全的PRP目标是:对于仅知道部分置换是不足以以一个有效的概率来确定置换的其他部分。
  3. 散列函数等同于伪随机函数(PRF):可以用来生成IV,key或者nonce 
  4. 从信息论的角度来看,AES加密时没有固定的时间,这回泄露内部状态的信息熵
  1. ECB模式之所以无法完全保证保密是基于这样一个事实:如果相同的明文分组被多次加密就会泄露信息。考虑一个信用卡加密,在它最基本的层次,响应要么是成功要么是失败,即0或者1,如果对这些信息进行加密,这并不需要攻击者话费多少工作就可以求出失败和成功的代码是多少。 分组对称加密模式:ECB/CBC/CFB/OFB缺CTR
    • ECB的重放攻击
    • 注意ECB和流密码的区别:流密码是按位加密,而ECB适用于分组密码,是分块加密
  2. 流密码RC4的攻击:
  3. CTR加密:类似于CBC,不过IV固定,每次递增后再加密然后与明文异或得到密文
  4. 密钥衍生算法:PKCS#5。密钥衍生函数是一种把一个秘密映射到如密钥或者IV这样的基本参数上的函数。基于口令的加密问题。 
  5. CBC不能提供认证,它只能保证私密性。CBC的IV必须是随机的,CTR可以是唯一的
  6. CTR允许并行,这在硬件中很重要,CBC只能串行。
  7. 散列函数需要具有的两种性质
    • 单向性:由输出推出输入时困难的
    • 碰撞约束:给定一个输出,找出一个能产生相同输出的输入时困难的。
  8. 散列算法在强度上只有其摘要长度大小的一半。如SHA-256可以在1/2^256范围里找到碰撞。原因是生日悖论的结果。表明给定消息摘要定义域平方根大小的输出,就能找到一个输入碰撞。主要原因是摘要可以离线计算。
  9. MD强化:使用消息摘要的编码对消息进行填充的技术,可以避免各种前缀和拓展攻击。
  10. 各个用途
    • 散列函数
      • 用于完整性校验
      • 也可以用来创建消息认证码HMAC,但散列函数不等同于MAC:带有固定密钥的MAC函数通常不是安全的单向散列函数,类似地,单向散列函数也不是安全的MAC函数
    • MAC:如果没有MAC的话,攻击者能够修改数据包并且重放旧的包,而不会马上被检测到。TLS, SSL, SSH中。 
    • GCM和CCM:将认证和加密组合到了一起。只需要知道一个密钥和IV。会使用密钥和IV处理加密和认证这两种任务。
      • CCM:是CMAC和CTR加密模式的组合
      • GCM:是GHMAC和CTR加密模式的组合
  11. MAC:接受任意大小的输入,并产生一个固定大小的输出。接受消息和秘密密钥来作为输入。
  12. 为什么40位对于MAC来说就够了,但对于分组密码来说却不行?因为前者需要victim参与进来,只有一次伪造一个消息的机会,后者可以离线。
  13. HMAC流程:tag = hash(key1 || hash(key2 || message)),其中key1和key2都是由一个密钥线性拓展而来的。
  14. GCM和CCM都需要一个唯一的Nonce(仅仅使用一次的N)来维持他们的保密性和真实性目的。其值并不要求唯一,只要去对于一个给定的密钥,它是唯一的。
  15. 多精度算法和固定精度算法构成了BigNum的基础。
  16. 公钥密码学解决了分组密码的两个不能解决的问题:密钥分发和不可否认
  17. 签名的通用形式:被认证的消息首先使用一个安全的密码学散列函数进行散列,然后把消息发给公钥签名算法,加密后得到签名。 
  18. 分清楚数字签名和数字证书:数字签名是什么?
  19. RSA的公钥计算(加密和认证)非常快,但是私钥运算则非常慢。
  20. ECC的安全性比RSA好很多,可以更加高效地存储。但是实现更为复杂,更容易出现错误。
  21. 图解HTTPS