ECDSA算法介绍
本篇主要介绍hks_mbedtls_ecdsa.c中涉及到的加密和签名算法过程。
一、相关代码
二、算法介绍
ECDSA(Elliptic Curve Digital Signature Algorithm),椭圆曲线数字签名算法。
椭圆曲线数字签名生成
假设Alice希望对消息m mm进行签名,所采用的椭圆曲线参数为D = ( p , a , b , G , n , h ) D=(p,a,b,G,n,h)D=(p,a,b,G,n,h),对应的密钥对为( k , Q ) (k,Q)(k,Q),其中Q QQ为公钥,k kk为私钥。
Alice将按如下步骤进行签名:
其中
d
−
1
d^{-1}
d−1 is the multiplicative inverse of d modulo n.逆元。
签名的验证
为验证Alice对消息m mm的签名( r , s ) ,Bob需要得到Alice所用的椭圆曲线参数D = (p,a,b,G,n,h)以及Alice的公钥Q
正确性验证
要证明v=r,只需要证明X=dG即可。
令:
C
=
u
1
G
+
u
2
Q
=
u
1
G
+
u
2
k
G
=
(
u
1
+
u
2
k
)
G
将
u
1
,
u
2
带入:
C
=
(
e
w
+
r
w
k
)
G
=
(
e
+
r
k
)
w
G
=
(
e
+
r
k
)
s
−
1
G
由
s
=
d
−
1
(
e
+
k
r
)
m
o
d
n
得出
s
−
1
=
d
(
e
+
k
r
)
−
1
m
o
d
n
, 带入:
C
=
(
e
+
k
r
)
d
(
d
+
k
r
)
−
1
G
=
d
G
\begin{aligned} &\text { 令: } C=u_{1} G+u_{2} Q=u_{1} G+u_{2} k G=\left(u_{1}+u_{2} k\right) G\\ &\text { 将 } u_{1}, u_{2} \text { 带入: } C=(e w+r w k) G=(e+r k) w G=(e+r k) s^{-1} G\\ &\text { 由 } s=d^{-1}(e+k r) \quad \bmod n \text { 得出 } s^{-1}=d(e+k r)^{-1} \bmod n \text {, 带入: }\\ &C=(e+k r) d(d+k r)^{-1} G=d G \end{aligned}
令: C=u1G+u2Q=u1G+u2kG=(u1+u2k)G 将 u1,u2 带入: C=(ew+rwk)G=(e+rk)wG=(e+rk)s−1G 由 s=d−1(e+kr)modn 得出 s−1=d(e+kr)−1modn, 带入: C=(e+kr)d(d+kr)−1G=dG
三、参考文档
主要是参考wikipedia相关知识介绍。文档链接如下:
Elliptic Curve Digital Signature Algorithm
Elliptic Curve Cryptography: ECDH and ECDSA