常用 #### 说明:: 信息的机密性不应该依赖于密码算法本身 而应该依赖于妥善保管的密钥 各种不同的密钥:: 密钥的用途 确保机密性的密钥 * 对称密码 * 公钥密码 用于认证的密钥 * 消息认证码 * 数字签名 密钥的使用次数 会话密钥(session key) 主密钥(master key) 加密的对象 CEK(Contents Encrypting Key, 内容加密密钥) KEK(Key Encrypting Key, 密钥加密密钥) KEK 是为了减少密钥数量 密钥的管理:: 生成密钥 生成密钥最好的方法是随机数 * 密码学用途的伪随机数生成器必须是专门针对密码学设计的 用口令生成密钥 * 基于口令的密码(Password Based Encryption, PBE) 配送密钥 1. 事先共享密码 2. 密钥分配中心 3. Diffie-Hellman 密钥交换 4. 公钥密码 更新密钥(key updating) 时间点: 定期(如每发送1000字节)改变密钥 方法: 用当前密钥的散列值作为下一个密钥 好处: 前向安全(forward security) 原因: 借助单向散列函数的单向性, 防止破译过去的通信内容的机制 保存密钥 KEK: 减少需保管的密钥数量 作废密钥 作废与生成密钥同等重要 Diffie-Hellman:: 定义 Diffie-Hellman 密钥交换(Diffie-Hellman key exchange) Diffie-Hellman 密钥协商(Diffie-Hellman key aggreement) 基于:「离散对数」 椭圆曲线Diffie-Hellman 基于: 「椭圆曲线上的离散对数问题」 PBE:: 基于口令的密码(Password Based Encryption, PBE) 加密步骤 1. 生成 KEK 2. 生成会话密钥(CEK)并加密 3. 加密消息 解密步骤 1. 重建 KEK 2. 解密会话密钥 3. 解密消息 作用 盐的作用: 防御字典攻击 口令作用: 全球人脑记忆 改良PBE: 多次迭代散列函数来「拉伸 stretching」 现代加密算法的典型组件包括:: 加解密算法、加密密钥、解密密钥。 其中: 加解密算法自身是固定不变的,一般是公开可见的; 密钥则往往每次不同,并且需要保护起来, 一般来说,对同一种算法,密钥长度越长,则加密强度越大。