区块链隐私计算中的密码学原理及应用(2)

🔰 密码学承诺

密码学承诺是一个涉及两方的二阶段交互协议,双方分别为承诺方和接收方。

1️⃣ 两个阶段:

第一阶段为承诺级阶段,承诺方选择一个消息,以密文的形式发送给接收方。

第二阶段为验证阶段,承诺方公开消息与生成密文时的相关参数,接收方用和发送方相同的办法生成一份新的密文,两份密文一致则证明承诺可靠,否则承诺不可靠。需要说明的是承诺可以理解为只有加密过程没有解密过程,在验证阶段要么通过明文几相关参数直接验证,要么通过构造零知识证明的方法在不泄露明文的情况下完成承诺验证。

2️⃣ 两个性质:

密码学承诺有两个性质:隐藏性和绑定性。隐藏性是指承诺值(密文)不会泄露任何关于“消息”的信息;绑定性是指承诺方不能将承诺(密文)打开为非原“消息”的其他消息且验证通过。

3️⃣ 三个类别

主要有三个类别:哈希承诺、Pederson承诺、量子承诺。

【哈希承诺】:主要应用在隐私要求级别不高的场景中。如下载电影时,电影网站先计算一个要用下载电影的hash值传给用户,用户现在完电影后在本地计算一个新的关于电影hash值,如果二者相等就证明下载的电影是完整的;

【Pederson承诺】:在涉及到隐私的区块链领域应用较多,后文会详细介绍。

【量子承诺】:是为了应对量子计算可能带来对经典密码学承诺的破解风险而寻找的新的承诺方案,目前处于研究的早期阶段。

🚥 Perdeson承诺

目前加密领域常用的承诺是Pederson承诺,大部分基于椭圆曲线(EC),下面介绍计算过程。

实际应用过程举例如下:

假设小B有10个币来自两个UTXO记录分别为3个、7个,需要转8个给小V记为t,自己剩余2个记为change,为了简单忽略矿工费用。

1️⃣ 承诺生成:

2️⃣ 验证承诺

 

3️⃣ 验证者承诺验证

 

3.4 零知识证明

是密码协议的一类,简单来说就是验证者不需要知道被验证者所掌握的信息的情况下确认清楚被验证者确实有这个信息。本文不对零知识证明做展开。

✈ 软硬结合层面

3.5 TEE

Trusted Execution Environment,可信执行环境,是CPU的一块区域,可以简单理解为是一个几乎不会攻破的计算黑匣子,在隐私计算都是密文的通信环境中,TEE接受密文输入、内部进行明文计算、计算完成后加密输出。TEE内部是明文计算,可以在保证计算效率的前提下完成隐私保护。输入是密文因此需要TEE和通信的另一方(用户/节点等)采用上面介绍的密钥共享进行密钥共享完成数据解密。TEE实现隐私保护时需要软件层面的密码学算法做支持。

下面举例说明区块链中结合了TEE后的一次通信流程:

1️⃣ 发送者:

1、发送者生成DES密钥,并对交易信息进行加密

2、用TEE节点(TEE也有一个公钥一个私钥)公布出的公钥对DES密钥进行加密

3、交易信息签名

4、交易密文、DES密钥密文、数字签名形成的数字信封发送给TEE节点

2️⃣ TEE节点:

1、TEE用私钥解密加密信息的DES密钥

2、DES密钥解密信息

3、交易信息经验证、计算、加密后输出对账本做更新

可以发现TEE节点公钥加密的信息只有TEE节点可以揭秘。因此当进行隐私交易时,用户只需把隐私信息通过TEE公钥进行加密并通过数字信封和TEE节点进行信息交互就可以。

4、主要隐私项目用什么工具来解决隐私问题?

✏ 从账本底层逻辑上看,涉及到隐私的几乎所有项目都采用了UTXO模型,尽管相比UTXO模型,账户模型有更好的编程性,但其和隐私的契合度要差很多。

✏ 从实现隐私的技术方案上看,项目团队按各自的理解,有的运用软件为主的密码学算法,有的用软硬件结合的密码学方案完成隐私项目构建。

下面分别从匿名币、layer2隐私方案、隐私公链及其他涉及到的隐私项目四个方面介绍各自的实现技术方案选择及方案是如何做到隐私保护的。

4.1 匿名币

匿名币的主要作用是来完成交易功能本身的隐私,本身不具备可编程性,主要介绍DASH、Monero、Zcash。

📀 DASH

运用的主要技术是混币(coinjoin),具体过程是:

1、混币节点收集一段时间内的有转账需求的用户的转账申请

2、将所有发送方的金额按标准数值进行拆分,基数是0.001、0.001、0.01、0.01等

3、将标准化的币按发送方约定数量发送给接收方

可以看出,整个过程实现了发送方和接收方的隐私(对混币节点不匿名),金额隐私、账户隐私并未做到。身份验证、金额确认和双花问题和无隐私功能的以太坊中用到的密码学算法类似不做展开。

📀 Monero

1️⃣ 基本情况:

采用类似BTC的UTXO账本模型,账本中维护这两个“表”(实际是两棵默克尔树),一个包含了过去的输入输出变化,另一个包含了已经花费的UTXO的秘钥镜像。Monero每个用户有两个密钥对,一个叫做secret spend key,主要用于解锁属于自己的未花费UTXO,另一个叫做secret view key是发送方用来生成一次性公钥和地址的。

2️⃣ 转账过程:

3️⃣ 实现效果:

发送者隐私、身份认证、交易内容隐私(交易金额隐私)、金额确认;

发送者通过一次性私钥进行环签名,并通过Pederson承诺的方式提交转账信息,验证者可以通过非对称加密完成身份认证,并通过Pederson承诺的同态可加性+零知识进行范围证明完成交易合法性认证。

4️⃣ 双花问题:

每一笔输入被花费时,需要向账本提交钥匙镜像,当同一笔输入被进行多次花费时在达成共识阶段只会接受部分合法转账。

📀 Zcash

1️⃣ 账本结构:

Zcash采用UTXO式的账本结构,账本中的每条输入输出记录称为一条note,一条note包含有如下的变量:

持有者的公钥: a_pk,数量: v,代表 note 的代币数值,随机数: r1,随机数: r2, 是每一条 note 的唯一标识。

当一条 note 被消费了之后,这个值会被放置到 Nullifier 表中,代表这条 note 已经被消费了。一条note通过向量的形式可以表示为:note = <a_pk , v , r1 , r2>,每条note的向量表示形式如下表所示:

2️⃣ 默克尔树:

在Zcash的账本同时还存在两个“表格”(其实是两棵默克尔树),分别是:Commitment和Nullifier。简单展示如下表,第一列的 Hashed notes 就是 Commitment;第二列的 Nullifier set 就是 Nullifier。Commitment 存储的是所有note的hash值 ,Nullifier存储的是已经被消费的note的hash值。假设下表是当前链上所有活动记录:

可以看出,Nullifier Set 中记录了 r22 的哈希值,表明 note2 已经被消费掉,不能在继续进行使用。note1、 note3、note4、 note5仍可继续使用。

3️⃣ Zcash密钥系统:

Zcash有两套密钥系统:Sprout和Sapling,Sapling更复杂、隐私保护效果也更好,但为了理解主要过程,就以Sprout密钥系统为例进行说明。

上图中的Curve25519是一种椭圆曲线(ECC)可以用来实现ECDH。ECDH是前面介绍的密钥共享协议DH的一种实现方式。因此可以忽略上图的具体加密算法细节,关注架构,其中:

 

上图解释了发送者在生成新的note后将使用权限通过链上发送给了接受者,具体过程如下:

 

下面以Zcash中z-address间隐私转账流程为例说明Zcash如何实现隐私保护:

 

完成交易后表一的内容更新为如下表所示:

 

上述过程中,Zcash通过生成一次性地址实现了发送者、接收者隐私和账户隐私,通过非对称加密实现了身份认证,通过Pederson承诺和零知识证明完成金额隐私、金额确认(细节可参考Pederson承诺介绍部分),通过账本中存储的Nullifier表结合共识过程解决了双花问题,通过改进版的DH协议将新生成note的使用权限分享给接收方。

4.2 隐私公链

💈 Secret network

1️⃣ 基本情况:

1、在网络中有非隐私交易和隐私交易两种。非隐私交易和现在的公链交易类似;隐私交易在TEE环境中执行。

2、隐私币sToken的交易信息、账户信息是以加密的形式存在链上,感觉是用TEE环境的公钥加密的信息(这部分未找到相关资料属于推断信息),在当TEE环境需要隐私信息时从链上调用到环境内进行解密。

3、没有生成过sToken的用户只有一个密钥对用来进行非隐私交易,生成后为了能查看sToken余额及和TEE环境进行通信完成隐私交易,本地钱包会给用户新生成一个私钥称为viewing key。

2️⃣ 交易流程:

1、用户通过数字信封技术(参考工具部分介绍)和TEE(验证节点)进行通信,通信内容是发送方、币种、数量及接收方地址

2、TEE通过非对称加密技术验证发送者身份,并通过调用加密账本信息完成余额确认

3、账本共识

4、将共识后需要更新的账本信息用TEE公钥加密后存储进加密账本

5、转账完成,接收者可以通过viewing key查看自己的账户余额信息

3️⃣ 总结:

整个转账过程中,采用非对称加密技术完成发送方身份确认;TEE通过调用加密账本信息完成余额确认;共识过程解决双花问题;外界只知道发送者和某个sToken发生了交互,但具体做什么不清楚,因此保证了发送者、接收者隐私及交易金额隐私,用户隐私账户中的余额是加密的不对外可见的因此保证了账户隐私。

💈 以太坊layer2— —Aztec

这是一个基于zk-SNARK的、支持隐私的以太坊lyer2方案,支持编程级隐私,账本结构是UTXO,账本中包含两个“表”,一个是所有note集合,一个是已花费note的集合,使用的编程语言比较特殊是Nior。

下面主要介绍Aztec如何实现转账隐私的。

场景:小B有在以太坊上有10个dai,需要转移8个给小V自己剩余2个,转移完成后双方各自退出资产回到以太坊,过程如下:

1、小V将以太坊上的10个Dai转移到Aztec中,生成zDai。这部分是公开的。

2、类似Secret network用会户生成一个新的公钥、私钥对

3、小V生成Pederson承诺,并提交自己想花费note的hash和新生成note的哈希

4、验证者通过Pederson承诺的同态可加特性及零知识证明完成对余额的确认

5、更新账本中的两个“表”,完成note所有权转移记录

6、Aztec将保密金额转成公开金额,然后通过跨链桥退出资产

4.3 其他隐项目

前面的文章介绍的内容更多的是“账户级别的隐私”,即使在上述各种隐私技术的保护下也是可以监控到某笔交易的发起IP。市场内实现IP级别隐私+区块链的项目也在逐渐成熟,最具有代表性的就是Nym,技术实现上可以简单理解为是暗网(洋葱网络)的架构加入了区块链的激励措施,基于区块链的激励机制使暗网进行IP匿名的混淆网络节点更多、更健壮。

 

由上图可以看到,Nym相当于两个网络,一个Nym Mix Node网络来进行IP匿名,Nym blockchain负责激励。IP匿名的主要技术是混淆网络,混淆网络具体过程如下:

假设网络中有n个节点,每个节点的公钥是公开的

1、信息发送方随机选取网络中的k个节点作为加密路径,这k个节点的公钥分别是,是发送方公钥,是接收方公钥

2、发送者将钥发送的信息m使用k个公钥逐次进行加密,每次加密的信息中需要包含下一个解密节点

3、发送者发送消息,消息经过之前定义好的路径进行传送,当节点i时,i用私钥解密信息

4、如果i是信息接收者则可以直接解密出信息,完成消息传递,如果不是,则从解密消息中确定下一个节点,然后将消息发送给从解密的信息中了解到的下一个节点

整个传输过程像一个被包裹了k层的包裹被逐渐打开的过程,中间节点只能知道它的上一个和它的下一个节点,但它不能确定上是否一个节点是起始点、下一个节点是终点,因此达到了IP保护的目的。需要说明的是整个网络比上面介绍的要复杂很多,过程中还涉及到信息的标准化、打散等操作来混淆信息,本文不做展开。

4.4 总结

整理如下:

四、总结

✅ 区块链领域关于隐私最宏大的叙事就是Web3.0的个人数据确权,如果数据确权成为共识,隐私保护技术将是上层所有应用的基础。但这并不容易,需要一般用户认识到数据隐私的重要性,个人认为只有在一些项目能够实现个人数据的价值发现后,数据确权才能成为共识。

✅ 鉴于以上的行业叙事需要和现实的匿名交易需求,区块链领域的隐私保护中出现了匿名币、隐私公链、IP隐私等项目。为了通过技术将区块链和隐私更好的结合在一起,不同的项目团队选择了。技术上从单纯的依靠密码学算法发展到了密码学算法和硬件的结合。密码学算法主要应用对称加密算法、非对称加密算法、密码共享算法、密码学承诺及基于这些基础密码学技术衍生出的混合技术。硬件主要是TEE环境的应用。

✅ 需要说明的是,本文从匿名币、layer2、隐私公链中选取了代表性项目进行了说明,市场上还有非常多的匿名币项目、隐私网络没有在文章中介绍,如oasis、phala、manta等,这些网络根据自己的项目定位确定了各自的实现方案,但其中涉及到的关键技术基本已经在上文中进行了介绍。

五、参考链接

1、知乎 - 安全中心

2、RSA(非对称加密)与ECC(椭圆曲线加密)的区别_cqu_jiangzhou的博客-CSDN博客_rsa 椭圆曲线

3、密码学原语如何应用?解析密码学承诺的妙用_优优财经

4、Greg Maxwell. Confidential transactions. Xiph.org ~ greg/confidential_values.txt [On-line; accessed 04/04/2018]

5、ECC椭圆曲线加密算法:ECDH 和 ECDSA - 知乎

6、Zcash - 各种密钥和签名,你懂吗?_TurkeyCock的博客-CSDN博客

7、https://bytecoin.org/old/whitepaper.pdf

8、Blog | Secret Network - Bringing Privacy to Blockchains, Smart Contracts & Web3

9、Zcash whitepaper - whitepaper.io

10、Research | Aztec

11、https://zh.wikipedia.org/wiki/%E5%AF%86%E7%A0%81%E5%AD%A6

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值