有聊区块链与加密货币系列5——比特币安全的基石:椭圆曲线方程




上数学课了,大家坐稳。
 
相信很多小伙伴听说过,比特币的密码叫做私钥,私钥一旦丢失,对应的BTC将永远封存。不存在重置私钥一说,因此私钥的保管至关重要。丢失私钥,是早期BTC持有者常犯的错误,因为当时BTC 并没有今天这么高的法币标价,因此很多人并不重视。
 
为什么私钥丢失是致命事件?可以强行破解私钥么?
 
理论上可以,答案是算到地球灭亡。
 
以今天凌晨最高全网算力纪录100EH/s来看,也就是每秒进行100*2^60次哈希运算,也就是每秒猜100*2^60次,听起来很大,但是私钥的全部可能性是2^256种,假设私钥呈现均匀分布U0,2^256),强行破解也要几亿亿亿亿亿亿年



如果还不够直观,想想如果有360个地球,每个地球上的每一克物质又变成一个新的地球,那这些地球上面的所有水分子就是所有的私钥。
 
(找是找不到的,这辈子都不可能找到的)
 
那到底是什么加密算法让比特币有如此的密码安全性呢?
 
这就是本篇的硬核内容了。


先看一个方程:
 
 
这就是比特币所使用的方程,用来保护消息摘要的真实性。这种算法叫椭圆曲线算法(Ellipse Curve Cryptography。与传统的基于大质数因子分解困难性的加密方法不同,ECC通过椭圆曲线方程式的性质产生密钥,是典型的非对称加密算法,抗暴力求解的能力极强。
 

插一句,目前我国居民二代身份证正在使用 256 位的椭圆曲线密码,比特币也选择ECC作为加密算法,也就是说比特币的密码学安全度是等同于身份证的。比特币系统不安全性的说法可以退下了。

 
 
那么椭圆曲线方程是不是就是一种椭圆方程呢?
 
 

不是的,椭圆曲线的形状并不是椭圆,只是因为椭圆曲线的描述方程,类似于计算一个椭圆周长的方程故得名。

划重点——
基本上来说,椭圆曲线方程是一个齐次方程,曲线上的每个点都必须是非奇异的,也就是光滑的,即各个维度的偏导数不同时为0
 
具体的标准式我就不贴了,有兴趣出门左转百度维尔斯特拉斯方程(Weierstrass
 
为什么椭圆曲线可以用于加密呢?
 
这就要温习前面所讲的,比特币私钥可以轻松生成公钥,而基于公钥无法反解私钥的基本常识,而比特币的私钥产生公钥的过程就是基于椭圆曲线来运算的。
 
先看一个栗子——
 

小明就读于小学二年级,会计算加法,但是不会计算除法。你是小明的怪蜀黍大强,你想出一道题给他做,让他虽然能理解题目意思但是做起来有难度:

强:小明小明,过来,叔叔问你,1+1等于几?

明:叔叔的大学白念了吧,我幼儿园就会了,等于2

强:那考你个难的,7+7等于几?

明:切,你当人家上课啃铅笔头,下课帮小红写作业都是白干的是吧。手指都不用数,等于14呗。

强:行,有叔叔当年的风采,那叔叔再问你,几个7相加等于56

明:“……”,默默掏出草稿纸、铅笔、手指头、脚趾头,进行了10分钟的深度计算:27等于1437等于2147等于28……叔叔,我算出来了,是8个,对不对?

强:好小子,叔叔就不信考不倒你。几个7相加等于864192你心中默念,以小明的计算能力,要算到这个数恐怕得一年半载的。

明:叔叔好厉害呀,我算不出来。

 
这个例子想说明的是基于加法阶数难求问题的密码方案。对于椭圆曲线密码来讲,椭圆曲线的基点就是例子里面的7,而私钥就是基点的加法阶数(例子里面的8),公钥是基点(7)进行对应阶数的加法(8次)得到的结果(56)。
 
具体来看比特币的例子——
 
以一个随机生成的私钥 k(可以理解为一个极大的数)为起点,我们将其与曲线上已定义的生成点 G 相乘以获得曲线上的另一点,也就是相应的公钥K
 

生成点是secp256k1标准的一部分,Secp256k1是指比特币中使用的ECDSA(椭圆曲线数字签名算法)曲线的参数。

 
比特币密钥的生成点都是相同的:

{K =k * G}
 
其中 k 是私钥,G是生成点,在该曲线上所得的点 K 是公钥。因为所有比特币用户的生成点是相同的,一个私钥k 乘以 G 将得到相同的公钥 Kk K 之间的关系是固定的,但只能单向运算,即从 k 得到 K
 
为了展示整数点的乘法,我们将使用较为简单的实数范围的椭圆曲线。但实际上,椭圆曲线密码里的加法是建立在“有限域上的二元三次曲线上的点”上,组成一个“有限加法循环群”,是离散的。
 
我们的目标是找到生成点 G 的倍数 k*G。也就是将 G相加 k 次。在椭圆曲线中,点的相加等同于从该点画切线找到与曲线相交的另一点,然后映射到 x 轴。
 



 
针对上面这张图说一下k*G的计算过程,这里我们假定k的值为8

1.已知椭圆曲线上的一点G,我们做其在曲线上的切线,此时切线与原本的椭圆曲线就会产生一个交点,这个点我们记作-2G,那么与-2G关于x轴对称的点就是2G了。

2.重复上面的动作,对点2G做切线,使得切线与椭圆曲线相交,交点记为-4G,再取-4G关于x轴的对称点,就得到了4G

3.再次重复前面的动作,对点4G做切线,使得切线与椭圆曲线相交,交点记为-8G,再取-8G关于x轴的对称点,就得到了8G


这里8G点就是我们所说的公钥K,点的坐标就是公钥Kxy
 
事实上,这个动作我们可以重复很多很多次,能坚持读到这里的小伙伴一定想到了,这是阿贝尔群(Abelian Group):
 
任意取椭圆曲线上两点PQ(若PQ两点重合,则作P点的切线),作直线交于椭圆曲线的另一点R',过R'y轴的平行线交于R,定义P+Q=R。这样,加法的和也在椭圆曲线上,并同样具备加法的交换律、结合律。
 

好了,上面的整个过程如果看明白了,我们接着来说为什么通过公钥K得不到私钥k

假定我们现在已知点8G(公钥K),我们可以反向推出它关于x轴的对称点-8G到了这一步我们会发现,想通过-8G反向堆出4G变成了不可能的事情。因为-8G是椭圆曲线上的一个点,在平面上过这个点有无数条直线,这里或许会有一条或者几条与椭圆曲线相切,但这些切线我们却无从求得。或许我们可以逐条测试,通过穷举法找出过点-8G且与椭圆曲线相切的直线,进而得到可能的点4G但不要忘记,我们只是进行了反向推理的第一步,我们想从4G得到2G也需要同样的计算量。

 
如果私钥是长这个样子:
 
1E99423A4ED27608A15A2616A2B0E9E52CED330AC530EDCC32C8FFC6A526AEDD
 
那么计算量将是不可想象的。


标签 私钥曲线椭圆叔叔方程

声明:
1. 版权归原作者“外汇有聊”所有, 本文转载目的在于 股票财经 爱好者个人学习使用,并不代表吉发网赞同其观点和对其真实性负责。如有侵权行为,请联系站长(webmaster@666888.net.cn),站长会尽最大努力及时删除。
2. 吉发网不提供在线交流(评论)功能,如喜欢作者的文章请点击 关注作者 扫描二维码关注"外汇有聊"后,与作者交流留言。
3. 如文章出现QQ号、QQ群、微信号、微信群,请仔细甄别,不要轻信所谓NB的战法、NB的讲师、股票推荐、不收任何费用、万人建仓等蛊惑性描述,如遭到财产损失,不要犹豫立即报警!立即报警!立即报警!
4. 欢迎推荐或自荐优秀股市财经金融公众号加入吉发网, 既可以涨粉,又能帮助股票财经爱好者学习成长,多有意义啊^_^。
5. 吉发网不接受广告合作,不接受链接交换,相关邮件一律不回!