function.md 4.7 KB

椭圆曲线加密算法,即:Elliptic Curve Cryptography,简称ECC,是基于椭圆曲线数学理论实现的一种非对称加密算法。相比RSA,ECC优势是可以使用更短的密钥,来实现与RSA相当或更高的安全。据研究,160位ECC加密安全性相当于1024位RSA加密,210位ECC加密安全性相当于2048位RSA加密。

椭圆曲线在密码学中的使用,是1985年由Neal Koblitz和Victor Miller分别独立提出的。

椭圆曲线

一般情况下,椭圆曲线可用下列方程式来表示,其中a,b,c,d为系数。

E:y2=ax3+ bx2+cx+d

例如,当a=1,b=0,c=-2,d=4时,所得到的椭圆曲线为:

E:y2=x3-2x+4

定义椭圆曲线的运算规则

加法

过曲线上的两点A、B画一条直线,找到直线与椭圆曲线的交点,交点关于x轴对称位置的点,定义为A+B,即为加法。

二倍运算

上述方法无法解释A + A,即两点重合的情况。因此在这种情况下,将椭圆曲线在A点的切线,与椭圆曲线的交点,交点关于x轴对称位置的点,定义为A + A,即2A,即为二倍运算。

正负取反

将A关于x轴对称位置的点定义为-A,即椭圆曲线的正负取反运算。

无穷远点

如果将A与-A相加,过A与-A的直线平行于y轴,可以认为直线与椭圆曲线相交于无穷远点。

综上,定义了A+B、2A运算,因此给定椭圆曲线的某一点G,可以求出2G、3G(即G + 2G)、4G......。即:当给定G点时,已知x,求xG点并不困难。反之,已知xG点,求x则非常困难。此即为椭圆曲线加密算法背后的数学原理。

有限域上的椭圆曲线运算

椭圆曲线要形成一条光滑的曲线,要求x,y取值均为实数,即实数域上的椭圆曲线。但椭圆曲线加密算法,并非使用实数域,而是使用有限域。按数论定义,有限域GF(p)指给定某个质数p,由0、1、2......p-1共p个元素组成的整数集合中定义的加减乘除运算。

假设椭圆曲线为y² = x³ + x + 1,其在有限域GF(23)上时,写作:y² ≡ x³ + x + 1 (mod 23)此时,椭圆曲线不再是一条光滑曲线,而是一些不连续的点,如下图所示。以点(1,7)为例,7² ≡ 1³ + 1 + 1 ≡ 3 (mod 23)。如此还有如下点:(0,1) (0,22)  (1,7) (1,16)  (3,10) (3,13)  (4,0)  (5,4) (5,19)  (6,4) (6,19)  (7,11) (7,12)  (9,7) (9,16)  (11,3) (11,20)  等等。

另外,如果P(x,y)为椭圆曲线上的点,则-P即(x,-y)也为椭圆曲线上的点。如点P(0,1),-P=(0,-1)=(0,22)也为椭圆曲线上的点。

生成密钥和地址

​ 考虑一条椭圆曲线
$$ y^{2}=x^{3}+ax+b(mod\ p) $$ ,其上有点 G, G 的阶为 n 。任选整数 l<k<n ,计算K=kG,则整数 k 和点 K,被称为一对密钥, k 为私钥, K 为公钥,点G 被称为基点 。 从椭圆曲线上点的运算法则来看 ,己知 G 和 K,逆向计算 k 是困难的, 一般只能通过枚举整个解空间求解。于是,在实际使用中,将模数 p 和 点 G 的阶 n 取相 当大的值,通过枚举计算 n-1 个解点从 K 来逆 向求解 k 是困难的,这就是椭圆 曲线加密算法的数学依据。

数字签名与认证

1)数字签名

假设某数字货币采用椭圆曲线加密,己知选用的椭圆曲线,基点为 G。前文提到,有效交易的每个输入单元都必须是有效的,如果张三要创建一条有效交易,如何用单个 UTXO 创建每一个输入单元呢?大致分为以下 5 个步骤。 第 l 步,张三在区块链中找到指向自己地址 A 的 UTXO 。 第 2 步,将交易的输入单元指向该 UTXO ,即定位指针指向该条 UTXO 在区块链中的位置,同时将自己钱包中与地址 A 对应的公钥 K 放入其中。 第 3 步,张三选择一个随机数此,一条公开明文 m,并将公开明文 m 的哈希值转换成整数 h 。 第 4 步,计算点 rG=rk • G,并令严r=rG.x , 然后计算 s=(h+k • r)/rk,其中 k 为与公钥 K对应的私钥。 第 5 步,张三将 r,s 放到输入单元中,则输入单元创建完成。 以上过程就是数字签名的过程,也称私钥加密, r,s 也被称为数字签名,实质是一对整数点。

2 )验证签名

李四是如何验证张三创建的输入单元的有效性呢?李四接收到输入单元后,会利用签 名 r,s 和公钥 K 执行如下 4 步操作。 第 1 步,李四将输入单元中的公钥 K 转换成地址 A’,如果 A '=A ,执行下一步。 第 2 步,李四将公开明文 m 用与张三一样的方式转换成整数 h 。 第 3 步,李四计算点 P=h • G/s+r • K/s 。 第 4 步,判断r=P.x,为真则验证通过,否则验证不通过。