零知识证明的直觉

工作时防弹衣++我意识到我对零知识证明的理解存在差距。我在文献中快速搜索,找到零知识的证据,这有助于我的理解。我发现要么协议与Bulletproof(++)太不同,要么证明似乎不完整。

例如,在Bulletproof中,从协议中删除盲值不会影响证明。这会使更改后的协议看起来像是ZK,但经过仔细检查,它不是。

为了帮助开发ZK的直觉,我为玩具ZK协议创建了一个小的演示证明。您可以在找到

https://github.com/jonasnick/little-crypto-notebook(https://github.com/jonasnick/little-crypto-notebook)

玩具协议是防弹系列防弹的一个高度简化的变体。简而言之,它证明了一个承诺值是另外两个承诺值的乘积。

我希望你也觉得这个演示很有用。如果时间允许,我的目标是继续扩展小型加密笔记本。

MuSig2:简单两轮Schnorr多重签名

摘要:多签名使一组签名者能够在给定消息上生成单个签名。最近,Drijvers等人(S&P’19)表明,到目前为止,在DL环境下(没有配对)提出的所有两轮多签名方案在并发会话下都是不安全的,即如果一个签名者同时参与多个签名会话。虽然Drijvers等人通过构造一个安全的两轮方案来改善这种情况,但节省一轮的代价是签名不够紧凑。特别是,由他们的方案生成的签名比Schnorr签名大一倍以上,Schnor签名可以说是所有实用DL签名中最自然、最紧凑的签名,因此在密码应用程序中越来越流行(例如,建议在比特币中包括对Schnorr-签名验证的支持)。如果需要一个可用于替代Schnorr签名的多签名方案,则要么被迫使用三轮方案,如MuSig(Maxwell等人,DCC 2019)或MSDL-pop(Boneh、Drijvers和Neven,ASIACRYPT 2018),要么接受签名会话只有在按顺序运行时才是安全的,这在实践中可能很难实施,例如,当多个设备使用相同的签名密钥时。

在这项工作中,我们提出了MuSig2,这是MuSig方案的一种新颖而简单的两轮多签名方案变体。我们的方案是第一个同时i)在并发签名会话下是安全的,ii)支持密钥聚合,iii)输出普通的Schnorr签名,iv)只需要两个通信回合,v)具有与常规Schnor签名相似的签名者复杂度的多签名方案。此外,我们的方案是DL设置中的第一个多签名方案,它支持除一轮外的所有轮的预处理,有效地实现了非交互式签名过程,并且不会放弃并发会话下的安全性。所有这些功能的结合使MuSig2非常实用。我们证明了随机预言机模型中MuSig2在一个多离散对数(OMDL)假设下的安全性,以及随机预言机和代数群模型组合中更有效的变体的安全性。

阅读更多Blockstream博客.

BIP-{Schnorr、Taproot、Tapscript}

  1. BIP-Schnorr摘要:本文件提出了椭圆曲线secp256k1上64字节Schnorr签名的标准。

  2. BIP-直根摘要:本文档提出了一种新的SegWit版本1输出类型,使用基于Taproot、Schnorr签名和Merkle分支的支出规则。

  3. BIP-Tapscript摘要:本文件规定了BIP341[BIP-Taproot]下初始脚本系统的语义。

一些亮点:

Protip:如果你像我一样记忆BIP数字有困难,achow101发现BIP-Taproot的数字341是BIP-143的倒数。segwit版本0事务摘要在BIP-143中定义,版本1摘要在BIP-341中定义。

MuSig-DN:具有可验证确定性非连续项的Schnorr多重签名

摘要:MuSig是一种Schnorr签名的多签名方案,支持密钥聚合,在普通公钥模型中是安全的。基于离散对数的签名的标准去域化技术(如RFC 6979)使签名过程不受随机性生成中灾难性失败的影响,但不适用于多签名,因为攻击者可以诱骗诚实的用户生成两个具有相同随机性的不同部分签名,这会泄露用户的密钥。

在本文中,我们提出了MuSig的一种变体,其中签名者以消息和所有签名者公钥的伪随机函数的形式确定性地生成他们的nonce,并通过向其签名者提供非交互式零知识证明证明了他们是这样做的。由此产生的方案,我们称之为MuSig-DN,是第一个具有确定性签名的Schnorr多重签名方案。因此,其签名协议对随机生成中的失败以及试图利用签名过程的状态性的攻击(例如,虚拟机倒带攻击)具有鲁棒性。另一个好处是,在MuSig-DN中签署会话只需要两轮,而不是之前所有Schnorr多签名(包括MuSig)所要求的三轮。为了实例化我们的构造,我们确定了一个合适的代数伪随机函数,并将该函数作为一个算术电路提供了一个有效的实现。这使得使用支持Pedersen承诺(例如Bulletproof)中给定输入的算术电路零知识证明框架高效实现MuSig-DN成为可能。我们通过在比特币中使用的secp256k1椭圆曲线上实现它来证明我们的技术的实用性。

阅读更多Blockstream博客或观看预先录制的谈话我们在CCS2020会议上作了介绍。

X-only Pubkeys和不安全的MuSig快捷方式

我最近发表了两篇文章Blockstream的工程博客扩展我在演讲中的内容2019年闪电大会。在此处交叉发布,因为它们符合此博客的主题:

  • 使用x-only Pubkeys减少比特币交易规模

    这篇文章是关于比特币改进建议中最近引入的所谓的x-only公钥BIP-施诺尔[……]显著降低了每个事务输出的权重,而不会损失任何安全性。通过从比特币中当前使用的压缩公钥中删除Y坐标字节,公钥最终会得到32字节的表示。我们将看看它是如何工作的,为什么它有用,并草拟一个安全证明。

  • MuSig中不安全的快捷方式

    使用基于BIP-Schnorr的多签名,无论涉及多少签名者,结果都是一个公钥和一个签名,与常规的单签名者BIP-Schnorr签名无法区分。本文是关于优化多重签名协议的实现,以及为什么看似无害的更改可以完全破坏安全性。

BIP-taphroot上的安全协议

打破比特币2019年在阿姆斯特丹,我做了一个关于如何在BIP-taproot上构建安全协议的演讲,或者更具体地说,如何避免迄今为止我们所了解到的危险。没有足够的时间涵盖所有内容。演讲还介绍了如何使用我们的libsecp256k1-zkp中的MuSig实现.视频录制已打开youtube(youtube)(幻灯片).多亏了坎祖尔还有一个成绩单谈话的重点。

勘误表:无法预共享MuSig nonce。只有现时承诺。请参见https://github.com/ElementsProject/secp256k1-zkp/pull/73了解详细信息。

闪电中的Schnorr和Taproot

上周末,一群黑客聚集在柏林参加第三届闪电网络黑客日。该活动充满了有趣的会议,整洁的黑客和激动人心的讨论,最后在77号房间举行了传统的晚餐和饮料。我做了一个关于“闪电中的Schnorr和Taproot”的演讲(幻灯片,视频)重点关注隐私和安全问题。

无脚本脚本中的盲签名

在最近于里斯本举行的比特币建设会议上,我就无脚本脚本框架中的一些新想法发表了演讲。第一部分主要是关于盲目的货币互换,这是一种用不倒翁交换比特币的方式,而不会透露交换的是哪种硬币。第二部分介绍如何使用无脚本脚本和Brands凭据对等交换ecash令牌。你可以找到谈话在youtube上和幻灯片在这里.多亏了坎祖尔还有一个成绩单谈话的重点。

编辑:我已经在幻灯片.简而言之,该方案的幼稚实现容易受到瓦格纳的攻击.攻击者可以使用65536个并行签名会话和O(2^32)工作。

利用一次环签名中的低阶生成器

上周,Monero团队透露基于CryptoNote的加密货币中的一个主要错误(reddit线程)可以用来创造“无限量的硬币”。Monero本身在2月份被悄悄修复(释放,拉入请求)从那以后,每一个从头开始同步区块链的用户都证明了它从未在Monero中被利用过。然而,它被用于基于CryptoNote的shitcoin ByteCoin,创造了约7亿美元稀薄空气中的硬币.

已经有一些关于这个错误的好解释,例如在Monero StackExchange现代加密邮件列表.本文提供了有关签名方案和允许此错误出现的曲线属性的附加背景。

除了风险价值之外,这个错误也很有趣,因为它显示了破坏特殊密码系统的风险,例如第25519版分开并在其他上下文中应用这些部分。Ed25519是为普通加密签名设计的,它所基于的曲线用于CryptoNote来实现一次性环形签名.与常规签名方案不同,使用曲线的一次性环签名要求签名的一部分不会生成小的子组。确保在以下情况下需要这样做使用带有辅因子的曲线CryptoNote没有这样做。