SM2椭圆曲线公钥密码算法
第3部分:密钥交换协议
Public Key Cryptographic Algorithm SM2 Based on Elliptic Curves
Part 3: Key Exchange Protocol
国家密码管理局
2010年12月
目目目 次次次
前 言 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·
II
引 言 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·
III
1 范围· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·
1
2 规范性引用文件· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·
1
3 术语和定义 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·
1
4 符号· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·
2
5 算法参数与辅助函数 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·
3
5.1 总则 ··················································································
3
5.2 椭圆曲线系统参数 ·····································································
3
5.3 用户密钥对············································································
3
5.4 辅助函数 ··············································································
3
5.4.1 概述 ···········································································
3
5.4.2 密码杂凑函数 ··································································
4
5.4.3 密钥派生函数 ··································································
4
5.4.4 随机数发生器 ··································································
4
5.5 用户其它信息 ·········································································
4
6 密钥交换协议及流程 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·
4
6.1 密钥交换协议 ·········································································
4
6.2 密钥交换协议流程 ·····································································
6
附录A (资料性附录) 密钥交换及验证示例· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·
7
A.1 一般要求··············································································
7
A.2 Fp上椭圆曲线密钥交换协议····························································
7
A.3 F2m上椭圆曲线密钥交换协议 ··························································· 11
I
前前前 言言言
《SM2椭圆曲线公钥密码算法》分为四个部分:
──第1部分:总则
──第2部分:数字签名算法
──第3部分:密钥交换协议
──第4部分:公钥加密算法
本部分为第3部分。
本部分的附录A为资料性附录。
II
引引引 言言言
N.Koblitz和V.Miller在1985年各自独立地提出将椭圆曲线应用于公钥密码系统。椭圆曲线公钥密码
所基于的曲线性质如下:
──有限域上椭圆曲线在点加运算下构成有限交换群,且其阶与基域规模相近;
──类似于有限域乘法群中的乘幂运算,椭圆曲线多倍点运算构成一个单向函数。
在多倍点运算中,已知多倍点与基点,求解倍数的问题称为椭圆曲线离散对数问题。对于一般椭
圆曲线的离散对数问题,目前只存在指数级计算复杂度的求解方法。与大数分解问题及有限域上离散
对数问题相比,椭圆曲线离散对数问题的求解难度要大得多。因此,在相同安全程度要求下,椭圆曲
线密码较其它公钥密码所需的密钥规模要小得多。
本部分描述了基于椭圆曲线的密钥交换协议。
III
SM2椭圆曲线公钥密码算法
第3部分:密钥交换协议
1 范范范围围围
本部分规定了SM2椭圆曲线公钥密码算法的密钥交换协议,并给出了密钥交换与验证示例及其相
应的流程。
本部分适用于商用密码应用中的密钥交换,可满足通信双方经过两次或可选三次信息传递过程,
计算获取一个由双方共同决定的共享秘密密钥(会话密钥)。同时,本部分还可为安全产品生产商提
供产品和技术的标准定位以及标准化的参考,提高安全产品的可信性与互操作性。
2 规规规范范范性性性引引引用用用文文文件件件
下列文件中的条款通过本部分引用而成为本部分的条款。凡是注日期的引用文件,其随后所有的
修改单(不包括勘误的内容)或修订版均不适用于本部分,然而,鼓励根据本部分达成协议的各方研
究是否可使用这些文件的最新版本。凡是不注日期的引用文件,其最新版本适用于本部分。
SM2椭圆曲线公钥密码算法 第1部分:总则
3 术术术语语语和和和定定定义义义
3.1
3.2
3.3
值。
3.4
3.5
3.6
下列术语和定义适用于本部分。
密密密钥钥钥 key
确定密码函数运算的一个参数,它用于:
a) 加密或解密变换;
b) 同步产生共享秘密;
c) 数字签名的生成或验证。
[ANSI X9.63-2001]
密钥交换 key exchange
在通信实体之间安全地建立一个共享密钥的协商过程。
密钥协商 key agreement
多个用户之间建立一个共享秘密密钥的过程,并且其中的任何一个用户都不能预先确定该密钥的
[ISO/IEC 15946-3 3.16]
从A到B的密钥确认 key confirmation from A to B
使用户B确信用户A拥有特定秘密密钥的保证。
[ISO/IEC 15946-3 3.17]
密钥派生函数 key derivation function
通过作用于共享秘密和双方都知道的其它参数,产生一个或多个共享秘密密钥的函数。
[ANSI X9.63-2001 2.1]
1
杂凑函数 hash function
将一个比特串映射为一个固定长度比特串的函数。该函数满足如下性质:
a) 对于任意给定的输出,要找到其对应的输入,在计算上是不可行的;
b) 对于任意给定的输入,要找到输出相同的另一个输入,在计算上是不可行的。
注:计算可行性依赖于具体的安全需求和环境。
[ISO/IEC 15946-2 3.1.3]
杂凑值 hash value
杂凑函数作用于一条消息时输出的比特串。
[ISO/IEC 15946-2 3.1.2]
对称密码算法 symmetric cryptographic algorithm
一种执行加密的算法或执行相应解密的算法,其中加密和解密使用的密钥容易从计算上相互求
发起方 initiator
在一个协议的操作过程中发送首轮交换信息的用户。
[ANSI X9.63-2001 2.1]
响应方 responder
在一个协议的操作过程中不是发送首轮交换信息的用户。
[ANSI X9.63-2001 2.1]
3.7
3.8
得。
3.9
3.10
3.11
可辨别标识 distinguishing identifier
可以无歧义辨别某一实体身份的信息。
[ISO/IEC 15946-3 3.9]
4 符符符号号号
下列符号适用于本部分。
A,B:使用公钥密码系统的两个用户。
a,b:Fq中的元素,它们定义Fq上的一条椭圆曲线E。
dA:用户A的私钥。
dB:用户B的私钥。
E(Fq):Fq上椭圆曲线E的所有有理点(包括无穷远点O)组成的集合。
Fq:包含q个元素的有限域。
G:椭圆曲线的一个基点,其阶为素数。
Hash( ):密码杂凑函数。
Hv( ):消息摘要长度为v比特的密码杂凑函数。
h:余因子,h= #E(Fq)=n,其中n是基点G的阶。
IDA,IDB :用户A和用户B的可辨别标识。
K,KA,KB:密钥交换协议商定的共享秘密密钥。
KDF( ) :密钥派生函数。
modn :模n运算。例如,23mod7=2。
2
n :基点G的阶(n是# E(Fq)的素因子)。
O:椭圆曲线上的一个特殊点,称为无穷远点或零点,是椭圆曲线加法群的单位元。
PA:用户A的公钥。
PB:用户B的公钥。
q :有限域Fq中元素的数目。
rA:密钥交换中用户A产生的临时密钥值。
rB:密钥交换中用户B产生的临时密钥值。
x∥y:x与y的拼接,其中x、y可以是比特串或字节串。
ZA:关于用户A的可辨别标识、部分椭圆曲线系统参数和用户A公钥的杂凑值。
ZB:关于用户B的可辨别标识、部分椭圆曲线系统参数和用户B公钥的杂凑值。
}
#E(Fq):E(Fq)上的点的数目,称为椭圆曲线E(Fq)的阶。
[k]P:椭圆曲线上点P的k倍点,即,[k]P= P + P +··· + P
,k是正整数。
|
{z
x,y]:大于或等于x且小于或等于y的整数的集合。
⌈x⌉:顶函数,大于或等于x的最小整数。例如,⌈7⌉=7, ⌈8.3⌉=9。
⌊x⌋:底函数,小于或等于x的最大整数。例如,⌊7⌋=7, ⌊8.3⌋=8。
&:两个整数的按比特与运算。
k个
5 算算算法法法参参参数数数与与与辅辅辅助助助函函函数数数
5.1 总则
密钥交换协议是两个用户A和B通过交互的信息传递,用各自的私钥和对方的公钥来商定一个只
有他们知道的秘密密钥。这个共享的秘密密钥通常用在某个对称密码算法中。该密钥交换协议能够用
于密钥管理和协商。
5.2 椭圆曲线系统参数
椭圆曲线系统参数包括有限域Fq的规模q(当q = 2m时,还包括元素表示法的标识和约化多项式);
定义椭圆曲线E(Fq)的方程的两个元素a、b∈ Fq;E(Fq)上的基点G = (xG;yG)(G ̸= O),其中xG和yG是Fq中
的两个元素;G的阶n及其它可选项(如n的余因子h等)。
椭圆曲线系统参数及其验证应符合第1部分第5章的规定。
5.3 用户密钥对
用户A的密钥对包括其私钥dA和公钥PA=[dA]G=(xA;yA),用户B的密钥对包括其私钥dB和公钥
PB=[dB]G=(xB;yB)。
用户密钥对的生成算法与公钥验证算法应符合第1部分第6章的规定。
5.4 辅助函数
5.4.1 概述
在本部分规定的椭圆曲线密钥交换协议中,涉及到三类辅助函数:密码杂凑函数,密钥派生函数
与随机数发生器。这三类辅助函数的强弱直接影响密钥交换协议的安全性。
3
5.4.2 密码杂凑函数
本部分规定使用国家密码管理局批准的密码杂凑算法,如SM3密码杂凑算法。
5.4.3 密钥派生函数
密钥派生函数的作用是从一个共享的秘密比特串中派生出密钥数据。在密钥协商过程中,密钥派
生函数作用在密钥交换所获共享的秘密比特串上,从中产生所需的会话密钥或进一步加密所需的密钥
数据。
密钥派生函数需要调用密码杂凑函数。
设密码杂凑函数为Hv( ),其输出是长度恰为v比特的杂凑值。
密钥派生函数KDF(Z, klen):
输入:比特串Z,整数klen(表示要获得的密钥数据的比特长度,要求该值小于(232-1)v)。
输出:长度为klen的密钥数据比特串K。
a)初始化一个32比特构成的计数器ct=0x00000001;
b)对i从1到⌈klen/v⌉执行:
b.1)计算Hai=Hv(Z ∥ ct);
b.2)ct++;
c)若klen/v是整数,令Ha!⌈klen=v⌉ = Ha⌈klen=v⌉,否则令Ha!⌈klen=v⌉为Ha⌈klen=v⌉最左边的(klen−(v×⌊klen=v⌋))比
特;
d)令K = Ha1||Ha2||···||Ha⌈klen=v⌉−1||Ha!⌈klen=v⌉。
5.4.4 随机数发生器
本部分规定使用国家密码管理局批准的随机数发生器。
5.5 用户其它信息
用户A具有长度为entlenA比特的可辨别标识IDA,记ENT LA是由整数entlenA 转换而成的两个字节;
用户B具有长度为entlenB比特的可辨别标识IDB,记ENT LB 是由整数entlenB转换而成的两个字节。 在
本部分规定的椭圆曲线密钥交换协议中,参与密钥协商的A、B双方都需要用密码杂凑函数求得用
户A的杂凑值ZA和用户B的杂凑值ZB。 按本文本第1部分4.2.5和4.2.4给出的方法,将椭圆曲线方程参
数a、b、G的坐标xG、yG 和PA的坐标xA、yA的数据类型转换为比特串,ZA= H256(ENT LA ∥ IDA ∥ a ∥ b ∥
xG ∥ yG ∥ xA ∥ yA);按本文本第1部分4.2.5和4.2.4给出的方法,将椭圆曲线方程参数a、b、G的坐标xG、
yG 和PB的坐标xB、yB的数据类型转换为比特串,ZB= H256(ENT LB ∥ IDB ∥ a ∥ b ∥ xG ∥ yG ∥ xB ∥ yB)。
6 密密密钥钥钥交交交换换换协协协议议议及及及流流流程程程
6.1 密钥交换协议
设用户A和B协商获得密钥数据的长度为klen比特,用户A为发起方,用户B为响应方。
用户A和B双方为了获得相同的密钥,应实现如下运算步骤:
记w=⌈(⌈log2(n)⌉ =2)⌉− 1。
用户A:
A1:用随机数发生器产生随机数rA ∈ [1, n-1];
A2:计算椭圆曲线点RA = [rA]G=(x1;y1);
A3:将RA发送给用户B;
4