【参考资料】

椭圆曲线

【超级账本】前置知识点-ECC

数学上定义满足如下方程的点的集合称之为椭圆曲线:

$Y^2X+a_1XYZ+a_3YZ^2=^3+a_2X^2Z+a_4XZ^2+a_6Z^3$

参考文件中的图例,在离线的椭圆曲线上定义了一个运算,即从P点坐标 + P点坐标 = R点坐标。通过这个运算在椭圆曲线的集合上构建了一个群,
这个群是一个有限循环群。
可以理解为 $\left\{ P, P^2, P^3, ....., P^n \right\}$

由于群的封闭性,你总可以有一个P点,然后经过k次加法(跳转后)达到一个点R。同时由于群的可逆性也可以从R点反推回P。

所以这里所谓群的概念与算法本身无多大关系,只是从理论上证明了这种跳转用于加密的合理性,诸如封闭、可逆等等

椭圆曲线加密(ECC)

椭圆曲线加密和RSA一样是一种非对称加密算法,核心也是某个运算正向处理很简单,而反向处理非常困难。在RSA中利用的是两个大质数求积很容易,但反向分解出两个大质数则很难。

同样对于ECC而言,由P(通常称为G点)经过k(k<=n)次后得到$P_k$运算简单,而已知P和$P_k$求k非常困难 实际运用中P、n会取的相当大!!!

备注:这里的n称为阶,应具备$n \times G = 0$

ECC加解密流程如下:

  1. Alice选择一条曲线E、基点P和阶数n;
  2. Alice选择一个阶数k<n(私钥),得到P在k次运算后的点$P_k$(公钥)
  3. Aliec发送曲线E、P和$P_k$至Bob
  4. Bob收到信息后首先将明文信息(当前假设只有一个值)对应到E上的某个坐标点M,同时取随机阶r
  5. Bob计算两个值$C_1=M+rP_k \quad C_2=rP$,并发送给Alice
  6. Alice收到这两个值通过$M=C_1-kC_2$得到明文
基于椭圆曲线的数字签名(ECDSA)

ECDSA 签名及验证流程如下:

签名的步骤:

  1. Alice选择一条曲线E、基点P和阶数n;
  2. Alice创建一对秘钥,其中私钥是$d_A$(一个小于n的整数),公钥是$Q_A = d_A \times G$
  3. Alice要对明文m进行签名;
  4. Alice首先计算m的hash值,例如SHA-2等,得到e=hash(m);
  5. 取e最左侧的n位(n为阶数),得到$z=L_n$
  6. 在[1,n-1]之间取密码安全的随机整数k;
  7. 计算其对应曲线上的一个点$(x_1, y_1) = k \times G $
  8. 计算得到$r=x_1 \quad mod \quad n$,如果是0,则回到第5步重取随机数
  9. 计算得到$s=k^-1(z+rd_A) \quad mod \quad n$ 如果n为0,则回到第5步重新开始
  10. Alice得到签名(r, s)

验证的步骤:

  1. Bod得到公钥$Q_A$、曲线G、阶数n、签名对(r, s)和hash算法;
  2. Bob计算m的hash值,得到e=hash(m);
  3. 取e最左侧的n位(n为阶数),得到$z=L_n$
  4. 计算得到$w=s^{-1} \quad mod \quad n$;
  5. 计算得到$u_1=zw \quad mod \quad n$$u_2=rw \quad mod \quad n$
  6. 计算得到一个曲线上的点$(x_1, y_1)=u_1 \times G + u_2 \times Q_A$
  7. $r = x_1(mod \quad n)$则证明签名是正确的

ECC164位的**产生一个安全级,相当于RSA 1024位**提供的保密强度,而且计算量较小,处理速度更快,存储空间和传输带宽占用较少。目前我国居民二代身份证正在使用 256 位的椭圆曲线密码,虚拟货币比特币也选择ECC作为加密算法。我理解在ECDSA中之所以有了SHA的hash还要再用EC的原因也在于此,用更小的计算量得到更高的加密等级。

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-11-29
  • 2021-12-11
  • 2021-06-20
  • 2021-09-23
猜你喜欢
  • 2022-01-18
  • 2022-12-23
  • 2021-11-21
  • 2021-04-17
  • 2021-10-09
  • 2021-07-05
  • 2022-12-23
相关资源
相似解决方案