在测PBOC 3.0中的脱机数据国密认证中,发卡行公钥证书、IC卡公钥证书、签名的静态应用数据、签名的动态数据都会用到签名验签的功能。那么验签是怎么样的原理呢?在了解验签功能之前我们来了解下签名和验签是怎么回事,下面我们先来了解一些基本知识,直接上干货吧。
一、SM2算法基本知识
SM2
是国家密码管理局于2010年12月17日发布的椭圆曲线公钥密码算法。公钥密码算法属于
非对称加密算法,
常见的非对称加密算法还有:
RSA
、
Elgamal
、背包算法、Rabin、D-H、
ECC
(椭圆曲线加密算法)。非对称加密算法需要两个密钥:
公开密钥
(publickey:简称公钥)和私有密钥(privatekey:简称私钥)。公钥与私钥是一对,如果用公钥对数据进行加密,只能用对应的私钥才能解密;反之,用私钥对数据进行加密,只能用对应的公钥才能解密。因为具备这种独特的加解密特性,非对称加密算法不仅可实现数据的加密传输,还能对数据进行签名和验签
。
SM2
算法是一种更先进安全的算法,采用是国密标准的椭圆曲线加密算法,
在
我们国家
商用密码
体系中被用来替换RSA算法。
1
椭圆曲线到底是什么样的
基于实数,
椭圆曲线看起来都是平滑,
如下图所示:
上面是两个不同椭圆曲线在坐标系中的几何表示
,
不过这个坐标系不是二维坐标系,而是射影坐标系。可以用空间思维想像一下
(
但是注意不是三维坐标系
),
打个比方,你晚上站在一个路灯前面,地上有你的影子,你本身是在一个二维坐标系
(
把你想像成一个纸片
)
,和你的影子一起构成一个射影坐标系。
曲线的每一个点
,
用三个参量表示
, (X,Y,Z)
。我们知道在二维坐标系里的每个图形都遵循一个方程,比如直接的二元一次方程是
y=kx+b,
圆的方程是
(x
-
a)2+(y
-
b)2=r2,
椭圆曲线在射影坐标系里也有自己的定义
:
Y2Z+a1XYZ+a3YZ2=X3+a2X2Z+a4XZ2+a6Z3
所有椭圆曲线上的点都满足上述方程,
a1,a2,a3,a4,a6
是系数,决定曲线的形状和位置。
二维坐标和射影坐标有一个对应关系,即
x=X/Z, y=Y/Z,
这样就可以把上面的方程转成普通的二维坐标系方程
:
y2+a1xy+a3y= x3+a2x2+a4x+a6
。
2
离散的椭圆曲线
如果我们限制曲线的点都必须是整数,曲线就变成离散,如下图所示:
再进一步限制,要求整数必须大于
0,
小于某个大整数
P,
这样就形成了一个有限域
Fp.
然后我们在这个有限域里定义一些点与点之间的加减乘除运算规则,比如
A
点加
B
点得到
C
点
(
记做
A+B≡C (mod p))
,或者
A
点乘以
n
得到
K
点
(
记做
A×n≡K (mod p))
。至于具体规则细节可以不用关心,只要知道有这样的操作即可。
选一条曲线,比如
y2=x3+ax+b
把它定义在
Fp
上
,
要求
a,b
满足:
4a3+27b2≠0
(mod p)
我们把这样的曲线记为
Ep(a,b)
加解密是基于这样的数学难题,
K=kG
,其中
K,G
为
Ep(a,b)
上的点,
k
是整数,小于
G
点
(
注意区分,不是我们平常说的那个意思
)
的阶
(
不用关心什么是点的阶
)
。给定
k
和
G
,计算
K
很容易;但给定
K
和
G
,求
k
就困难了。这样,
G
就叫做基点,
k
是私钥,
K
是公钥。
最后总结。描述一条
Fp
上的椭圆曲线,有六个参量:
T=(p,a,b,G,n,h)
。
p
、
a
、
b
用来确定一条椭圆曲线,
G
为基点,
n
为点
G
的阶,
h
是椭圆曲线上所有点的个数
m
与
n
相除的整数部分。
基本知识就到这些。