-
从爱丽丝处接收消息时,鲍勃希望确保:
- 消息确实源自爱丽丝
- 消息自爱丽丝发送后未被篡改
-
安全处理问题:
- 源身份伪造 / 欺骗
- 消息注入 / 修改
- 消息重排序 / 重放
- 生成一个认证符,其可能涉及以下要素的函数:
- 发送方 / 消息文本
- 时间戳 / 序列号 / 随机值
- 秘密密钥
- 发送方计算认证符并将其作为常规消息的一部分发送
- 接收方将接收到的认证符与预期认证符进行比对
- MAC 是附加在消息后的固定长度代码
- MAC 的典型长度范围为 64 到 256 位
- 消息可明文发送(无需加密)
- MAC 是消息与秘密密钥的函数
- 可确保消息未被篡改且来自声称的发送方
- MAC 不应可逆,无需解密
- MAC 的强度取决于所使用的函数及密钥的保密性
- 加密认证
- 使用消息文本和秘密密钥的加密函数
- CBC-MAC(密码块链接消息认证码)
- 哈希认证
- 使用哈希函数并在计算中引入秘密密钥
- MD5:128 位 MAC(RFC 1321 标准)
- SHA-1:160 位 MAC(美国国家标准与技术研究院 NIST,FIPS PUB 180-1 标准)
- 可操作性
- 适用于任意输入长度
- 生成固定大小的输出
- 应易于计算
- 安全性
- 单向性 —— 给定值 Y,难以找到内容 X 使得 Y = MAC (X)
- 弱抗碰撞性 —— 给定内容 X₁,难以找到另一内容 X₂使得 MAC (X₁) = MAC (X₂)
- 强抗碰撞性 —— 难以找到任意两个不同的内容 X₁和 X₂使得 MAC (X₁) = MAC (X₂)
- 密码块链接消息认证码
- 将消息 M 划分为 L 个长度均为 n 位的块:M = M₁, M₂, . . ., Mₗ
- 设 K 为加密算法 E 的秘密密钥
- 设 C₀ = IV 为 n’位的随机块
- 对 i = 1, 2, . . ., L,计算 Cᵢ = Eₖ(Mᵢ + Cᵢ₋₁)
- CBC-MACₖ(M) = Cₗ
- 令 MACₖ(M) = (C₀, Cₗ) = (IV, CBC-MACₖ(M))
- 即 CBC 加密的第一个块和最后一个块
- 输入消息长度小于 2⁶⁴位
- 按 512 位块进行处理
- 附加填充位
- 使消息长度满足模 512 余 448
- 添加长度字段
- 原始消息长度写入最后 64 位
- 使用 4 字状态缓冲区 A、B、C、D 计算消息摘要
- 初始值:01234567、89abcdef、fedcba98、76543210
- 共 128 位
- 按 16 字块处理消息
- M0、M1、…M15
- 消息块的处理包含 4 个相似阶段
- 每个阶段使用不同的函数 F
- 每个阶段由 16 个相似操作组成
- 采用函数 F、模加运算和左旋转
- 使用 5 字状态缓冲区 A、B、C、D、E 计算消息摘要
- 初始值:67452301、efcdab89、98badcfe、10325476、c3d2e1f0
- 共 160 位
- 按 16 字块处理消息
- M0、M1、…M15
- 消息块的处理包含 4 个相似阶段
- 每个阶段使用不同的函数 F
- 每个阶段由 20 个相似操作组成
- F 是一个会变化的非线性函数
- Wt 是第 t 步的扩展消息字
- Kt 是第 t 步的常数
- 发送方(鲍勃)对文档进行数字签名,以此表明其为文档的所有者 / 创建者
- 接收方(爱丽丝)可向他人证明该文档必定由鲍勃(而非其他人)创建
- 鲍勃的私钥至关重要
- 问题
- 爱丽丝和鲍勃如何共享共同的秘密密钥
- 爱丽丝如何知道鲍勃的公钥确实是鲍勃的公钥
- 解决方案
- 迪菲 - 赫尔曼密钥交换
- 可信证书颁发机构(CA)
- 公钥证书
- 记录与重放
- 仍是秘密漏洞的主要组成部分
- 需合理使用时间戳和不重数
- 中间人攻击(Man-in-the-middle attack)
- 特鲁迪(Trudy)伪装成爱丽丝(对鲍勃)和鲍勃(对爱丽丝)
- 难以察觉
- 鲍勃接收爱丽丝发送的所有内容,反之亦然
- 但特鲁迪也会接收所有消息!
- 特鲁迪创建电子邮件订单:
- 亲爱的披萨店,请给我送四个意大利辣香肠披萨。谢谢,鲍勃
- 特鲁迪用自己的私钥对订单签名
- 特鲁迪将订单发送给披萨店
- 特鲁迪向披萨店发送自己的公钥,但谎称是鲍勃的公钥
- 披萨店验证签名后,将四个意大利辣香肠披萨送到鲍勃处
- 而鲍勃根本不喜欢意大利辣香肠
- 预备知识
- 公开的大素数 P
- 公开的 Zp*生成元 g
- A 和 B 之间没有共享的秘密值
- Zp* = {1, 2, ..., p-1}(模 p 运算)
- D-H 协议
- A 随机选取一个数 X∈{1, 2, ..., P–1},并向 B 发送值 g^X (mod P)
- B 随机选取一个数 Y∈{1, 2, ..., P–1},并向 A 发送值 g^Y (mod P)
- A 计算 (g^Y)^X (mod P) = g^(XY) (mod P)
- B 计算 (g^X)^Y (mod P) = g^(XY) (mod P)
- 此时 A 和 B 共享秘密值 g^(XY) (mod P)
注释:
- ZP* = {1≤a≤P–1: gcd(a,P)=1}
- 每个 [a] 表示集合 [a] = {a+k×P: k∈Z}
- 若 P 为素数,则 ZP* = {1, 2, ..., P–1}
- ZP的生成元 g 满足:g∈ZP,且对任意 a∈ZP*,存在 k∈Z 使得 a = g^k (mod P)
- 会话密钥
- 在一次逻辑连接期间使用
- 会话结束时销毁
- 永久密钥
- 用于密钥的分发
- 密钥分发中心(CA)
- 确定发送方和接收方的有效性
- 为该连接提供一个会话密钥
- 安全服务模块(SSM)
- 执行端到端加密
- 为主机获取密钥
- 客户端(C)向认证服务器(AS)发送包含自身标识、服务器(S)标识及随机数(Nc)的票据
- AS 使用与客户端共享的密钥(Kc-as)加密生成的会话密钥(Kcs)、服务器标识、随机数等信息,并通过与服务器共享的密钥(Ks-as)加密会话密钥和客户端标识生成票据,一同发送给客户端
- 客户端告知 AS 希望与服务器通信
- AS 生成会话密钥 Kcs 和票据,发送给客户端
- 客户端将票据发送至服务器,服务器可使用 Ks-as 解密票据
- 服务器用获得的会话密钥 Kcs 加密新随机数(Ns)并发送给客户端
- 客户端将该随机数减 1 后用 Kcs 加密回传,证明通信正常
AS:认证服务器(密钥分发中心) C:客户端 S:服务器 Kx-as:实体 X(C 或 S)与 AS 共享的密钥 Kcs:客户端 C 与服务器 S 之间的会话密钥 Nx:实体 X 生成的随机数
- 公钥不适合加密大块消息
- 鲍勃与爱丽丝的通信步骤如下:
- 准备一条消息
- 使用对称加密算法和一次性会话密钥对消息进行加密
- 用爱丽丝的公钥加密该会话密钥
- 将加密后的会话密钥附加到消息上并发送给爱丽丝
- 爱丽丝用自己的私钥获取会话密钥,然后解密消息
- 问题
- 如何确保发布的公钥确实属于爱丽丝,而非他人
- 解决方案:公钥证书
- 包含公钥及密钥所有者的用户标识
- 上述信息块由可信证书颁发机构(CA)签名并附加时间戳
- 他人无法用自己的公钥替换爱丽丝的公钥
- 无法伪造可信 CA 的签名
- 序列号(此证书唯一)
- 证书所有者信息,包括使用的算法和密钥值
- 证书颁发者信息,包括有效期、颁发者的数字签名(指纹)
爱丽丝想向鲍勃发送机密电子邮件 m。 爱丽丝操作如下: ▪ 生成随机对称私钥 KS ▪ 用 KS 加密消息(为提高效率) ▪ 同时用鲍勃的公钥加密 KS ▪ 将 KS (m) 和 KB (KS) 一并发送给鲍勃
爱丽丝希望提供发送方身份认证和消息完整性保障。 ▪ 爱丽丝对消息进行数字签名 ▪ 同时发送明文消息和数字签名
爱丽丝希望实现保密性、发送方身份认证和消息完整性。
爱丽丝使用三个密钥:她的私钥、鲍勃的公钥以及新创建的对称密钥。


























