椭圆曲线密码学解释

椭圆曲线密码术是一种基于离散对数问题的非对称或公钥密码体系,如椭圆曲线上的加法和乘法运算。

A visualization of an elliptic curve 是椭圆曲线的一个例子,类似于以太坊使用的曲线。

Tip

以太坊使用与比特币完全相同的椭圆曲线,称为 secp256k1 。这使得重新使用比特币的许多椭圆曲线库和工具成为可能。

ecc-curve

Figure 1. A visualization of an elliptic curve

以太坊使用特定的椭圆曲线和一组数学常数,由国家标准与技术研究院(NIST)制定的名为 secp256k1 的标准中所定义的。secp256k1 曲线由以下函数定义,该函数产生一个椭圆曲线:

\[\begin{equation} {y^2 = (x^3 + 7)}~\text{over}~(\mathbb{F}_p) \end{equation}\]

\[\begin{equation} {y^2 \mod p = (x^3 + 7) \mod p} \end{equation}\]

mod p (模素数p) 表示该曲线在素数阶_p_的有限域上,也写作 \(\( \mathbb{F}_p \)\), 其中 p = 2256 – 232 – 29 – 28 – 27 – 26 – 24 – 1, 一个非常大的素数。

因为这条曲线是在有限的素数阶上而不是在实数上定义的,所以它看起来像是一个散布在二维中的点的模式,使得难以可视化。然而,数学与实数上的椭圆曲线的数学是相同的。作为一个例子,Elliptic curve cryptography: visualizing an elliptic curve over F(p), with p=17 在一个更小的素数阶17的有限域上显示了相同的椭圆曲线,显示了一个网格上的点的图案。secp256k1 以太坊椭圆曲线可以被认为是一个更复杂的模式,在一个不可思议的大网格上的点。

ecc-over-F17-math

Figure 2. Elliptic curve cryptography: visualizing an elliptic curve over F(p), with p=17

例如,以下是坐标为(x,y)的点Q,它是 secp256k1 曲线上的一个点:

  1. Q = (49790390825249384486033144355916864607616083520101638681403973749255924539515, 59574132161899900045862086493921015780032175291755807399284007721050341297360)

Using Python to confirm that this point is on the elliptic curve 显示了如何使用Python检查它。变量x和y是上述点Q的坐标。变量p是椭圆曲线的主要阶数(用于所有模运算的素数)。Python的最后一行是椭圆曲线方程(Python中的%运算符是模运算符)。如果x和y确实是椭圆曲线上的点,那么它们满足方程,结果为零(0L+是零值的长整数)。通过在命令行上键入+python 并复制下面的每行(不包括提示符 >>>),亲自尝试一下:

Example 1. Using Python to confirm that this point is on the elliptic curve

  1. Python 3.4.0 (default, Mar 30 2014, 19:23:13)
  2. [GCC 4.2.1 Compatible Apple LLVM 5.1 (clang-503.0.38)] on darwin
  3. Type "help", "copyright", "credits" or "license" for more information.
  4. >>> p = 115792089237316195423570985008687907853269984665640564039457584007908834671663
  5. >>> x = 49790390825249384486033144355916864607616083520101638681403973749255924539515
  6. >>> y = 59574132161899900045862086493921015780032175291755807399284007721050341297360
  7. >>> (x ** 3 + 7 - y**2) % p
  8. 0L