Idea 来自 Cris、Cipher
越来越多的企业与投资机构正涌入区块链行业。与个人用户使用的冷热钱包保护资产不同,企业与投资机构由于资金量大而需要更高级别的安全性,多方密钥托管服务应运而生。多方密钥托管是指资产需要M个中的N个密钥(M>N)才能够转移,其中部分密钥由专门的托管方所保护。目前的密钥托管服务存在隐私性不足的问题,面临着权威机构的审查与干预的风险。本文提出一种基于 BLS 和盲签名的多方密钥托管服务以解决上述问题。
多重签名技术
多方密钥托管服务以 Bitcoin 的多重签名技术为最基本实现。BTC 的多签技术最初在 BIP11 进行了论述。假设一个 2/3 的多重签名钱包,通过将某一个密钥托管至专业的托管方,必须有2个以上的密钥才能够转移该资金。这防止了单一密钥的风险,黑客盗取某一密钥将无法转移资金。于此同时,这也能够防止密钥丢失的问题:假设丢失了其中一个私钥,用户也能够再次设置另外一个 2/3 多重签名,并写入重新生成的公钥即可。除此之外,多签技术的应用领域广泛。在企业中,多签技术能够防止单一人员控制企业资产的风险。在商业交易中,假设交易双方互不信任,可以使用多签技术选择独立第三方作为交易签名者,以防止某一交易方的不诚信行为。
多重签名技术极大地提升了资产的安全性,并拓展了区块链的应用场景。但是多重签名技术的隐私性并无法得到保障,在解锁多签脚本时将暴露多签的公钥:
m {pubkey}...{pubkey} n OP_CHECKMULTISIG
公钥隐私(地址)的暴露便捷了权威机构的审查与干预,权威机构可以根据多签公钥快速定位托管方以及审查对象,并要求当地运营的托管方对某些用户拒绝提供签名服务,甚至强制资产转移。
BLS 签名技术
面临该问题,BLS 签名技术提供了相对好的隐私性。就功能来说,BLS 签名所能够实现的功能与目前 BTC 的多重签名是一致的,但在链上仅表现为单一聚合签名。在具体的实现中,BLS 签名将密钥拆分成 N 份分发给 N 人,只需要有 M(M 小于等于 N) 人进行签名,就可以进行解签并转移该密钥下的数字资产。在采用 BLS 签名的情况下,参与多签的用户与托管者信息及其数量从未暴露。但是当用户需要使用该资金并请求托管方进行签名时,用户需要将交易哈希发送至托管方进行签名。如果交易成功上链,托管方就能够掌握用户的公钥,也因此本质问题并未解决。
多方盲签名技术
根据上文的论述,只需要在用户请求托管方签名时,不传递交易哈希(或者其他可能暴露用户信息的数据)就可以将用户信息与托管方相隔离,间接地解决上文的诸多问题。此处需要引入盲签名的概念。盲签名 是由 David Chaum 于1982年提出,其一般在这种场景下使用:用户A的交易需要用户B进行签名,且不希望用户B知道签名信息。结合 BLS 签名与盲签名技术,多签隐私问题就能够被妥善地解决,其具体流程如下;
- 用户为多个资产托管方生成私钥份额,并通过秘密的方式发送给对应的托管方;
- 当用户需要对消息签名时,先对消息进行盲化处理,然后再发送给选定的托管方进行签名;
- 托管方响应用户的签名请求,将盲化交易签名后发送给用户;
- 用户收集好一定数量的托管方签名后,进行去盲操作,计算出用户自己的签名。
图1. 密钥分发
图2. 交易签名
Binggo!通过这种方式,托管方不仅无法掌握用户的公钥信息,在类似 Bitcoin、Ethereum 这样交易量大的区块链,亦不可能锁定用户的交易信息。用户既能够享受到多签技术带来各种优势,也具备了良好的隐私性,因此避免了上述的负面因素。在这种方案下,托管方所承担的责任也仅仅是维护私钥份额的安全,与用户进行了风险隔离。
Nervos 能更好地适配新的密码学算法
具备隐私特性的多签算法能够扩展区块链的应用场景,但是并非所有的区块链都支持 BLS 签名。BLS 签名的验签速度低于目前比特币使用的 ECDSA 算法,更低于Blockstream 团队所建议的 Schnorr 签名算法。 因此,将 BLS 签名算法作为区块链预设的签名算法会极大地降低整体区块链的吞吐量。对于大多数只支持单一签名算法的区块链来说,BLS 签名算法不是好的选择。
Nervos 为此给出了答案。Nervos CKB 应用层优势2:安全与便捷兼得 谈到:和几乎所有的公链项目不同,Nervos CKB 将密码学算法作为抽象的原语与底层剥离。用户可以指定自己的资产或合约采用任意预定义的密码学算法验证授权。这意味着在 Nervos 上可以部署任何种类的密码学算法作为交易的验签算法,无需通过硬分叉的方式来支持。相信 Nervos 的这一特性能够促进更多的密码学创新应用出现。