数字签名算法在区块链中的应用
比特币、以太币等密码货币均采用ECDSA算法保证交易的安全性。简单的说法是:用户利用私钥对交易信息进行签名,并把签名发给矿工,矿工通过验证签名确认交易的有效性。
比特币交易流程
一笔交易信息的形成有输入和输出,输入是UTXO、解锁脚本(包含付款人对本次交易的签名()和付款人公钥())、UTXO序号(来源的),输出是发送数量、锁定脚本、UTXO序号(生成的)。
其实交易的原理,就是使用原有的UTXO生成新的UTXO,所以输入输出都有UTXO序号,注意不能混淆。脚本分为解锁脚本和锁定脚本,通常把解锁脚本和锁定脚本串联起来,才能用于验证交易的可行性。
交易的验证目的有两个:
输入的UTXO确实是付款人的
交易信息没有被篡改过
比特币交易信息示意图
比特币使用基于ECDSA签名算法,选择的椭圆曲线为secp256k1,其中曲线方程为:
y2=?x37modp
这里p?=2256?-232?-977。曲线的基点为G,其中
xG=79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798
yG=483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8
G的阶为:
n=FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141
一般而言,曲线会被分成两类:「伪随机」曲线以及Koblitz曲线。
在一条伪随机曲线里,参数a和b是从某个「种子」通过一个特定的伪随机数生成算法来生成。
例如:对于secp256r1(这是标准256位伪随机曲线)来说,它的「种子」是:
c49d360886e704936a6678e1139d26b7819f7e90
产生的参数是:?
p=115792089210356248762697446949407573530086143415290314195533631308867097853951?
a=115792089210356248762697446949407573530086143415290314195533631308867097853948?
b=41058363725152142129326129780047268409114441015993725554835256314039467401291?
一个显眼的疑问:这个种子是怎么来的?为何这个种子不是其他某个看起来更加单纯的数字,比如说15??
在斯诺登揭露的关于美国国家安全局(NationalSecurityAgency,NSA)密码标准的消息中,一个很重要的点就是说这个种子是以某种方式精心选择的,为了以某种只有NSA知道的方法来弱化这条曲线。
人物科普之斯诺登
爱德华·约瑟夫·斯诺登,前美国中央情报局职员,NSA外包技术员。因于2013年6月在香港将NSA关于棱镜计划监听项目的秘密文档披露给英国《卫报》和美国《华盛顿邮报》,遭到美国和英国的通缉。
2013年6月23日,斯诺登离开香港前往莫斯科,俄罗斯给予他一年临时难民身份。2014年8月7日,斯诺登获得俄罗斯三年的居留许可证。2017年1月,居留许可延长至2020年。2020年10月,俄罗斯给予了斯诺登永久居留权。
棱镜计划是一项由NSA自2007年开始实施的绝密级网络监控计划。该计划的正式名称为「US-984XN」。
根据报导,泄露的文件中描述PRISM计划能够对即时通信和既存资料进行深度的监听。许可的监听对象包括任何在美国以外地区使用参与计划公司服务的客户,或是任何与国外人士通信的美国公民。NSA在PRISM计划中可以获得数据电子邮件、视频和音语交谈、影片、照片、VoIP交谈内容、文件传输、登录通知,以及社交网络细节,并透过各种联网设备,如智能手机、电子式手表等各式联网设备对特定目标进行攻击。综合情报文件《总统每日简报》中在2012年中的1,477个计划里使用了来自棱镜计划的资料。
因为哈希函数的特性,NSA不能先找到一条「弱」曲线然后再去确定种子;唯一的攻击途径是尝试不同的种子,直到最后有一个种子产生了一条「弱」曲线。
如果NSA只知道一个只能影响一条特定曲线的椭圆曲线的漏洞,那么伪随机数参数的产生流程将阻止他们把那个漏洞标准化推广到其他曲线。然而,如果他们发现了一个通用的漏洞,那么流程也就不能提供保护了。
比特币使用了Koblitz曲线,它不是伪随机曲线。如果secp256r1是事实上的被NSA破解了,那么因为比特币是为数不多的几个采用secp256k1而不是secp256r1的程序,比特币真的是躲过了一颗子弹。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。