一次性密码本

本质上是加密空间和信息空间相当. 所以任意一个密钥都会对应一个信息.

只要这个"密钥"只被使用一次, 那就什么统计信息都得不到.

因为空间相当, 密钥和要传递的信息本身包含的信息一样多. 所以产生了密钥配送悖论: 能送密钥为啥不直接送信息本身?

但是有意义, 可以提前送密钥, 晚送信息, 那么信息可以得到瞬间的解密. 产生时间上的价值.

对称密码

  1. feistel 算法 就是用信息本身作为密钥的一部分. round 的概念和 enigma 的轮转 几乎是一样的.

  2. 书里完全没有提 DES 的子密钥 是如何被产生的, 只是说这个是每 round 都不同的. 其实也就是通过 根密钥 通过其他某些算法得到的.

  3. 有函数没有反函数这个事情好有意思

  4. 对称密码里大量使用 XOR 为了方便加解密

Hash

  1. HASH 一定会碰撞. 因为信息空间大于指纹(散列值)空间. 比如用 sin/cos, 即便 x 轴无限延伸, 但是 y 轴只会在 [-1, 1].

  2. (对实现签名的猜测, 在后文得到验证) 非对称密钥本来是, 公开的加密+隐私的解密密钥的组合. 如果反过来, 私密的加密+公开的解密 密钥组合, 就可以实现 “签名” 这样的功能. 比如一份信息, 加上 encrypt(hash(信息) + "是真的") 传给别人, 就可以.

消息认证码 MAC

  1. nonce 其实和 序号一样啊. 都需要接收者记录. 序号只记录一个就行. 但是要保证 nonce 的唯一性, 要记录的要多的多. 为啥比序号好呢?为了不可预测?

  2. 防止否认 好像和 让第三方确认 是等价的.

证书

  1. 自签名有什么意义? 既然大家有你的解密公钥(如此签名才可以被认可), 你再签名一个干啥? 再给大家显摆一遍"我有你手上的公钥对应的私钥"? 但是如果去掉 (图10-5) 的第一级, 有什么区别吗?

  2. 任何人都可以成为 CA 这个事情有意思. 所以对认证机构本身的认可也十分重要啊.

  3. 我自己所持有的公钥中, 哪一个最可信.

密钥的保密性

Q: 用口令和盐加密的 CEK/KEK 不就等同于降低了 CEK 的强度吗?(只要 口令Key 短) 而且增加了一层让破解的机会多了一个. 所以这样有啥意义? 还不如直接用口令当作 CEK.

A: 当然还是比直接用口令强. 到底是一种 “记得住” 和 “保密” 的 trade-off. 肯定没有"直接安全保存 CEK" 安全, 但是比 “弱 口令 直接加密” 强.

更有意义的是, 这里有一种 “分离” 的思想: 可以通过组合一些 密钥 , 并且对 密钥 执行不同的加密保存方式, 比如随机数打印下来, 口令 记在脑子里, 私钥 保存在 U 盘里, 对于不同特征, 用不同的方式.

理想情况下, 保证攻击者得到任何一部分都不会导致问题. 所以最终的关系是,

如果对于每一个环节, 假设 P(泄漏+碰撞+社工+...) = Pi,
如果能让被攻破的概率是乘法, P1*P2*..*Pn. 即, 让每个环节之间的关系是 && 而不是 ||
(任何一个点被攻破, 相当于那个 P 变成 1)

随机数

  1. Q: 是不是"只要是有限域离散的 随机数 (比如骰子, 只能是 1,2..6 ) 就一定是可复现的"?
    A: 错. 骰子的值是 真随机数 . 序列不可复现.

  2. 伪随机生成器 好像一定是会有内部状态. 无论如何也无法摆脱一个可能被泄漏的 种子. 好 伪随机数生成器 其实就是内部状态的保密的好. +加入不可预测的随机搅乱随机状态. +无法被反推的内部状态.

  3. 因此 随机生成器密钥 的源头. 如此, 为了避免它成为脆弱点, 使用大量分离的各自独立的 密钥 就很宝贵. 和上文呼应.

PGPGP

  1. 被破解不一定没意义. SHA1 还在被大量使用. MD5 属于非常容易被破解, 但是 SHA1 还处在"确定能被艰难破解"的阶段. 所以并不是没有价值.

  2. GPG 的用法看出来, 自签名 就是为了统一所有 密钥 的 “接口”. 这样可以所有的流程都是通用的, 可以代入自己 密钥, 不过拥有最高的权限罢了

  3. 为什么会有人想统一 签名的解密公钥 和作为 非对称加密的加密公钥? 为什么要复用这个?

  4. 关于信任网: “相信你是你” 和 “相信你的判断” 是两回事.

SSL/TLS

  1. 因为 SSL/TLS 实际是给 transport layer 加密, 所以其实连 URL 都不会被暴露. 不过 FQDN 代表的 IP 是无法幸免的

  2. P345. 说当证书信息不足时需要做 ServerKeyExchange。这个信息不足的情况就比如,如果我们选择了 ECDHE 做密钥交换,那么还需要曲线参数。

  3. 关于 心脏流血: 即便这些被广泛使用的 suite 都有这么明显致命的漏洞啊.