数字资产转账、交易的匿名和隐私实现: 环签,同态承诺及零知识范围证明

简介: 去中心化的隐私币平台 ▸

匿名化数字资产: 将任意数字资产转化成隐私币n ▸

去信任托管: 去中心化的数字货币托管方法 ▸

匿名转账数字资产不受追踪 ▾

所有的公开透明的数字资产一经匿名化以后就可以像隐私币一样实现转账、存储和交易的完全隐匿和无法追踪。托管机制可以记录新生成了多少隐私币种但却不会知道这些隐私币后来是如何使用的。任意一种隐私币的交易都是隐匿无法被追踪的。Incognito 使用了多种加密基元,如可链接环签方案、同态承诺方案和零知识范围证明来屏蔽掉发送接收地址和交易数量。

可兑换: 货币隐私的基础

在Incognito网络上生成的所有隐私币种都是可兑换的这也是资产最基本的要求之一。 任一单位货币都可以和另一种货币进行等值互换。

大多数的数字货币如BTC, ETH等的交易记录是可追踪的,所以他们不具备可兑换的属性。 如果BTC曾在任何时候涉及非法活动将会被作为被污染的BTC列入黑名单,人们可以拒绝接收,持有者也会被迫低价出售。

相反,美元是可以替代的,是一种可以和任何一种货币兑换而不改变它之前价值的货币。在Incognito上发行的所有隐私币种都具有这种可兑换的重要属性。

环形签名: 屏蔽发送地址

环签技术即一组成员代表小组进行签名而不暴露签名者的身份[Chaum and Van Heyst, 1991; Fujisaki and Suzuki, 2007; Van Saberhagen, 2013]。 通过为小组的每个成员提供平等地参与签名的机会,从而保证了签名者的匿名性。

特征 1. 屏蔽了签名人的身份信息。比如,你遇到由Annie, Bob, John和Peter的公钥进行的环形签名则可以声称这些用户之一是签名者但无法查明到底是谁。

小组的形成是自发的。不存在管理员也没有暴露真正签名者身份信息的风险。由于这些性质,我们称它为特别小组或者环。签名者可以通过简单地收集组内其他成员的公钥形成小组。从历史交易中提取出来的这些分组成员通常被称为decoys或mixins。统一签名为签名者提供了匿名性。

Incognito的环签是用来授权未花费的交易输出即“UTXO”而无需暴露输出者的身份。环形包括实际花费的UTXO及其诱饵,即历史交易的各种随机输出。实际的UTXO和诱饵共同构成了交易的输入。对公众而言,任意一个交易输入都等同于实际交易输出的产出。

特征 2. 环签的可视化。环签的概念最初是作为告密的方式被提出来的[Rivest et al., 2001]

由于没有一种方式可以验证哪个UTXO已被消费,这就导致存在双花的风险 [Finney, 1993]。为了解决这个问题,我们采用了环形签名的变体 – 可链接环签[Liu et al., 2004], 从而使其具有另外一种属性:可链接。有了可链接属性后,在同一公钥下发布的签名无论是签署同一消息还是不同消息时,都有一个唯一的标识符 – 一连串序列号。有了序列号任何人都可以验证同一组成员是否签发了两个签名而不需要知道签名者是谁。 序列号是从所使用的每个UTXO派生而来的,并且是每个环签名的一部分。所有已使用序列号的列表将作为交易数据的一部分永久存储起来,因此任何想要再次使用已有序列号造成双花风险的新环签将自动被拒绝。

隐地址: 屏蔽接收地址

在加密网络中如Bitcoin或Ethereum是需要公开的地址来让每个人查看在该地址上发生的交易记录的[Reid and Harrigan, 2013]. 这些交易是公开透明的很容易联系在一起推断账户的金额及交易模式。

为防止交易链接, Incognito 会自动生成多个一次性公钥 – automatically creates multiple one-time public keys – one for each incoming transaction. 一次性公钥即隐地址可以被看作一个充值的箱子只有接收人才能打开并消费里面的资产。

特征 3. 生成多个单一一次性密钥

隐地址是基于Diffie-Hellman密钥交换协议[Diffie and Hellman, 1976], 这种加密方法可以使两个用户在对方可以在观察他们通信情况下创建一个共享机密。

每个Incognito地址包括一个public view key 和一个public spend key. 每个Public spend key 有一个相应的private spend key来审核每笔交易。同样, 每个public view key 有一个相应的private view key来接收转账。

当Alice转账隐私币给Bob, Alice 用 Bob的 public view key和public spend key以及一些随机性生成Bob新UTXO的一次性公钥, 只有Bob可以通过这一次性公钥计算出相应的公钥。

Bob用private view key 通过浏览进来的交易从而识别发送给他的UTXO. 一旦UTXO被发现, Bob就可以用一次性公钥生成一个对应的私钥。Bob可以通过private spend key花消费UTXO.

特征 4. 隐地址

所有的交易数据都在Incognito公链上,任何人都可以查看新交易的产生但不暴露与此次Bob相关交易的一次性公钥。简而言之,如果Bob是一个商人,没人能够知道Bob是和Alice做生意。

机密交易: 屏蔽交易数量

机密交易能够屏蔽交易数量[Maxwell, 2015]. 任何人都能看到隐私币在Incognito公链上进行交易但无法查询到交易数量。

特征 5. 机密交易数量

基本理念是按照Pedersen Commitments[Pedersen, 1991] 方式承诺交易输入和输出数量。 Pedersen Commitment 是一种由价值本身和一种被称为“致盲因子”并有效防止他人猜测价值的随机性构成的承诺。提交者会在后面揭示价值和致盲因子以便每个人使用他们来验证承诺是否符合规则。

特征 6. 承诺用零知识范围证明来验证其有效性

这种方法首要的问题是验证者无法验证交易,特别是交易输入和输出的总和。

为了解决这个问题,我们在每笔交易中都包含了验证机密交易有效性的零知识证明。零知识证明[Goldreich et al., 1991] 是指证明者能够在不向验证者提供任何有用的信息的情况下,使验证者相信某个论断是正确的。

由于一种被称为同态[Gentry and Boneh, 2009]或可延展性的加密特性,一个交易的所有输入承诺可以相加为单个输入承诺。同样,所有产出承诺可以加起来成为一项产出承诺。承诺的总和是对潜在价值的总和的承诺,而致盲因子则是个体承诺中致盲因子的总和。

事实证明,零知识承诺是有效的公钥,其中对应的私钥是致盲因子。发送人针对两个承诺分别进行签名以确保账户余额真实存在。通过将此承诺作为环成员包括在环签名中,发送者用作为private spend key之一的致盲因子来签署交易以做出声明。

这种方法的第二个问题是攻击人可以凭空铸币并通过承诺是负数来增发隐私币。

为此, 我们每个输出承诺与一个范围证明相关联[Boudot, 2000; Morais et al., 2019]。一个范围证明证明了输出的数量是正的,在区间[0,264],而没有揭示实际的数量。验证者可以验证交易是否合法,而不需要知道实际传输的金额。

为了实现范围证明,我们使用了弹证明[Bunz et al., 2018]]。子弹证明是一种短的非交互式零知识证明,旨在实现高效的机密交易,不需要可信设置。子弹证明将旧的范围证明的大小从~5KB减少到只有700字节。子弹证明也支持聚合,聚合几个范围证明只会增加几百个字节的大小。

分片实现大规模隐私 ▸

共识: PoS, pBFT和BLS 结合▸

Incognito 软件栈: 浏览Incognito源代码 ▸

Incognito 性能 ▸

网络奖励: 隐私平台币(PRV) ▸

用户创建的隐私币 ▸

应用场景: 隐私稳定币,去中心化隐私交易所,匿名加密工资单及更多▸

未来方向: 智能合同、机密资产、机密知识产权等等 ▸

结论、致谢和参考文献▸

3 Likes