三、密钥,随机数与应用技术
0x11 密钥
密钥与明文等价,信息的机密性不应该依赖于密码算法本身,而是应该依赖于妥善保管的密钥。
- 对称密码的密钥和公钥密码的密钥:确保机密性
- 消息认证码的密钥和数字签名的密钥:用于认证
- 会话密钥和主密钥:session key一次性密钥,master key,一直使用
- 用于加密内容的密钥和用于加密密钥的密钥:CEK内容加密密钥,KEK密钥加密密钥
密钥管理:生成密钥(随机数、口令生成)—配送密钥(事先共享、密钥分配中心、公钥密码)—更新密钥(当前密钥哈希作为下一个密钥)—保存密钥(将密钥再加密,仅保存KEK)—作废密钥()
Diffie-Hellman 密钥交换(Diffie-Hellman key exchange):协商生成一个共享密钥,而这一秘密数字就可以被用作对称密码的密钥。IPsec中就使用了经过改良的Diffie-Hellman密钥交换。根据有限域的离散对数问题而产生,G的A方 mod P计算A复杂度。
- Alice 向 Bob 发送两个质数 P 和 G,P必须非常大,G是P的生成元,不需保密,谁生成都行
- Alice生成一个随机数A,A是一个1~P-2之间的整数。保密
- Bob生成一个随机数B,B是一个1~P-2之间的整数。保密
- Alice 将 G的A次方 mod P 这个数发送给 Bob,不需保密
- Bob将G的B次方 mod P 这个数发送给 Alice,不需保密
- Alice 用 Bob 发过来的数计算 A 次方并求 mod P,共享密钥=G的 A×B次方 mod P,Bob同理
0x12 随机数
- 随机性——不存在统计学偏差,是完全杂乱的数列
- 不可预测性——不能从过去的数列推测出下一个出现的数
- 不可重现性——除非将数列本身保存下来,否则不能重现相同的数列
弱伪随机数:只具备随机性
强伪随机数:具备随机性和不可预测性
真随机数:具备随机性、不可预测性、不可重现性
伪随机数生成器PRNG:软件实现,无法真正生成真随机数;具有内部状态,通过外部输入的种子生成随机数列
方法:
- 杂乱的方法:周期短、算法差
- 线性同余法(linear congruential method):(A×内部状态+C) mod M,不具备不可预测性
- 单向散列函数法:内部状态作为计数器,散列函数计算内部状态输出即随机值,具备不可预测
- 密码法