图解漏洞CVE-2020-0601中涉及的ECC签名算法ECDSA

这是第一个由美国国安局(NSA)所发现并主动提交给微软的安全漏洞。

CVE-2020-0601漏洞位于Window的加密组件CryptoAPI。 CryptoAPI是微软提供给开发人员的Windows安全服务应用程序接口,可用于加密的应用程序,实现数据加密、解密、签名及验证等功能。

由Crypt32.dll提供的Microsoft Windows CryptoAPI无法以正确验证ECC证书的信任链。攻击者可以利用该漏洞伪造受信任的根证书签发证书。ECC椭圆曲线加密(Elliptic curve cryptography)于1985年由Neal Koblitz和Victor Miller分别独立提出的公钥密码算法。

 

算法见

ANS X9.62, Public Key Cryptography for the Financial Services Industry: The Elliptic Curve Digital Signature Algorithm (ECDSA).

签名

  1. 输入:
    1. 待签名的消息M杂凑值转化为域上整数记为e
    2. 签名者用户A的私钥dA(A的**对包括其私钥dA公钥PA=[dA]G= (xA,yA))
  2. 输出:
    1. 数字签名(r,s)

图解漏洞CVE-2020-0601中涉及的ECC签名算法ECDSA

 

 

5.4 验签

  1. 输入:
    1. 待签名的消息M杂凑值转化为域上整数记为e
    2. 签名者用户A的公钥PA(A的**对包括其私钥dA公钥PA=[dA]G= (xA,yA))
    3. 数字签名(r,s)
  2. 输出:验证通过或失败。

图解漏洞CVE-2020-0601中涉及的ECC签名算法ECDSA

 

原理

验证流程5计算的点(x1; y1) 和签名步骤2计算的点( x1, y1 )相等。

计算流程

(x1; y1)

= [u1]G + [u2]PA

= [es-1]G + [rs-1]·[dA]G

= [s-1]·[e+r·dA]G

= [k(e+r·dA)-1]·[e+r·dA]G

= [k]G

= ( x1, y1 )