跳转至

Chapter 07 : 椭圆曲线(Elliptic Curve)算法

约 726 个字 1 张图片 预计阅读时间 4 分钟

ECC 算法简介

椭圆曲线可以定义成所有满足方程 \(E:y^2=x^3+ax+b\) 的点 \((x,y)\) 所构成的集合,若 \(x^3+ax+b\) 没有重复的因式或 \(4a^3+27b^2\neq 0\)(称为判别式),则 \(E:y^2=x^3+ax+b\) 成定义成为一个群、


数学基础

运算规则

椭圆曲线在素域 \(Z_{p}\) 上的运算规则如下:

  • \(P+O=O+P=P\)
  • 如果 \(P=(x_{1},y_{1}),Q=(x_{2},y_{2})\),且有 \(x_{1}=x_{2}\) 以及 \(y_{1}=y_{2}=0\),或有 \(x_{1}=x_{2}\)\(y_{1}=-y_{2}\neq 0\),则 \(P+Q=0\)
  • 如果 \(P=(x_{1},y_{1}),Q=(x_{2},y_{2})\),且排除上述两种情况,则 \(P+Q=(x_{3},y_{3})\),其中:
    • \(x_{3}=\lambda^{2}-x_{1}-x_{2}\)
    • \(y_{3}=\lambda(x_{1}-x_{3})-y_{1}\)
    • \(P\neq Q\) 时,\(\lambda=\frac{y_{2}-y_{1}}{x_{2}-x_{1}}\)
    • \(P=Q\) 时,\(\lambda=\frac{3x_{1}^{2}+a}{2y_{1}}\)

欧拉准则

\(p>2\) 是一个素数,\(x\) 是一个整数,\(\gcd(x,p)=1\),则:

  • \(x\) 是模 \(p\) 的平方剩余当且仅当 \(x^{\frac{(p-1)}{2}}\equiv 1(\text{ mod }p)\)
  • \(x\) 是模 \(p\) 的平方非剩余当且仅当 \(x^{\frac{(p-1)}{2}}\equiv -1(\text{ mod }p)\)

点加运算

对于一条椭圆曲线,其由 6 个参数 \(a,b,p\)(确定素域 \(Z_{p}\) 上的椭圆曲线)和基点 \(G\)\(G\) 的阶以及余因子,其中:

  • 余因子为曲线的阶(即曲线上点的个数)除以 G 的阶,此值通常为 1
  • 基点 G 是曲线上的一个点,通常是一个随机选取的点
  • G 的阶是指 G 点的倍点数,即 \(kG=O\) 的最小正整数 \(k\),其中 \(O\) 是椭圆曲线上的无穷远点

假设我们有 \(G=(2,7),a=1,b=6,p=11\),点加运算 \(2G\) 方法如下:

  • \(\lambda=\frac{3x_{1}^2+a}{2y_{1}}=8\text{ mod }11\)
  • \(x_{3}=\lambda^2-x_{1}-x_{2}=8^2-2-2=5\text{ mod }11\)
  • \(y_{3}=\lambda(x_{1}-x_{3})-y_{1}=8(2-5)-7=2\text{ mod }11\)
  • 因此 \(2G=(5,2)\)
  • 以此类推可以算到 \(13G=O\)

ECC 算法难以破解的重要原因在于其将 \(k\) 作为私钥,将 \(kG\) 作为公钥,且 \(k\) 的值通常非常大(比如 256 位),从 kG 算出 kG 很容易,但从 kGG 反推出 k 是极其困难的,因此无法通过暴力破解来找到 \(k\) 的值


ECC 加解密

ECC 算法将一个点 \(R=d*G\) 作为公钥点,私钥 \(d\) 是一个随机数,且 \(d<n\),其中 \(n\)\(G\) 的阶

加密而成的密文包括两部分:

  • \(r=(k*G).x\),其中 \(k\) 是一个随机数且 \(k<n\)
  • \(s=m*(k*R).x\text{ mod }n\),其中 \(m\) 是明文

解密过程为 \(m=\frac{s}{(dr).x}=\frac{m*(kR).x}{(d*(kG)).x}=\frac{m*(k*d*G).x}{(k*d*G).x}\)


ECC 算法签名验证

ECDSA

ECDSA 签名过程为 \(r=kG,s=\frac{m+r*d}{k}\),其中 \(k\) 为随机数,\(m\) 为明文/Hash,\(d\) 为私钥

验证过程为 \((m/s)*G+(r/s)*R==r\),如果伪造 \(m\)\(d\),都无法通过验证


ECNR

ECNR 签名过程为 \(r=kG+m,s=k-r*d\)

验证过程为 \(r-(s*G+r*R)==m\)

评论