1. 整体架构
整体架构分三层(如图1):
l 接口层:提供对外接口以完成SM9功能。主要分为:
n 系统接口:主要完成KGC参与的工作。
n 功能接口:主要完成KGC不参与的工作。
l SM9功能层:提供SM9的功能模块。主要分成:
n 主**生成:KGC公私钥的生成。
n 用户**生成:生成用户私钥,用户公钥任意设定。
n 加密和解密。
n 签名和验签。
n **协商。
l 底层模块:为完成SM9功能所需的各种模块。
n 核心模块:大整数运算、椭圆曲线运算和配对运算是其中最重要也是最核心的模块,将是本次开发的难点和重点。特别是配对模块,是SM9的特色。
n **导出函数KDF、H1、H2、SM3为密码辅助函数。
n 随机数生成器PRN。
图1 整体架构
A.1. 系统基本功能
A.1.1 主**生成
主**生成 | 数字签名 | **交换 | 加解密/封装 |
主私钥 | s∈[1, N−1] | s∈[1, N−1] | s∈[1, N−1] |
主私钥长 | L | L | L |
主公钥 | Ppub=[s]P2∈G2 | Ppub=[s]P1∈G1 | Ppub=[s]P1∈G1 |
主公钥长 | 4L(E(Fq2)点) | 2L(E(Fq)点) | 2L(E(Fq)点) |
私钥生成函数识别符 | hid,一个字节 | hid,一个字节 | hid,一个字节 |
调用库 | EC- E(Fq2) | EC- E(Fq) | EC- E(Fq) |
| 异 | 同 | 同 |
A.1.2 用户公私钥生成
用户公私钥生成 | 数字签名 | **交换 | 加解密/封装 |
主私钥 | s∈[1, N−1] | s∈[1, N−1] | s∈[1, N−1] |
主私钥长 | L | L | L |
用户公钥 | 用户标识IDA | 用户标识IDA | 用户标识IDA |
用户公钥长 | 任意长度 | 任意长度 | 任意长度 |
用户私钥 |
dA∈G1, t1=H1(IDA||hid, N)+s mod N, t2=s×t1-1 mod N dA=[t2]P1 |
dA∈G2, t1=H1(IDA||hid, N)+s mod N, t2=s×t1-1 mod N dA=[t2]P2 |
dA∈G2, t1=H1(IDA||hid, N)+s mod N, t2=s×t1-1 mod N dA=[t2]P2 |
用户私钥长 | 2L(E(Fq)点) | 4L(E(Fq2)点) | 4L(E(Fq2)点) |
| 异 | 同 | 同 |