Java教程

椭圆曲线复习

本文主要是介绍椭圆曲线复习,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

椭圆曲线复习

参考:https://blog.csdn.net/m0_54743939/article/details/121441004

椭圆曲线算法可以看作是定义在特殊集合下数的运算,满足一定的规则。

椭圆曲线在如下两个域中定义:\(F_p\)域和\(F_{2^m}\)域。

  • \(F_p\)域,素数域,\(p\)为素数;

  • \(F_{2^m}\)域:特征为2的有限域,称之为二元域或者二进制扩展域。该域中元素的个数为\(2^m\)个。

素域和扩域的介绍:https://www.cnblogs.com/pam-sh/p/16540779.html

椭圆曲线标准文档如下:

  • X9.62

Public Key Cryptography For The Financial Services Industry: The Elliptic Curve Digital Signature Algorithm (ECDSA);

  • SEC 1

SEC 1:Elliptic Curve Cryptography;

  • SEC 2

SEC 2: Recommended Elliptic Curve Domain Parameters;

  • NIST

(U.S.) National Institute of Standards and Technology,美国国家标准;

  • SM2

SM2椭圆曲线公钥密码算法第1部分:总则

这些标准一般都描述了\(F_p\)域和\(F_{2^m}\)域、椭圆曲线参数、数据转换、密钥生成以及推荐了多种椭圆曲线。

术语说明

  • 椭圆曲线的阶(order of a curve)

椭圆曲线所有点的个数,包含无穷远点;

如何确定一条曲线上的点数,即椭圆曲线的阶:

定理:\(F_p\)域上的椭圆曲线\(y^2=x^3+ax+b(a,b\in F_p,4a^3+27b^2\neq 0)\)在第象限中的整数点(包括无穷远点)共有:\(1+p+\varepsilon,|\varepsilon|\le 2\sqrt{p}\)个;若是在\(F_{2^p}\)域上,则曲线的阶数为\(2^p+1-2^{1+p/2}\le 2^p+1-2^{1+p/2}\)

例如:\(p=5\),则\(|\varepsilon|\le 4\),所以\(F_5\)上的椭圆曲线\(y^2=x^3+ax+b\)上的点数在2~10之间,\(F_{2^5}\)上的椭圆曲线的阶数为25~41之间。

  • 椭圆曲线上点的阶(order of a point)

P为椭圆曲线上的点,\(nP\)=无穷远点,\(n\)取最小整数,即是点\(P\)的阶;

  • 基点(base point)

椭圆曲线参数之一,用\(G\)表示,是椭圆曲线上的一个点,常用于密钥生成,一旦选定,不能随意更改

从数学上看:基点是椭圆曲线有限加法群的大素因子子群的一个随机选取的生成元。基点虽是随机产生的,但为保证系统安全性,一般要求所选取的基点必须具有大素数阶。

img

  • 余因子(cofactor)

椭圆曲线的余因子,用\(h\)表示,为椭圆曲线点的个数 / 基点的阶,即椭圆曲线的阶 / 基点的阶

  • 椭圆曲线参数

(1)素数域:\((p,a,b,G,n,h)\)

其中,\(p\)为素数,确定\(F_p\),\(a\)和\(b\)确定椭圆曲线方程,\(G\)为基点,\(n\)为\(G\)的阶,\(h\)为余因子。

(2)二进制扩展域:\((m,f(x),a,b,G,n,h)\)

其中,\(m\)确定\(F_{2^m}\),\(f(x)\)为不可约多项式,\(a\)和\(b\)用于确定椭圆曲线方程,\(G\)为基点,\(n\)为\(G\)的阶,\(h\)为余因子。

  • 椭圆曲线公钥和私钥

椭圆曲线的私钥是一个随机整数,小于\(n\);

椭圆曲线的公钥是椭圆曲线上的一个点:\(Q=私钥*G\)。

在线生成曲线,即点:https://graui.de/code/elliptic2/

  • 点的逆

对于一个点\(P=(x,y)\),则\((x,-y)\)就是\(P\)的加法逆元,记为\(-P\)

计算

点加

对于曲线\(E_p(a,b)\)上的两个点:\(P=(x_1,y_1),Q=(x_2,y_2)\),计算\(P+Q\):

\(\lambda=\left\{\begin{matrix}\frac{y_2-y_1}{x_2-x_2},P\ne Q \\\frac{3x_1^2+a}{2y_1},P=Q \end{matrix}\right.\)

\(x_3=\lambda^2-x_1-x_2(mod p),y_3=\lambda(x_1-x_3)-y_1(mod p)\)

点乘

点乘(倍点)支持重复加法,即\([3]P=P+P+P\)

另外还有其他的计算方法:计算\([k]P\)

参考:GMT 0003.1-2012 SM2椭圆曲线公钥密码算法第1部分:总则

以下给出三种方法:

  • 二进制展开法

image-20220809001904696

  • 加减法

image-20220809001921902

  • 滑动窗口法

image-20220809002003874

SM2

SM2使用的是素数域256位的椭圆曲线,即:

image-20220809002756666

这篇关于椭圆曲线复习的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!