2021SC@SDUSC
一、相关数学基础
SM2是椭圆曲线算法,所以要先学习相关基础数学知识
N.Koblitz和V.Miller在1985年各自独立地提出将椭圆曲线应用于公钥密码系统。椭圆曲线公钥密码 所基于的曲线性质如下:
──有限域上椭圆曲线在点加运算下构成有限交换群,且其阶与基域规模相近;
──类似于有限域乘法群中的乘幂运算,椭圆曲线多倍点运算构成一个单向函数。
1.参数
p:大于3的素数。
q:有限域Fq中元素的数目。
m:二元扩域F2 m关于F2的扩张次数。
2.基础概念
由于
1.实数域上的椭圆曲线是连续的,有无限个点,密码学要求有限点。
2.实数域上的椭圆曲线的运算有误差,不精确。密码学要求精确。
所以需要引入有限域内的圆锥曲线
有限域:Fq的描述及其元素的表示,q是一个奇素数或者是2的方幂。当q是奇素数p时,要 求p > 2 191;当q是2的方幂2 m时,要求m > 192且为素数。
素域Fp: 当q是奇素数p时,素域Fp中的元素用整数0,1,2,··· , p−1表示。
a) 加法单位元是整数0;
b) 乘法单位元是整数1;
c) 域元素的加法是整数的模p加法,即若,则;
d) 域元素的乘法是整数的模p乘法,即若,则。
二元扩域:
当q是2的方幂时,二元扩域可以看成上的m维向量空间,其元素可用长度为m的比特串表 示。
中的元素有多种表示方法,其中最常用的两种方法是多项式基(PB)表示和正 规基(NB)表示。 基的选择原则是使得中的运算效率尽可能高。下面以多项式基表示为例说明二元扩域。 设上m次不可约多项式(其中, i = 0,1,··· ,m−1)是 二元扩域的约化多项式。由上所有次数低于m的多项式构成。多项式集合是 F2 m 在F2上的一组基,称为多项式基。中的任意一个元素在上的系数恰好构成了长度为m的比特串,用表示。
a) 零元0用全0比特串表示;
b) 乘法单位元1用比特串(00···001)表示;
c) 两个域元素的加法为比特串的按比特异或运算;
d) 域元素a和b的乘法定义如下:设a和b对应的F2上多项式为a(x)和b(x),则定义为多项 式 对应的比特串。
椭圆曲线上点的加法
如上图所示,椭圆曲线的方程是
在椭圆曲线上取一点P,再取一点Q,连接P、Q两点作一条直线,这条直线将在椭圆曲线上交于第三点,过这个点作垂直于x轴的直线,将过椭圆曲线另一点R(一般是关于x轴对称的点),R点则被定义为P+Q的结果,即
代数计算R的过程:
直线PQ斜率
则
存在一种特殊情况,即P,Q是一点,如下图,此时过Q点的线是椭圆曲线的一条切线
此时,斜率
点R的横纵坐标计算仍然是,
二、查看数字签名算法的源码
打开文件可以看到一些注释,主要是一些声明
几乎是每个.c文件前面都有的,简单翻译了一下
打开文件可以看到头文件。
定义的全局变量
该文件中的全部函数
第一个函数sm2_sign_free
无签名的情况