SM2椭圆曲线公钥密码算法的C语言实现(基于Miracl大数运算库)
实验环境
Windows 10,Visual Studio 2019,Miracl大数库
预备知识
F p F_p Fp 及椭圆曲线
素域 F p F_p Fp
当 q q q 是奇素数 p p p 时,素域 F p F_p Fp 中的元素用整数 0 , 1 , 2 , ⋯ , p − 1 0,1,2,⋯,p-1 0,1,2,⋯,p−1 表示。说明:
- 加法单位元是整数 0 0 0
- 乘法单位元是整数 1 1 1
- 域元素的加法是整数的模 p p p 加法,即若 a , b ∈ F p a,b∈F_p a,b∈Fp ,则 a + b = ( a + b ) mod p a+b=(a+b) \text { mod } p a+b=(a+b) mod p ;
- 域元素的乘法是整数的模 p p p 乘法,即若 a , b ∈ F p a,b∈F_p a,b∈Fp ,则 a + b = ( a ⋅ b ) mod p a+b=(a \cdot b) \text { mod } p a+b=(a⋅b) mod p 。
F p F_p Fp 上的椭圆曲线
定义在 F p F_p Fp ( p p p 是大于3的素数)上的椭圆曲线方程为: y 2 = x 3 + a x + b y^2=x^3+ax+b y2=x3+ax+b其中 a , b ∈ F p a,b∈F_p a,b∈Fp ,且 ( 4 a 3 + 27 b 2 ) mod p ≠ 0 (4a^3+27b^2 )\text { mod } p≠0 (4a3+27b2) mod p=0
椭圆曲线 E ( F p ) E(F_p) E(Fp) 定义为:
E ( F p ) = { ( x , y ) │ x , y ∈ F p , 且满足椭圆曲线方程 } ⋃ { O } E(F_p )=\left\{ (x,y)│x,y∈F_p,\text {且满足椭圆曲线方程}\right\}⋃\left\{O\right\} E(Fp)={
(x,y)│x,y∈Fp,且满足椭圆曲线方程}⋃{
O},其中O是无穷远点
椭圆曲线 E ( F p ) E(F_p) E(Fp