关注 “
币圈邦德
” 获取专业区块链资讯及服务!
UTC时间7月6日晚18点,Pieter提出了比特币新的BIP(比特币改进建议):
Schnorr签名
。有比特币社区成员推测这项Schnorr的签名被最终接受的可能很大,也有消息表示Schnorr的开发工作主体已经基本完成。
BIP声明:
https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2018-July/016203.html
什么是Schnorr签名?
Schnorr签名并不是一项新技术,它是一种电子签名方案,最早在1989年被
Claus P.Schnorr
提出并注册专利。经过多年的验证,2012年Seurin已经为Schnorr方案提供了确切性证明。
Schnorr安全性证明论文:
https://eprint.iacr.org/2012/029.pdf
当前版本比特币协议使用的ECDSA签名方案(椭圆曲线数字签名)。多年来,关于将更好用的Schnorr签名方案加入到比特币协议中这件事,一直是社区希望看到的结果。看到Pieter终于提出BIP,我相当乐观,给大家科普一下。
比特币协议现行ECDSA是什么?
ECDSA是一种相当安全的签名生成算法,假如Alice想向Bob发送签名信息,他们在曲线参数(CURVE,G,n)达成一致的前提下,由Alice使用HASH加密,并提供随机数k。
随后Bob在作为接受方需要对Alice发送的签名进行简易的计算验证。比特币在9年运行中一直没出现过问题,安全性有目共睹。不过曾经由比特币安卓客户端由于随机数k泄露造成比特币损失,但是这不是ECDSA的问题,而是客户端的问题。
Schnorr则是另一种替代性签名方案,效率更高,隐私性更好。
隐私性:
Schnorr签名方案可将多个交易输入的签名整合成一个,显著提高了效率和隐私性。
可延展性:
ECDSA签名是可延展性的,第三方在没有私钥的情况下,可将给定公钥和消息的现有有效签名更改为对同一密钥和消息有效的另一个签名,而Schnorr是不可延展性的。
安全性证明:
在随机预言机模型中,Schnorr的验证非常简单,ECDSA不存在这种证明。
Schnorr密码学实现参考:
https://github.com/sipa/bips/blob/bip-schnorr/bip-schnorr.mediawiki
为什么Schnorr
可以提高隐私性呢?
用Schnorr签名方案前,在多个交易输入时,举例如上图,每个地址都需要提供一个自己签名信息,占据了很多体积。如果应用Schnorr签名方案之后,理论上这些地址只需提供一个共同签名即可,可以极大地节省空间。另外,通过这种多重签名方式,可以显著提高隐私性,在追溯比特币来源时将会更加困难。
另外,Schnorr也会让盲签名更加容易,意味着签名者可以在请求者的请求直接签署 ,而无需知晓签署内容。举个例子,如果引入了一个第三方机构,双方交易者可以不知晓对方的情况进行交易,而且由于盲签名的设置可以让双方无须相信第三方机构。
那…为什么之前不上
Schnorr签名方案呢?
之前之所以一直没有考虑将Schnorr签名方案加入到比特币协议中,是因为由于签名信息位于区块内,改ECDSA为Schnorr需要对比特币协议进行硬分叉。而硬分叉升级一直不是比特币社区欢迎的方法,而且硬分叉和升级理论上也不是同一概念,虽然在BCH社区一直有意无意将硬分叉概念等同于升级概念。
但这显然是不正确的。历史上BCH经过硬分叉,每次对外都声称是升级,比如去掉EDA(一种挖矿机制)。
由于目前全网的SigWit(隔离见证)使用率已经显著提高,签名信息不再位于区块内,这给Schnorr签名提供了不硬分叉的解决方案。
另一个原因就是,Schnorr一直是有专利保护的,创始人
Claus P.Schnorr
拥有对Schnorr签名方案20年的专利保护期。因此在比特币开发阶段,并没有其他系统使用Schnorr签名的方案,安全性不可知。
但随着专利解锁,部分系统尝试使用Schnorr签名方案,以及对Schnorr的密码学论证的完善。Schnorr已经从实践角度和理论角度被认为是安全的签名方案。
事确实是好事,Schnorr签名方案在安全性没有削弱的前提下,既减小了体积,又增强了隐私性。但是我对强隐私性这一点还有很有顾虑的。
强调隐私性的加密数字货币协议有很多,零知识证明的ZCash,混币的Dash,环签名技术的门罗等。
Zcash是首个使用零知识证明机制的区块链系统,其中有一份作废账本。在转账过程中,转账者的地址里生成的一张支票放到作废账本里。同时,接收者的地址生成一张和转账者支票面额相等的支票。
记录者(矿工)只需要把转账者的支票记录到作废账本里,并收到一张新的支票。在这里支票就是一串编号,矿工不能看到转正金额以及双方是谁。验证一个地址是否有这笔钱只需要查找作废账本里这笔钱是否已经作废了,所以也不需要知道地址的余额。
Dash达世币之前叫暗黑币,转账的时候采用混币机制,将同一个时间的不同交易混在一起,我们就会看到区块上记录的是一堆地址转账给一堆地址,不能看出是哪个地址转账给了哪个地址。