【参考资料】
椭圆曲线
数学上定义满足如下方程的点的集合称之为椭圆曲线:
$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加解密流程如下:
- Alice选择一条曲线E、基点P和阶数n;
- Alice选择一个阶数k<n(私钥),得到P在k次运算后的点
$P_k$(公钥) - Aliec发送曲线E、P和
$P_k$至Bob - Bob收到信息后首先将明文信息(当前假设只有一个值)对应到E上的某个坐标点M,同时取随机阶r
- Bob计算两个值
$C_1=M+rP_k \quad C_2=rP$,并发送给Alice - Alice收到这两个值通过
$M=C_1-kC_2$得到明文
基于椭圆曲线的数字签名(ECDSA)
ECDSA 签名及验证流程如下:
签名的步骤:
- Alice选择一条曲线E、基点P和阶数n;
- Alice创建一对秘钥,其中私钥是
$d_A$(一个小于n的整数),公钥是$Q_A = d_A \times G$ - Alice要对明文m进行签名;
- Alice首先计算m的hash值,例如SHA-2等,得到e=hash(m);
- 取e最左侧的n位(n为阶数),得到
$z=L_n$; - 在[1,n-1]之间取密码安全的随机整数k;
- 计算其对应曲线上的一个点
$(x_1, y_1) = k \times G $ - 计算得到
$r=x_1 \quad mod \quad n$,如果是0,则回到第5步重取随机数 - 计算得到
$s=k^-1(z+rd_A) \quad mod \quad n$如果n为0,则回到第5步重新开始 - Alice得到签名(r, s)
验证的步骤:
- Bod得到公钥
$Q_A$、曲线G、阶数n、签名对(r, s)和hash算法; - Bob计算m的hash值,得到e=hash(m);
- 取e最左侧的n位(n为阶数),得到
$z=L_n$; - 计算得到
$w=s^{-1} \quad mod \quad n$; - 计算得到
$u_1=zw \quad mod \quad n$和$u_2=rw \quad mod \quad n$ - 计算得到一个曲线上的点
$(x_1, y_1)=u_1 \times G + u_2 \times Q_A$ - 若
$r = x_1(mod \quad n)$则证明签名是正确的
ECC164位的**产生一个安全级,相当于RSA 1024位**提供的保密强度,而且计算量较小,处理速度更快,存储空间和传输带宽占用较少。目前我国居民二代身份证正在使用 256 位的椭圆曲线密码,虚拟货币比特币也选择ECC作为加密算法。我理解在ECDSA中之所以有了SHA的hash还要再用EC的原因也在于此,用更小的计算量得到更高的加密等级。