第 11 章 秘钥——秘密的精华
什么是秘钥?
秘钥:一个巨大的数字。
数字本身的大小不重要,重要的是
秘钥空间
的大小。 秘钥与明文是等价的。
常见的秘钥?
- DES 秘钥:实质长度 56bit(7bytes)。
- DES-EDE2 秘钥:实质长度 112bit(14bytes)。
- DES-EDE3 秘钥:实质长度 168bit(21bytes)。
- AES 秘钥:128/192/256bit
如何管理秘钥?
需要清楚:信息的机密性不应该依赖于密码算法本身,而是应该依赖于妥善保管的秘钥。
- 生成秘钥:
- 用随机数生成秘钥;
- 密码学用途的伪随机数生成器必须是专门针对密码学用途而设计的。
- 用口令生成秘钥;
- 用随机数生成秘钥;
- 配送秘钥:
- 事先共享秘钥;
- 更新秘钥:
- 定期更新,例如每发送 1000 字节数据更新一次。
- 更新方式:将当前秘钥的散列值作为下一个秘钥。
这种防止破译过去的通信内容的机制,称为
向后安全
。
-
保存秘钥
- 对秘钥进行加密:有助于减少需要保管的秘钥数量。
-
作废秘钥
- 为什么要作废秘钥?
- 不再需要的秘钥及时作废,防止被解密。
- 如何作废秘钥?
- 彻底删除秘钥。
- 为什么要作废秘钥?
秘钥的分类?
- 对称、非对称。
- 用于认证、用于机密性。
Diffie-Hellman 秘钥交换
- 实际并没有交换秘钥,而是通过计算生成相同的秘钥,因此也称为
Diffie-Hellman秘钥协商
。
什么是基于口令的密码 (password based Encryption, PBE)?
- 根据口令生成秘钥,再用秘钥进行加密的方法。
- KEK:通过口令生成的秘钥。
- CEK:通过随机数生成器生成的秘钥。
什么是盐?盐的作用是什么?
- 盐:伪随机数生成器生成的随机数,和口令一起通过单向散列函数生成秘钥 (KEK)。
- 作用:用来防御字典攻击。
- 字典攻击:准备大量候选 KEK,逐一进行尝试。
什么是拉伸?
- 拉伸:讲单向散列函数进行多次迭代的方法。
- 通过拉伸可以改良 PBE。
如何生成安全的口令?
- 使用只有自己才能知道的信息。(大原则)
- 不要使用对自己重要的事物的名字。
- 不要使用关于自己的信息。
- 不要使用别人见过的信息。
- 将多个不同的口令分开使用。
- 有效利用笔记。
- 理解口令的局限性。
- 当对口令字符/长度进行限制时,秘钥的长度 (bit) 并不太长,可能可以通过暴力破解。
- 使用口令生成器和管理工具。