密码学101:密钥、随机数

3.1 密钥——秘密的精华

  • 什么是密钥:
    • 密钥是一个巨大的数字,密钥空间越大,进行暴力破解就越困难。密钥空间的大小由密钥长度决定。
    • 明文等于密钥。
    • 信息的机密性不应该依赖于密码算法本身,而应该依赖于妥善保管的密钥。
  • 各种不同的密钥
    • 对称密码的密钥(共享密钥)和公钥密码的密钥(公钥-私钥,密钥对)
    • 消息认证码的密钥(计算MAC)和数字签名的密钥(生成签名-验证签名)
    • 用于确保机密性的密钥和用于认证的密钥
    • 会话密钥(每次通信都会被更换的密钥)和主密钥(一直被重复使用的密钥)
    • 用于加密内容的密钥(CEK,会话密钥通常作为CEK使用)与用于加密密钥的密钥(KEK,主密钥通常作为KEK使用)

会话密钥的好处是每次通信都会更换,但是如果生成密钥的伪随机数生成器品质不好,还有有可能被破译。

  • 密钥的管理
    • 生成密钥:基于随机数、基于口令
    • 配送密钥:事先共享密钥、密钥分配中心、Diffie-Hellman密钥交换、公钥密码
    • 更新密钥:使用共享密钥进行通信的过程中,定期改变密钥。将当前密钥的散列值作为下一个密钥。(后向安全)
    • 保存密钥:我们无法记住密钥,将密钥加密后保存(KEK)。减少需要保管的密钥数量。
    • 作废密钥:必须妥善删除

在此基础上:

  • Diffie-Hellman密钥交换
  • 基于口令的密码(PBE)
    • 加密过程:1生成KEK、2生成会话密钥并加密、3加密信息
    • 解密过程:1重建KEK、2解密会话密钥、3解密信息
    • 的作用:盐为由伪随机数生成器生成的随机数,在生成密钥KEK时与口令一起输入单向散列函数。用于防御字典攻击(事先生成大量候选KEK)
    • 在使用PBE时,需要将盐和加密后的CEK通过物理方式进行保护。
    • 拉伸:生成KEK时,将单项散列函数进行多次迭代的方法。
  • 如何生成安全的口令

本节总结了密码技术中所使用的密钥。密钥就是密码技术的钥匙。下一节将介绍在生成密钥时需要用到的伪随机数生成器。

3.2 随机数——不可预测性的源泉

  • 使用随机数的密码技术:不可预测性
    • 生成密钥:用于对称密码和消息认证码
    • 生成密钥对:用于公钥密码和数字签名
    • 生成初始化向量(IV):用于分组密码的CBC、CFB和OFB模式
    • 生成nonce:用于防御重放攻击以及分组密码的CTR模式等
    • 生成盐:用于给予口令的密码(PBE)
  • 随机数的性质
    • 随机性——不存在统计学偏差,是完全杂乱的数列
    • 不可预测性——不能从过去的数列推测出下一个出现的数
    • 不可重现性——除非将数列本身保存下来,否则不能重现相同的数列
  • 伪随机数生成器
    • 结构:种子——内部状态——伪随机数列
  • 具体的伪随机数生成器
    • 杂乱的方法
    • 线性同余法
    • 单向散列函数法
    • 密码法
    • ANSI X9.17
  • 对伪随机数生成器的攻击
    • 对种子进行攻击
    • 对随机数池进行攻击

本节介绍了随机数相关的知识。到此为止,我们已经将主要的密码技术学习完了。

你可能感兴趣的