Page 40 - 《软件学报》2025年第10期
P. 40
米瑞琪 等: 基于 Kyber 公钥加密的高效认证密钥交换协议 4437
(2) UKS (unknown key share) 攻击, 一种经典的攻击模式为中间人攻击. 抵抗 UKS 攻击的典型措施是将双方的公
钥做杂凑运算, 整合到最终会话密钥. (3) 如果能够在第 1 条消息中使用双方的长期 DH 密钥进行 DH 运算, 通过
第 1 条消息即可对发起方进行身份验证, 从而能简单缓解 DoS (拒绝服务) 攻击, 因为响应方一旦接收到发起方的第 1 条
消息就可以检测到消息来源非法并中止握手. 因此, Kyber-PFS-AKE 的设计中, 引入了发起方和响应方之间的预共
H(spk ⊕spk ) 作为默认值, 其中 H psk 哈希到最终会话密钥. 这使得会话
享密钥 psk, 可以将 为密钥导出函数, 并将
i r
密钥计算中涉及的两方的静态公钥, 这种方法最早出现在 PQ-WireGuard 中, 能够在一定程度上抵御 UKS 攻击.
Kyber-AKE 中使用的 KEM 均为 IND-CCA 安全的 KEM. IND-CCA 安全的 KEM 是对 IND-CPA 安全的 PKE
进行 FO 变换得到. FO 变换的简要介绍见引言部分第 8 自然段. 根据 FO 变换的设计特性, 可以将 IND-CCA 安全
的 KEM C 3 ,κ 3 = KDF(C 2 ,H(spk ,m 1 )) C 8 = KDF(C 7 ,H(spk i ,m 3 ))).
(
共享密钥
shk 的链接密钥的密钥导出过程表示为
r
Kyber-PFS-AKE 的构造保持了 T 变换. 从本质上讲, 链式密钥中的密钥派生函数 C 3 ,κ 3 = KDF(C 2 ,∗) C 8 =
(
T C 3 ,κ 3 和
KDF(C 7 ,∗)) 可以扮演与密钥导出函数 H 在 U 变换 (“hashing”) 相同的角色. 因此, 我们保留变换 , C 8 的
(
派生形式为 C 3 ,κ 3 = KDF(C 2 ,spk ,m 1 ) C 8 = KDF(C 7 ,spk ,m 2 )), 让链式密钥中的 KDF(C 2 ,∗) 发挥同样的作用.
r i
此外, T 变换中存在额外的耗时因素. 第 1 个额外耗时因素是 T 变换将整个公钥都作为密钥派生函数的输入,
这是不必要的浪费. 事实上, 将公钥的不可预测部分 (例如前 32 字节) 包含在最终会话密钥计算中足以实现与包
括整个公钥在内的会话密钥计算提供的相同安全性 [10] . 因此, C 3 ,κ 3 的计算形式为 C 3 ,κ 3 = KDF(C 2 , spk r ,m 1 ) C 8 =
,
KDF(C 7 , spk i ,m 2 ), 其中 spk i 、 spk r 表示密钥的一个小的 (例如 32 字节) 不可预测部分. 基于格的 PKE/KEMs 中的
公钥大小 (Kyber 和 Saber 中约为 1 KB) 明显大于 32 字节, 这会对速度产生显著影响. 减少哈希函数的输入长度
在 Kyber 的密钥生成和封装过程中可以加快 2–3 倍的速度, 并且在 Kyber、Saber 中可以将封装过程提速高达 50%
以上. 因此, 我们只将公钥的一个小的不可预测部分 (例如 32 字节) 包含在最终会话密钥计算中, 而不是包含整个公钥.
Kyber-PFS-AKE 握手协议如图 4 所示, 会话密钥导出的过程 (链式密钥 C 1 ,C 2 ,...,C 10 ) 在图 5 中给出, 包括种
子值 (seed, C k )、AEAD 密钥 ( κ k ) 和杂凑值计算. 对于 分为行的 k 值, 第 1 行表示发起者的计算, 第 2 行表示响应
者相应的计算, spk i , spk r 表示密钥的小部分 (例如, 32 字节) 的不可预测部分. 图 4 中 CPAPKE = (KeyGen,Enc,Dec)
是一个 IND-CPA 安全的公钥加密方案, KDF 是一个密钥派生函数, 而 MAC 是消息认证码. 发起者和响应者的最终
tk i 、 tk r . 我们将 IND-CPA 安全的 PKE CPAPKE = (CPAPKE.Gen,CPAPKE.Enc,CPAPKE.Dec),
会话密钥分别是 记作
.
协议的发起者拥有一对长期公私钥对 (ssk i , spk i ), 响应者拥有一对长期公私钥对 (ssk r , spk r ) now 表示当前时间, 用
time 表示时间戳, 该时间戳用于保证攻击者无法通过重放攻击破坏当前在发起者和响应者之间的会话. ltk 表示发
起者的身份, 包含使用 AEAD 加密的 H(spk i ). 每个会话有其独立的会话标识符 sid, 发起者的会话标识符为 sid i ,
响应者的会话标识符为 sid r , 用于将后续的消息回应和本条消息绑定在一起.
我们在 eCK-PFS-PSK 模型 [11] 下完成了安全性证明. 由于 Kyber-AKE 使用了 IND-CCA 安全的密钥封装机制,
其安全性证明可以通过使用随机比特串替换 IND-CCA 安全的密钥封装机制的会话密钥完成. 因此其安全性可以
直接归约到密钥封装机制的 IND-CCA 安全性. 由于 Kyber-PFS-AKE 的设计中没有使用 IND-CCA 安全的密钥封
装机制, 因此 Kyber-AKE 的安全性证明中归约到密钥封装机制的 IND-CCA 安全性的部分不能被平凡地推广到公
钥加密的 IND-CPA 安全性.
然而, 在 Kyber-PFS-AKE 的设计中, IND-CPA 安全的公钥加密经过去随机化和重加密后, 结合外层的密钥导
出函数, 仍然具有和 IND-CCA 安全的密钥封装机制类似的结构. 因此, 可以将外层的密钥导出函数建模为随机预
言机, 在安全性证明中需要 IND-CCA 挑战者回答解密询问的部分, 可以通过密钥导出函数模拟对解密询问的回应.
此外, 为了添加一定的对拒绝服务攻击 (DDoS) 攻击的缓解手段, 可以通过 cookie 机制缓解: 当服务器过载时,
它不会立即处理握手, 而是返回一个 cookie. 响应者根据网络状态选择是否接受. 响应者维护一个随机秘密值, 该
随机秘密值每两分钟更新一次, 响应者使用该随机秘密值作为 MAC 密钥, 计算发起者 IP 的 MAC 值. 在高负载的
时候, 响应者会将该 cookie 返回给发起者. 发起者在重新发送消息的时候, 会使用这个 cookie 作为 MAC 密钥, 计
算其消息的 MAC 值. 响应者接到发送者再次发来的消息的时候, 如果处于高负载状态, 可以根据是否使用了 cookie
计算正确的 MAC 来选择是否接受和处理这个消息. 这种机制将发起者发送的消息与其 IP 地址绑定, 证明了 IP 的
所有权.

