SM2椭圆曲线公钥密码算法中的密钥交换协议
字数 1540 2025-11-08 20:56:04
SM2椭圆曲线公钥密码算法中的密钥交换协议
SM2的密钥交换协议允许双方通过公开信道协商出一个共享密钥,常用于后续的对称加密。以下是协议的详细步骤和原理说明。
1. 协议参与方与初始参数
- 参与方:Alice(身份ID_A)和Bob(身份ID_B)。
- 公共参数:
- 椭圆曲线方程 \(y^2 = x^3 + ax + b\) 及基点 \(G\)(阶为素数 \(n\))。
- 哈希函数(如SM3)、密钥派生函数(KDF)。
- 双方密钥对:
- Alice:私钥 \(d_A \in [1, n-1]\),公钥 \(P_A = d_A \cdot G\)。
- Bob:私钥 \(d_B\),公钥 \(P_B = d_B \cdot G\)。
2. 密钥交换流程
协议分为两个阶段:临时密钥交换与共享密钥生成。
步骤1:Alice生成临时密钥对并发送部分信息
- Alice随机选择 \(r_A \in [1, n-1]\) 作为临时私钥。
- 计算临时公钥 \(R_A = r_A \cdot G\)。
- 将 \(R_A\) 发送给Bob。
步骤2:Bob生成临时密钥对并计算共享点
- Bob随机选择 \(r_B \in [1, n-1]\)。
- 计算临时公钥 \(R_B = r_B \cdot G\)。
- 计算共享点:
- \(U = (x_U, y_U) = h \cdot r_B \cdot (P_A + R_A)\),其中 \(h\) 是曲线余因子(SM2中通常为1)。
- 若 \(U\) 是无穷远点,协议失败(概率极低)。
- 将 \(R_B\) 和可选的验证消息(如MAC标签)发送给Alice。
步骤3:Alice计算共享点
- Alice收到 \(R_B\) 后,计算共享点:
- \(V = (x_V, y_V) = h \cdot r_A \cdot (P_B + R_B)\)。
- 若 \(V\) 是无穷远点,协议失败。
3. 共享密钥生成与验证
双方需确保计算出的共享点坐标一致(即 \(U = V\)),进而派生相同密钥:
- 计算共享密钥材料:
- Alice和Bob分别将 \(x_V\) 和 \(x_U\) 转换为字节串,并拼接双方身份ID、公钥等信息。
- 例如:\(Z = H(ID_A \| ID_B \| x_V \| ...)\)(具体格式由标准定义)。
- 派生密钥:
- 将 \(Z\) 输入KDF,生成指定长度的共享密钥 \(K\):
\[ K = \text{KDF}(Z, \text{密钥长度}) \]
。
3. 可选验证:
- 双方可交换MAC标签(基于 \(K\) 计算)以确认密钥一致性。
4. 安全性关键点
- 临时随机数保密:\(r_A, r_B\) 需随机且一次性使用,防止重放攻击。
- 身份绑定:共享密钥与双方身份绑定,避免中间人攻击。
- 前向安全性:即使长期私钥 \(d_A/d_B\) 泄露,过去的会话密钥仍安全。
5. 示例说明
假设椭圆曲线为SM2标准曲线,哈希为SM3,KDF为SM2-KDF:
- Alice发送 \(R_A = (x_{R_A}, y_{R_A})\) 给Bob。
- Bob计算 \(U = r_B \cdot (P_A + R_A)\),提取 \(x_U\)。
- 双方通过 \(x_U = x_V\) 得到相同输入,最终派生256位AES密钥。
此协议结合椭圆曲线离散对数难题(ECDLP)和哈希函数,确保高效与安全。