分分钟搞懂 RFC6979

昕阳小编 92 0

分分钟搞懂 RFC6979-第1张图片-昕阳网

一个词——RFC 尚力财经小编20226979(http://tools.ietf.org/html/rfc6979)在随机系列讲座中被多次提及。很多人问小泰,“6979是什么?”这个看似“神秘”的词,其实没那么复杂,也可以简单的解释清楚。

看完random系列的童鞋们,你们现在应该明白K值对于比特币(不仅仅是比特币,是整个椭圆曲线家族)的重要性了吧?K值(签名)的公开相当于私钥的公开,所以:K值必须是保密的和唯一的,不一定是随机的!

因为历史上出现过太多伪随机数失败的情况,所以有人想出了一种确定性地生成k值的方法,这种方法也保证了“保密性”和“唯一性”。最后变成了编号为6979的规范,即:RFC6979。

为了生成一个确定性的保密且唯一的k值,我们首先尝试写出这样一个简单的公式:

k=sha 256(d HASH(m));

其中d是私钥,m是消息,我们通常对消息的HASH进行签名,所以这里是HASH(m)。

好吧,其实只有这么简单的公式就足够满足我们的需求了。因为参数中有私钥D,保证了“机密性”,再加上消息M,保证了“唯一性”。这也是一种“确定性尚力财经小编2022 ”算法。只要SHA256是安全的,这个算法就是安全的,完美的。

这个公式如果只是针对比特币的话已经很不错了,但是考虑到RFC6979针对的是密码学的统一规范(不仅仅是比特币),更复杂的情况(更多的曲线,更多的参数,更多的算法等)。)应该考虑。所以实际的RFC6979要比上面的公式复杂得多,代码实现起来也多得多。

算法可以很复杂,代码可以很长,但原理是一样的。应该使用私钥来保证“机密性”,应该使用消息来保证“唯一性”,然后应该使用确定性和不可逆的方法来执行计算。最后,计算出的K值是安全的。

RFC 尚力财经小编2022 6979算法的完整实现。Java语言可以引用bitherj项目所依赖的SpongyCastle中的HMacDSAKCalculator类,Objective-C语言可以引用bitheri项目。(https://github.com/bither/)

通过使用RFC6979,可以有效降低比特币签名对随机数质量的要求。现在,你只需要做两件事:

私钥的随机数足够“真”;私钥存储足够冷;你的比特币是安全的。

钱包开发者们,赶紧支持RFC6979吧!

作者:比特钱包官方微博:@比特钱包http://weibo.com/bither官网:http://bither.net捐赠地址:1 BST womax 3 ayx 9 NC 8 gdghzzzamgm 669 BC 3

标签: do 2022

抱歉,评论功能暂时关闭!

微信号已复制,请打开微信添加咨询详情!