Jacky Gu

xxnetwork的抗量子钱包实现原理浅析

13 Aug 2021 Share to

用过xxnetwork钱包生成钱包地址的朋友会发现,除了标准助记词外,还会生成一组抗量子签名钱包助记词,那这究竟是什么?他的工作原理和生成方式是什么?与标准助记词之间什么关系呢?

今天这篇文章就来做一个简单的分析。

原理

关于抗量子钱包和抗量子签名,xxnetwork采取了一种新的密钥生成机制,用户可以生成一个”备份密钥(back up key)”,安全地嵌套在签名方案的秘钥中。其主要原因是,在密匙泄漏的情况下,基于零知识证明的既定技术是无效的,因为密匙是公开的。另一方面,秘密的 “备份钥匙”可以用来生成”所有权证明(“proof of ownership)”,也就是说,只有这个秘密钥匙的真正主人才能生成这样的证明。

据我们所知,这种额外的安全级别是非常新颖的,如果有的话,已经可以在实践中用于加密货币的数字钱包,这些数字钱包存在账户私钥的大规模泄漏风险。在xxnetwork中,将 “所有权证明 “和”回落(Fallback)”的概念正式确定为新的属性。该方案可以与基于ECDSA签名的钱包兼容,并使用W-OTS+签名的密钥作为”备份密钥”。从而提供了一个量子安全的可选方案。这种设计允许隐藏任何量子安全签名密钥对,并不仅仅是W-OTS+。

更多技术细节,请参考David Chaum等xxnetwork核心团队写的论文《W-OTS+ up my Sleeve! A Hidden Secure Fallback for Cryptocurrency Wallets》,链接如下:https://eprint.iacr.org/2021/872.pdf

实现方案

xxnetwork基于以上论文实现了Sleeve抗量子钱包方案。

一个完整的Sleeve钱包的生成图如下:

生成钱包的输入是随机的,使用BIP39将其编码为一个助记词。然后,一个BIP44的自定义路径m/44'/1955'/0'/0'/0'被用于BIP32 HD Derivation,生成一个256位的子私钥(Child Private Key)和256位链码(Chain Code)

子私钥和链码分别作为生成WOTS+签名的密钥和公共种子,在生成WOTS+密钥后,保存量子安全公钥(Public Key, PK)。这个公钥将在未来实现全量子安全功能时作为钱包地址使用。

子私钥也被用来导出一个”袖筒私钥(Sleeve Secret Key)”。这个秘钥允许WOTS+的公钥在任何时候被安全地共享,而不影响由Sleeve产生的非量子安全密钥。这个秘钥将来会被用来将非量子安全钱包转换成WOTS+量子安全钱包

Sleeve的输出是使用SHA3_256将Sleeve的秘钥和WOTS+的公钥一起哈希生成的。然后使用BIP39对产生的哈希值进行编码,输出助记词,此助记词可用于在任何区块链平台上生成非量子安全密钥。

下图是上图中WOTS+ Key Generation放大后的技术流程:

更多细节,请加入xxnetwork中文社区讨论,或查阅:https://github.com/xx-labs/sleeve