【密码算法 之十四】非对称算法,ECC椭圆曲线算法 之 ECDSA、ECDH、SM2、SM9等

1. ECC椭圆曲线

  ECC(Elliptic Curve Cryptography),就是椭圆曲线密码算法,它是基于椭圆曲线数学理论实现的一种非对称加密算法。相比RSA,ECC优势是可以使用更短的密钥,来实现与RSA相当或更高的安全,RSA加密算法也是一种非对称加密算法,在公开密钥加密和电子商业中RSA被广泛使用。据研究,160位ECC加密安全性相当于1024位RSA加密,210位ECC加密安全性相当于2048位RSA加密(有待考证)。
  ECDSA(Elliptic Curve Digital Signature Algorithm)算法是基于 ECC 的的一种签名算法,广泛用于区块链、HTTPS 等需要非对称加密的场景。

1.1 曲线类型

  曲线分为素数域曲线、二元域曲线。

  • 素数域:P-192、P-224、P-256、P-384、P-521
  • 二元域:K-163、K-233、K-283、K-409、K-571、B-163、B-233、B-283、B-409、B-571

1.2 曲线标准

  曲线标准主要有:SECG / NIST / WTLS / ANSI X9.62 / RFC 5639 / SM2

  • SECG
    (1)SECG(Standards for Efficient Cryptography Group),高效密码学标准组织(SECG),它是一个行业联盟,成立于1998年,旨在开发商业标准,输出SEC标准规范;
    (2)SECG成员包括信息安全行业的领先技术公司和关键行业参与者。主要输出SEC的规范;
    (3)SECG官网:https://www.secg.org/

  • NIST
    (1)NIST(National Institute of Standards and Technology),是美国国家标准技术研究所,前身是美国国家标准局,目前是隶属于商务部的政府实验室。主要从事标准测量方面的研究,职能类似中国计量院或者法国的LNE,为业界提供国家计量标准,计量检测和校准技术,参加标准委员会制定标准等,但本质上还是一个大型的实验室。有两个分部,一个在马里兰州的Gaithersburg,一个在科州的Boulder;
    (2)NIST是美国的标准,并不是世界标准;
    (3)NIST官网:https://www.nist.gov/

  • WTLS
    WTLS(Wireless Transport Layer Security),无线传输层安全,它是无线应用协议(WAP)的安全级别,特别是针对使用WAP的应用程序。
    官网:https://www.techtarget.com/searchmobilecomputing/definition/Wireless-Transport-Layer-Security

  • ANSI X9.62
    该项目始于1995年,并于1999年正式作为ANSI标准颁布。ANSI X9.62具有高安全性和通用性。它的基域可以是Fp,也可以是F2m。F2m中的元素可以以多项式形式或正规基形式来表示。若用多项式形式,ANSI X9.62要求模多项式为不可约三项式,标准中提供了一些不可约三项式,另外还给出了一个不可约五项式。为了提高通用性,针对每一个域提供了一个模多项式。若使用正规基表示方法,ANSI X9.62规定使用高斯正规基。椭圆曲线最主要的安全因素是n,即基点阶,ANSI X9.62的n大于2160。椭圆曲线是使用随机方法选取的。ANSI X9.62规定使用以字节为单位的字符串形式来表示曲线上的点,ASN.1语法可以清楚地描述域参数,公钥和签名。

  • RFC5639
    ECC曲线标准
    官网:https://www.rfc-editor.org/

  • FIPS 186-2
    1997年,NIST开始制定包括椭圆曲线和RSA签名算法的FIPS 186标准。1998年,NIST推出了FIPS186,它包括RSA与DSA数字签名方案,这个方案也称为FIPS 186-1。1999年NIST又面向美国G0vment推出了15种椭圆曲线。这些曲线都遵循ANSI X9.62和IEEE 1363-2000的形式。2000年,包含ANSI X9.62中说明的ECDSA,使用上述曲线的FIPS 186-2问世。

    扫描二维码关注公众号,回复: 16176612 查看本文章
  • SM2
    SM2是国家密码管理局于2010年12月17日发布的椭圆曲线公钥密码算法。
    SM2是基于椭圆曲线的非对称算法,相对于RSA算法,SM2具有密钥更小,运算速度更快,相同密钥长度下具有更高安全性等优势。

  • IEEE 1363-2000
    该标准于2000年作为IEEE标准问世。IEEE 1363的覆盖面很广,包括公钥加密,密钥协商,基于IFP、DLP、ECDLP的数字签名。它与ANSI X9.62和FIPS 186完全不同,它没有最低安全性限制(比如不再对基点阶进行限制),用户可以有充分的自由。

OpenSSL NIST SECCG ANSI
prime192v1 nistp192 secp192r1 prime192v1
secp224r1 nistp224 secp224r1
prime256v1 nistp256 secp256r1 prime256v1
secp384r1 nistp384 secp384r1
secp521r1 nistp521 secp521r1
sect163k1 nistk163 sect163k1
sect163r2 nistb163 sect163r2
sect233k1 nistk233 sect233k1
sect233r1 nistb233 sect233r1
sect283k1 nistk233 sect283k1
sect283r1 nistb283 sect283r1
sect409k1 nistk409 sect409k1
sect409r1 nistb409 sect409r1
sect571k1 nistk571 sect571k1
sect571r1 nistb571 sect571r1

1.3 表示方法

  椭圆曲线其实是一个数学方程,通常用下面的方程式来表示:y2 = (x3 + ax + b) mod p

  如果a和b取的值不同,那么对应的曲线形状也会不一样,如下图:
在这里插入图片描述

1.4 曲线运算

  椭圆曲线的运算有多种,包括:点加(Point Addition)、点乘(Point Multiplication)、倍点(Point Double)等。

1.4.1 点加(Point Addition)

在这里插入图片描述

  1. 两点决定一条直线,也就是说,我们定义通过两个点(P,Q) 做一条直线,找到这条直线和EC曲线相交的那个点(图1中R’点)
  2. 根据点加法运算的定义,可以得到 P+Q+R’=0 ,那么 P+Q=−R’ , − R’的定义是关于 x 轴对称所得到的一个点R,如上图所示,这就是点加法的定义

1.4.2 点乘(Point Multiplication)

  “点加”是ECC计算中最基本和原始的概念,它描述群当中的两个元素(点)之间的操作,实际运算中大量使用的是“点乘”。但是不要被点乘这个名字所迷惑,其实它描述的是:对同一个点进行多次操作时的规则。
  很多常见的写法例如 kG,很容易误导初学者,其实这个kG描述的其实是:针对点G进行“k-1”次点加操作。比如k = 4,如何计算4G呢,既然我们知道如何任意两个点的点加,那么计算4G无非就是:
  第1步:计算G+G得到2G
  第2步:计算2G+G得到3G
  第3步:计算3G+G得到4G,计算完成。

1.4.3 倍点(Point Double)

  倍点其实就是点加的特殊运算,当P和Q完全重合时,就变成了倍点运算。如下图:
在这里插入图片描述

2. ECDSA

  ECDSA,即ECC椭圆曲线签名算法。设私钥、公钥分别为d、Q,即Q = dG,其中G为基点。

2.1 私钥签名

签名过程如下:

  1. 选择随机数r,计算点rG(x,y);
  2. 根据随机数r,消息M的哈希值h、私钥d,计算出 s = (h + dx)/r;
  3. 将消息M和签名值(rG, s)发给接收方;

举例:假设要签名的消息是一个字符串:“Hello World!”。

  1. 是对“待签名的消息”生成一个消息摘要,不同的签名算法使用不同的消息摘要算法,而ECDSA256使用SHA256生成256比特的摘要;
  2. 产生一个随机数k,利用随机数k,计算出两个大数r和s。将r和s拼在一起就构成了对消息摘要的签名;

2.2 公钥验签

  1. 接收方收到消息M、以及签名{rG=(x,y), s};
  2. 根据消息求哈希h;
  3. 使用发送方公钥Q计算:hG/s + xQ/s,并与rG比较,如相等即验签成功(原理:hG/s + xQ/s = hG/s + x(dG)/s = (h+xd)G/s = r(h+xd)G / (h+dx) = rG))。

3. ECDH

  ECDH 是椭圆曲线的笛福赫尔曼算法的变种,它其实不单单是一种加密算法,而是一种密钥协商协议,也就是说 ECDH 定义了(在某种程度上)密钥怎么样在通信双方之间生成和交换,至于使用这些密钥怎么样来进行加密完全取决通信双方。

ECDH的工作流程如下:
(1)Alice 和 Bob 生成各自的私钥和公钥。
  Alice的私钥为 dA,公钥为 HA = dAG
  Bob的私钥为 dB,公钥为 HB = dBG

Alice 和 Bob 需要使用一样的主要参数:在同一条曲线的同一个有限域上选择一样的基点 G。

(2)Alice和Bob通过不安全信道交换各自的公钥 HA HB,中间人可以窃听到和,但是在无法攻破离散对数难题的情况下无法得到 dA dB
(3)Alice计算 S = dAHB(使用自身的私钥和Bob的公钥),Bob计算 S = dBHA(使用自身的私钥和Alice的公钥),双方求得的S是一样的,因为 S = dAHB = dA(dBG) = dB(dAG) = dBHA

4. SM2

  SM2是国家密码管理局于2010年12月17日发布的椭圆曲线公钥密码算法。
  SM2是基于椭圆曲线的非对称算法,相对于RSA算法,SM2具有密钥更小,运算速度更快,相同密钥长度下具有更高安全性等优势。
  国密SM2算法标准包括5个部分:

  • GMT 0003.1-2012 SM2椭圆曲线公钥密码算法第1部分:总则
    主要介绍了ECC基本的算法描述,包括素数域和二元扩域两种算法描述
  • GMT 0003.2-2012 SM2椭圆曲线公钥密码算法第2部分:数字签名算法
    这个算法不同于ECDSA算法,其计算量大,也比ECDSA复杂些,也许这样会更安全吧
  • GMT 0003.3-2012 SM2椭圆曲线公钥密码算法第3部分:密钥交换协议
    与ECDH功能相同,但复杂性高,计算量加大
  • GMT 0003.4-2012 SM2椭圆曲线公钥密码算法第4部分:公钥加密算法
    使用ECC公钥进行加密和ECC私钥进行加密算法,其实现上是在ECDH上分散出流密钥,之后与明文或者是密文进行异或运算,并没有采用第3部分的密钥交换协议产生的密钥。
  • GMT 0003.5-2012 SM2椭圆曲线公钥密码算法第5部分:参数定义
    给出了SM2使用素数域256位椭圆曲线参数

  SM2与RSA的比较如下:

算法 SM2 RSA
算法结构 基于椭圆曲线(ECC) 基于椭圆曲线(ECC)
计算复杂度 完全指数级 亚指数级
存储空间 192~256bit 1024~8192bit
秘钥生成速度 较RSA算法快百倍以上
解密加密速度 较快 一般

4.1 数字签名

待添加

4.2 秘钥交换

待添加

4.3 加密

待添加

4.4 解密

待添加

5. SM9

待添加

6. 总结

待添加

猜你喜欢

转载自blog.csdn.net/KXue0703/article/details/130121498
今日推荐