Bitcoin Forum
June 25, 2024, 02:30:34 AM *
News: Latest Bitcoin Core release: 27.0 [Torrent]
 
   Home   Help Search Login Register More  
Warning: One or more bitcointalk.org users have reported that they strongly believe that the creator of this topic is a scammer. (Login to see the detailed trust ratings.) While the bitcointalk.org administration does not verify such claims, you should proceed with extreme caution.
Pages: [1]
  Print  
Author Topic: [20141208]分分钟搞懂 RFC6979  (Read 643 times)
fanbeila (OP)
Hero Member
*****
Offline Offline

Activity: 714
Merit: 500


View Profile
December 08, 2014, 02:33:03 AM
 #1

随机系列谈中多次提到了一个词 – RFC6979( http://tools.ietf.org/html/rfc6979 )。
不少人问小太“到底什么是6979?”,这个看起来很“神秘”的词其实也没那么复杂,同样可以用简单的方式来讲清楚。

看过随机系列谈的童鞋现在应该明白k值对于比特币的重要性(不仅仅是比特币,对于整个椭圆曲线家族来说都是如此)了吧?暴漏k值(签名)相当于暴漏私钥,因此:
k值必须是保密且唯一的,并不一定必须随机!

由于历史上发生过太多次伪随机数失败案例,有人想出了一种用“确定性”方式来产生k值的方法,同样保证了“保密”且“唯一”,最后成为一个编号为6979的规范,即:RFC6979。

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

k = SHA256(d + HASH(m));

其中,d是私钥,m是消息,我们一般会对消息的HASH进行签名,因此这里是HASH(m)。

好了,满足我们的需求其实只需要这么个简单的公式就足够了,因为参数里有私钥d,就保证了“保密”,再加上消息m,保证了“唯一”,这也是“确定性”的算法,只要SHA256是安全的,此算法就是安全的,很完美。

如果仅仅是针对比特币而言,这个公式已经很好了,但考虑到RFC6979面向的是密码学(不仅仅是比特币)的统一规范,要考虑更多的复杂情况(更多曲线、更多参数、更多算法等),因此,实际上的RFC6979要比上述公式复杂得多,代码实现起来也要多得多。

算法可以复杂,代码可以很长,但原理都一样,要用私钥来保证“保密”,要用消息来保证“唯一”,再使用确定的、不可逆的方法来进行运算,最终计算出来的k值就是安全的。

RFC6979算法的完整实现,Java语言可参考bitherj项目所依赖的SpongyCastle中HMacDSAKCalculator类,Objective-C语言可参考bitheri项目。( https://github.com/bither/

通过使用RFC6979,我们就可以有效降低比特币签名对于随机数品质的要求,现在,您只要能做到两件事:

① 私钥这个随机数足够“真”;
② 私钥存储足够“冷”;您的比特币就是安全的。

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

作者:比太钱包
官方微博:@比太钱包 http://weibo.com/bither
官网:http://bither.net
捐赠地址:1BsTwoMaX3aYx9Nc8GdgHZzzAGmG669bC3

        ▄▄▀▀▀▀▀▀▀▀▀▄▄
     ▀▀ ▄▄▀▀▀▀▀▀▀▄▄ ▀▀▄
  ▄  ▄▀▀           ▀▀  ▀▄
 ▄▀ █      ▐█ █▌      █ ▀▄
▄█ █     ▄███████▄     █ █▄
█ ▄▀    ██▀▐█ █▌▀██     █ █
█ █     ██ ▐█ █▌ ██     █ █
█ ▀▄    ██▄▐█ █▌███    ▄▀ █
▀█ █     ▀████████▄    █ █▀
 ▀▄ ▀      ▐█ █▌ ▀█▌  █ ▄▀
  ▀▄  ▀▄           ▄▄▀  ▀
    ▀▄▄ ▀▀▄▄▄▄▄▄▄▀▀ ▄▄
       ▀▀▄▄▄▄▄▄▄▄▄▀▀
      █▀▀▀▀▀▀▀▀▀▀▀▀█
▄▄▄▀▀▀█   ▄▄▄▄▄▄   █
█     █ ▄▀      ▀▄ █
 █  ▄██ █        █ █
 █  █ █ █        ▀ █
  █ █ █ █ ▄█▄█▄  ▀ █
  █  ██ █  █▄▄█▄ █ █
   █ ██ ▄ ▄█▄▄▄█ █ █
   █  █ ▄  ▀ ▀   █ █
    █ █ █        █ █
    █ █ ▀▄      ▄▀ █
     ██   ▀▀▀▀▀▀   █
      █▄▄▄▄▄▄▄▄▄▄▄▄█
.PLATINUM  STABLECOINS
..USDQ KRWQ CNYQ JPYQ...

─────────────────────────
▄▀▀▀▀▀▀▀▀▀▀▀▀▀▀▄
█▄▄▄▄▄▄▄▄▄▄▄▄▄▄█
█              █
█              █
█              █
█              █
█              █
█              █
█              █
█              █
█▀▀▀▀▀▀▀▀▀▀▀▀▀▀█
█     ████     █
▀▄▄▄▄▄▄▄▄▄▄▄▄▄▄▀
██████
██
██







██
██
██████
██████
██
██







██
██
██████
▬▬▬▬▬▬▬▬   WHITEPAPER   ▬▬▬▬▬▬▬▬
...FACEBOOK... .....TWITTER..... ...TELEGRAM...
▬▬▬▬▬▬▬▬   ANN THREAD   ▬▬▬▬▬▬▬▬
Pages: [1]
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!