解密椭圆曲线签名
今天终于了解了一番神奇的非对称加密算法:椭圆曲线乘法为什么无法反推了,下面介绍一波.
1.椭圆曲线是一个二维的散点图
这里用NIST设立的一条椭圆曲线函数来介绍,因为这条曲线就是比特币使用的.这条曲线就是secp256k1标准定义的.公式如下:
mod 表明曲线实在素数的限定域中的,也写作,的取值为:,是一个很大的整数。
容易看出椭圆曲线是一个二维的散点图。函数散点图很难画,本人手绘是画不出来滴,那么我会画一份简化了n倍的图用来做说明.
2.椭圆曲线加法
小学老师告诉我们:研究乘法,必须先研究加法
在椭圆曲线中,任意两个点的和必然存在于曲线上.数学定义如下:
如果和是相同的,那么两点的连线就是该点的切线;如果p1是无穷远点(理解为加法中的零)。那么,类比。
这就是椭圆曲线加法的定义。
3.椭圆曲线乘法
那么在乘法中的应用就简单了,无非就是两两相加。这里会介绍比特币的那个乘法:。是私钥,是一个随机常数,则是计算出来的公钥。
上面的乘法等效为:
每两个来看,G+G就是G的切线和曲线的交点对x轴映射取点。那么
。得G的乘法示意图:
从一个G开始,2G就是。同理可得的结果。当然了,如果是奇数,那么就是。运算就是做一次两点连线延长相交于曲线的点对x轴映射即可。
4.椭圆曲线签名很难反推
接下来思考一下,对于,为什么已知输出和,为什么推导不出呢?
其实这里存在一个误区,这里的乘法是椭圆曲线乘法,并不是小学的乘法。从上面的计算可以得知,
是在曲线上反复做切线,并对x轴取映射点。也就是说,你是无法通过输出和常数点来知道你是通过多少次的运算得来的,除非你一次计算每一个数值。而这个数值很大很大。
这个数值是一个真实的随机生成的私钥。如果你要反推,那么你的一个个遍历这个随机数,计算量就是到的阶乘的椭圆曲线乘法运算量了,所以在得出了大家常知的结论:椭圆曲线签名很难反推