币非凡 - 区块链|交易所导航 www.bifeifan.com
当前位置:网站首页 > 新闻 > 正文

硬核科普:隐私交易使用手册

admin 2021-01-09 1911 浏览

前言

目前的主流公链项目不管是基于账户模型还是 UTXO 模型,交易转账地址与金额都是公开信息,易于追踪。

Zcash, Monero 等实现了隐私Token,在主链实现隐私Token有几个痛点:

  • 算法升级: 密码学算法发展较为迅速,新的算法应用到主链并且与现有系统适配需要很漫长的过程

  • 漏洞修复: 主链的漏洞升级需要协调矿工或验证人来配合升级,影响范围较广,周期较长

基于智能合约的隐私Token则能做到灵活的算法方案,快速的漏洞修复,影响面较小,只影响到该隐私Token的用户,是实现隐私Token的良好的平台

简介

隐私交易基于 Alaya 的 WASM 智能合约平台 PIP-13 提案构建的隐私Token项目。该项目意在解决日益剧增的交易匿名化需求。通过零知识证明算法达到隐匿身份,算法插件化来满足多种隐私的需求;支持隐私Token的独立发行以及 ARC20 资产的隐私化;利用插件机制,做到算法的在线升级,做到对用户的无感升级。

合约架构

合约架构的主要满足以下几个目标:

  • 可扩展,整个框架能够适配更多的算法,扩展隐私交易的生态

  • 可升级,对于合约漏洞,如算法漏洞等,能够进行快速升级,及时避免漏洞导致经济损失。

  • 易于发行,Token的发行方不需要具备对算法原理的了解,仅需要判断算法是否满足需求,就能发行隐私Token。

架构图

上述架构图中由如下模块组成

  • ConfidentialToken 隐私Token合约,由Token发行方进行部署。

  • Registry 注册表合约,ACL 合约地址会注册在 Registry, ConfidentialToken 每次交易都是通过 Registry 获取 ACL 最新地址,这样 ACL 可以进行动态升级。

  • ACL 访问控制合约,负责管理隐私Token的注册信息,验证算法合约与存储合约版本。

  • TokenManager Token管理合约,ACL 关于 ARC20 合约存取操作都是通过 TokenManager 与 ARC20 合约进行交互。

  • Validator 验证合约,实现对各种算法的验证功能,每种验证合约可以根据算法自定义账户地址。

  • Storage 存储合约负责存储每笔转账的必要信息,用于验证是否存在双花操作。

  • ARC20 标准Token合约

从可扩展角度,开发者可以实现多种验证算法,注册到 ACL 合约中,就能供隐私Token发行方使用。

从可升级的角度,ACL,Validator,Storage 都可以进行动态升级,满足了功能扩展、漏洞修复等不同升级的需求。

从易于发行角度,项目方仅需要部署 ConfidentialToken,即可实现隐私Token。

算法原理

算法概念和定义

  • 票据 note: 借鉴 Bitcoin 的 UTXO 模型,一个票据 "note" 即是一个 UTXO,其是对金额的加密后的表示,逻辑上包括金额 "value"、属主 "owner"。金额就是该票据的密文形式;属主信息是由该票据的 spending key 决定,在后续章节会进一步描述;

  • JoinSplit 交易(简称“交易”):在本方案中,定义一个交易为多个票据和其他信息的集合。其他信息是指为验证交易逻辑包含的必要的数据,包括零知识证明等。

  • 付款人payer,收款人payee: 在一个交易里,指花费了票据的人,和拥有花费新创建的票据的权利的人。这里付款人,需要与发送者 sender 进行区分,后者是发送了交易给区块链网络的人;因此,sender 可以与 payer 是同一个实体,也可以是被实际 payee 授权的一个第三方。

方案介绍

密钥和票据

借鉴 DKSAP(Dual-Key Stealth Address Protocol) 协议,用户的钱包需要包括两个密钥对,spending key-pair 和 viewing key-pair:

  • a spending key-pair: , ; 用于授权一个交易。用户公开 。

  • a viewing key-pair: , ; 用于审计 / 查看一个或者多个票据。用户公开 。

当 payer 需要创建一个新的票据 (output note) 时,首先生成一个临时密钥 ephemeral key pair, ,用 payee 的 public viewing key 一起生成一个 shared secret (采用 Diffie-Hellman key agreement 原理)。随后,用 shared secret 和 payee 的 一起生成一个该新票据的 spending key-pair, 记为 。注:每个票据都有一个独立的 spending key-pair,该 spending key-pair 定义了该票据的 ownership, 谁知道该 spending key-pair 的私钥部分,谁就具有花费该票据的权利。

DKSAP 的具体协议流程

假设 Bob (payee) 的密钥为:spending key-pair: , viewing key-pair: ; 为椭圆曲线群的生成元。

Alice (payer) 先生成一个临时密钥对 , 然后将公钥 部分与放入 Note 数据中进行公开。

Alice 计算一个 shared secret: , 是一个满足密码安全的哈希函数。这里由于采用了 ECDH 原理,另一方 Bob 也可以计算 。Alice 计算本次交易中 Bob 的交易地址为:。

Bob 动态地检查链上交易,试图找到发送给他的 Note。他可以根据每个 Note 中的 ,计算出相应的 shared secret,然后计算对应的 Note 接收地址 ,与每个 Note 的接收地址 进行比对,如果比对成功,则用 背后的私钥部分 进行花费(签名),这里 。

Transfer 交易流程

假设 Alice 需要转账给 Bob 7 XATP,且 Alice 总共拥有票据包括 :5 XATP, :3 XATP。在一个明文的 JoinSplit 交易里,, 作为 input notes, Alice 会创建 :7 XATP, : 1 XATP, 且指定 、 属主信息分别为 Bob 和 Alice。

一、 payer Alice 创建一个交易临时密钥对,JoinSplit key-pair:{, }。

二、Alice 计算 input note commitments 如下:

  • , , 其中 是指票据 的 note spending key 的公钥部分。

  • Alice 计算每个 input note 的签名,以表示确实有权利花费。, 。其中 是票据 的 note spending key 的私钥部分。// 这里把 也扔到单个票据的签名里,表示每个票据的属主都认可当前的 JoinSplit key-pair 的拥有者。这样,不会造成攻击者伪造一个新的 JoinSplit key-pair, 在不改变交易数据的情况下,重新签名交易进行重放攻击。

三、Alice 计算 output note commitments 如下:

  • 其中 和 是 Alice 通过 DKSAP 协议以及 Bob 的公钥生成的 note spending key 的公钥部分。

  • Alice 会将 和 的临时密钥的公钥部分也公开,方便 payee 从链上找到属于自己的票据。即公开 , .

四、Alice 计算 public value 。该变量是一个公开的数值,表示与外部账户系统 (ARC20 资产)的转入转出关系,即该值为正数时,表示有 数量的Token转出到外部账户 (sender's address),如果该值为负数时,表示有 数量的Token从外部账户 (sender's address) 转入到隐私Token系统。例如一个典型的充值交易中的金额配平关系可能是形如:inputNotes = [], outputNotes = [1 XATP,2 XATP], publicValue = -3 ATP ,表示 sender 的 ATP 账户中会冻结 3 个Token,同时会创建 2 个 output Notes,其金额总和为 3 (假设 ATP : XATP = 1: 1)。

五、Alice 对上述数据进行签名,计算 . 其中 为交易的完整数据,即 。// 注意,本例中的 ,表示是一个隐私Token系统内部的纯粹转账。

六、Alice 创建一个零知识证明 , 需要证明以下逻辑:

  •  和 里隐藏的金额 之和 =  和 里隐藏的金额 之和 + ;

  • 所有票据承诺的隐藏金额都是在一个合理的正数区间内;// 防止越界攻击

  •  和 是正确的承诺代数结构。// 证明逻辑取决于具体的承诺方案。这里不用检查 和 ,是因为一定会有一笔前续的交易会检查,否则 , 不会被写入 Note registry。

七、Alice 将 ( , ) 一起发送给合约。

八、合约开始验证交易,逻辑如下(可根据实际需要调整验证顺序),如果有任一项校验失败,则拒绝执行交易:

  • 验签 ;

  • 验签 , ;

  • 检查 , 是否存在 Note registry 上;

  • 检查 , 是否不存在 Note registry 上;

  • 验证 ,如果验证失败,则拒绝执行交易;// 这里我们省略了 ZK proof 相关的 public inputs, 取决于具体的算法细节;

九、如果上述验证均通过,则合约更新 Note registry 状态,即将 销毁,并创建 。每个票据要包括:票据承诺 ,该票据的 note spending key 的公钥部分 , 以及该票据的临时密钥的公钥部分 。

十、如果上述验证均通过,还需要处理 对应数量的Token情况。如果 为正数,则合约将向 sender 的外部地址中解冻 数量的 ATP Token;否则合约将从 sender 的外部地址冻结 数量的 ATP Token。

模型定义

在UTXO模型的基础上, 隐私Token支持 5 种主要的操作,铸币,销毁, 转账,充值,提币。

铸币: 由Token的发行方发起的增发交易(一种没有 input 的特殊转账交易)。

硬核科普:隐私交易使用手册 隐私 使用手册 BLINK合约平台 BLINK BLINK历史价格表 新闻  第1张

销毁: 由Token发行方发起的销毁一定数量的Token的交易(一种没有 output 的特殊转账交易)。

硬核科普:隐私交易使用手册 隐私 使用手册 BLINK合约平台 BLINK BLINK历史价格表 新闻  第2张

转账: 由普通用户发起的input总和与output总和相等的交易。

硬核科普:隐私交易使用手册 隐私 使用手册 BLINK合约平台 BLINK BLINK历史价格表 新闻  第3张

充值: 充值,由普通用户发起的 input 总和小于 output 总和的特殊转账交易。差值经Token缩放因子处理后为实际从 ARC20 转入到隐私账户的Token数量,充值交易内部会从交易指定公开账户转账 ARC20 token 到 TokenManager 合约账户。

硬核科普:隐私交易使用手册 隐私 使用手册 BLINK合约平台 BLINK BLINK历史价格表 新闻  第4张

提款: 由普通用户发起的 input 总和大于 output 总和的特殊转账交易。差值经Token缩放因子处理后为实际从隐私账户 转出到 ARC20 Token数量,提款交易内部会从 TokenManager 合约账户转账 ARC20 token 到交易指定的公开账户。

硬核科普:隐私交易使用手册 隐私 使用手册 BLINK合约平台 BLINK BLINK历史价格表 新闻  第5张

合约交易

交易结构

交易分为 Proof, ExtraData, Signature 三部分,Proof 中保护有对 UTXO 证明与本次授权交易地址,ExtraData 为明文数据,Signature 为授权地址私钥进行签名,保证交易信息的完整性。

硬核科普:隐私交易使用手册 隐私 使用手册 BLINK合约平台 BLINK BLINK历史价格表 新闻  第6张

合约交易证明构造过程

一、构造证明数据,证明数据交给零知识证明处理。数据结构如下:

硬核科普:隐私交易使用手册 隐私 使用手册 BLINK合约平台 BLINK BLINK历史价格表 新闻  第7张

根据证明入参,生成如下证明结果作为交易证明入参:

硬核科普:隐私交易使用手册 隐私 使用手册 BLINK合约平台 BLINK BLINK历史价格表 新闻  第8张

二、不同类型的交易对应不同的附加数据,增加相应的附加数据,附加数据经过 RLP 编码后得到附加数据字节流。

TransferExtra 对应转账、充值、提款三种类型交易。着重说下 depositSignature ,其是防止交易发送者不拥有 publicOwner 私钥,就将其 ARC20 Token转走。

三、构造完整的机密交易信息,RLP 编码,授权地址对 RLP 编码后数据签名,进而得到完整的证明。

合约执行流程

用户发送上述几种类型交易

  • ConfidentialToken 合约从注册表中找到 ACL 的地址

  • ConfidentialToken 向 ACL 发送交易信息

  • ACL 根据 ConfidentialToken 注册的信息找到验证合约进行证明验证

  • Validator 进行 ZK 验证

  • Validator 校验授权签名

  • 如果是 Deposit 交易,Validator 检查 deposit signature

  • Validator 根据具体的算法产生 CreateNoteDetailEvent 事件

  • ACL 根据注册的存储合约进行更新数据

  • Storage 更新 input, 将 input note 进行删除

  • Storage 更新 output, 创建 output note

  • 如果是 Deposit/Withdraw 交易,调用 TokenManager 进行存取操作

  • TokenManager 调用 ARC20 进行转账操作

  • ConfidentialToken 对 output note 创建 CreateNoteEvent 事件

  • ConfidentialToken 对 input note 创建 DestroyNoteEvent 事件

  • 如果是 Mint 交易,创建 MintEvent 事件

  • 如果是 Burn 交易,创建 BurnEvent 事件

合约事件

上一次 mint 数据的 hash;上一次 burn 数据的 hash;完整的 note 信息;note 的产生;note 的销毁;更改 note 备注;这些信息都需要通过事件获取。

MintEvent

属性类型索引描述mintHashh256否铸币交易的 hashvalueu128否铸币金额

描述:发行方需要记录每次铸币的 hash,下一次发行方铸币时需要前一次铸币的 hash。第一次铸币时上一次铸币的 hash 为空。

BurnEvent

属性类型索引描述burnHashh256否销毁交易的 hashvalueu128否铸币金额

描述:发行方需要记录每次销毁的 hash,下一次发行方销毁时需要前一次销毁的 hash。第一次销毁时上一次销毁的 hash 为空。

CreateNoteDetailEvent

属性类型索引描述noteHashh256是note hash 值noteOwnerbytes否note 属主noteCipherbytes否note 的金额和绑定数据用 viewing pk 加密之后的数据noteMetabytes否note 的备注信息

描述:属主信息是 ephemeralPk 和 signPk 组成结构体的 RLP 值,用户用私有的 viewingSk 和 spendingSk 判断自己是否为属主。判断成功之后,用私有的 viewingSk 从 noteCipher 中解密出 note 的 blinding 和 quantity。

CreateNoteEvent

属性类型索引描述noteOwnerbytes是note 属主的 hashnoteHashh256是note 的 hash 值ownerbytes否note 属主

描述:和 CreateNoteDetailEvent 是一一对应产生的。

DestroyNoteEvent

属性类型索引描述noteOwnerbytes是note 属主的 hashnoteHashh256是note 的 hash 值ownerbytes否note 属主

描述:每花费一个 note 就会触发一个 DestroyNoteEvent,用户需要监听此事件删除已经花费的 note。

MetaDataEvent

属性类型索引描述noteHashh256是note 的 hash 值noteMetabytes否note 的备注信息

描述:产生新的 note 备注和 更改 note 备注时会触发此事件。

部署升级

合约概念和定义

委员会: 有权批准多签交易的地址,在多签交易规定的时间内,只有收集到不少于阈值的委员会签名,多签交易才算被批准,才能被发送到区块链网络。

提案交易: 需要委员会批准的多签交易,规定时间内,委员会批准通过,发送到区块链网络执行交易,未批准通过,交易超时被删除。

模板合约: 由于部署交易内容包括合约代码,代码量较大造成交易过大,所以采用模板合约,区块链底层直接复制模板合约代码。

Clone 创建合约: Clone 创建时复制模板合约代码,用新的初始化参数初始化合约,创建成功之后获取新创建的合约的地址。

合约升级: 复制模板合约代码,产生新的合约地址,旧合约的数据迁到新合约地址,旧合约销毁。

官方合约部署

一、部署 Registry 注册表合约,用来管理 ACL 地址,每次 ACL 升级的同时向 Registry 注册新地址。

注册表合约采用无私钥地址部署,保证后续没有人可以更改此合约。注册表合约不支持合约升级。

硬核科普:隐私交易使用手册 隐私 使用手册 BLINK合约平台 BLINK BLINK历史价格表 新闻  第9张

二、部署 MultiSign 多签合约,此合约用来管理 ACL 合约,后续升级都将通过多签合约进行。

确认多签委员会名单和提案生效人数阈值,部署合约初始化时传入确定好的值。

三、部署 ACL 控制管理合约,部署过程中会 clone 出 TokenManager 合约。TokenManager 合约和 ARC20 合约交互,转入转出 token 到 TokenManager 合约。

硬核科普:隐私交易使用手册 隐私 使用手册 BLINK合约平台 BLINK BLINK历史价格表 新闻  第10张

四、部署 Validator 验证合约或者 Storage 存储合约,这两个合约的部署流程是一样的,部署后都需要在 ACL 进行版本注册。

硬核科普:隐私交易使用手册 隐私 使用手册 BLINK合约平台 BLINK BLINK历史价格表 新闻  第11张

官方合约升级

ACL 合约升级

硬核科普:隐私交易使用手册 隐私 使用手册 BLINK合约平台 BLINK BLINK历史价格表 新闻  第12张

委员会通过 MultiSign 合约进行升级的部署,部署通过先部署模板合约以 Clone 方式进行合约的升级,升级的 ACL 合约数据也一并迁移过去。升级后 ACL 会更新在 Registry 的注册信息,升级的过程是一笔交易,所以升级过程不会影响交易到调用方的使用。

硬核科普:隐私交易使用手册 隐私 使用手册 BLINK合约平台 BLINK BLINK历史价格表 新闻  第13张


Validator / Storage 合约升级

ACL 合约对 Validator 和 Storage 合约进行版本控制,针对新特性、漏洞升级都会向 ACL 注册新版本,使用方可以根据自行需要,进行升级。一个新版本注册过程如图:

硬核科普:隐私交易使用手册 隐私 使用手册 BLINK合约平台 BLINK BLINK历史价格表 新闻  第14张


委员会确定新版本,通过 MultiSign 对 Validator/Storage 合约进行注册,注册信息存储 ACL,供使用方查找。后面章节会讲用户如何升级。

注册版本信息

注册信息包括 Verion, Address, Description 三部分

  • Verion 由 3 个字段表示 类型 + 主版本 + 子版本组成

  • Address 模板合约地址

  • Description 版本信息描述

隐私Token合约部署

隐私Token合约是由用户或项目发行方来发起部署的。

硬核科普:隐私交易使用手册 隐私 使用手册 BLINK合约平台 BLINK BLINK历史价格表 新闻  第15张

  • 发布者向注册合约请求获取 ACL 最新地址

  • 发布者从 ACL 获取验证合约与存储合约版本,选择相应版本

  • 发布者将验证合约与存储合约版本及其它信息作为初始化信息部署隐私Token合约

  • 隐私Token合约向 ACL 合约进行注册

  • ACL 根据隐私Token合约指定的版本号进行验证合约部署

  • ACL 根据隐私Token合约指定的版本号进行存储合约部署

隐私Token合约升级

硬核科普:隐私交易使用手册 隐私 使用手册 BLINK合约平台 BLINK BLINK历史价格表 新闻  第16张

  • 升级方向注册合约请求获取 ACL 最新地址

  • 升级方向 ACL 获取升级合约版本

  • 升级方调用隐私Token合约的升级接口

  • 隐私Token合约会调用 ACL 的升级接口

  • ACL 找到隐私Token合约对应的验证合约,调用验证合约的迁移接口

  • 验证合约根据升级模板合约进行合约升级

  • ACL 将升级后的验证合约地址更新注册信息

底层:

https://github.com/PlatONnetwork/PlatON-Go/tree/alaya-dev/feature-confidential-token

隐私合约开源仓库:

https://github.com/PlatONnetwork/confidential-transaction

相关推荐

观点丨为什么不存在 "Ethereum杀手"?
观点丨为什么不存在 "Ethereum杀手"?

作者 | EricOlszewskiEthereum 社区一直坚持在前沿和冒险的道路上发展。事实上,我们大多数人都同意这样的观点:如果有更好的平台出现,我们会...

4小时前 admin

比特币万点震荡,以太坊逆势上涨
比特币万点震荡,以太坊逆势上涨

(请持有一枚比特币)有句经典:“出来混嘛,不是你暴我的头就是我暴你的头”——《无间道》,币圈的短线操作其实会经常验证这句话,幸幸苦苦的赚了几十单,顶不过一次暴涨...

4小时前 admin

理性思考,做个长盛不衰的投资者

从去年,当机构投资者开始大规模进入比特币的时候,不少传统机构对比特币的公开评论变得越来越正面,甚至纷纷开始预测本轮牛市比特币最高能涨到多少美元,比如花旗银行有报告就乐观地估计比特币本轮最高可能涨到30...

引介 | Rollup 不完全指南
引介 | Rollup 不完全指南

译者注:原文中Rollup同时以单复数形式出现多次,在译文中统一确定为首字母大写的Rollup。Rollup在当前的以太坊社区已经十分著名。在可预见的未...

4小时前 admin

波卡周报 | Kusama 网络本周通过 6 个国库支出议案!
波卡周报 | Kusama 网络本周通过 6 个国库支出议案!

加入PolkaWorld社区,共建Web3.0!波卡本周进展波卡想要为Polkadot的品牌更新做出贡献吗?请在2021年1月31日之前...

4小时前 admin

后浪不断推翻前浪,谨防站在前浪的山顶上

狂人说每到周末,都感觉非常轻松,国际上都在休息,新闻很少,币价的波动也不算很大,只要欧美不瞎折腾,亚太地区现在对币价的影响就不算太大,尤其在中国,虽然有很多新入场的投资者,但多数人瞄准的都是小币,即便...

观点丨为什么不存在 "Ethereum杀手"?
观点丨为什么不存在 "Ethereum杀手"?

作者 | EricOlszewskiEthereum 社区一直坚持在前沿和冒险的道路上发展。事实上,我们大多数人都同意这样的观点:如果有更好的平台出现,我们会...

6小时前 admin

【分析师看后市】比特币延续震荡,以太短线发力能否带动市场
  • 【分析师看后市】比特币延续震荡,以太短线发力能否带动市场
  • 【分析师看后市】比特币延续震荡,以太短线发力能否带动市场
  • 【分析师看后市】比特币延续震荡,以太短线发力能否带动市场
  • 【分析师看后市】比特币延续震荡,以太短线发力能否带动市场
DeFi板块率先反弹
DeFi板块率先反弹

已经超越EOS,目前均排名前20。除此之外,市值靠前的DeFi概念项目非常多,价值项目基本都在市值前50,整体而言,属于价值发现和泡沫并存的阶段。币圈从不缺乏炒...

6小时前 admin

对比特币价格有量化影响的这 5 个指标表现如何?

...

全球通胀近在咫尺 比特币称不上什么泡沫
  • 全球通胀近在咫尺 比特币称不上什么泡沫
  • 全球通胀近在咫尺 比特币称不上什么泡沫
  • 全球通胀近在咫尺 比特币称不上什么泡沫
  • 全球通胀近在咫尺 比特币称不上什么泡沫
币圈明庄灰度投资亮牌 新增“币种”价值分析

昨天,一则关于灰度的消息迅速在圈内发酵:有媒体表示,灰度即将推出包括BAT、LINK、MANA、FIL、LPT和XTZ等6个数字货币的新信托产品。圈内外现在基本都认可本轮比特币的牛市是机构投资者所引发...

2021 年 BTC 各项指标表现如何?
  • 2021 年 BTC 各项指标表现如何?
  • 2021 年 BTC 各项指标表现如何?
  • 2021 年 BTC 各项指标表现如何?
  • 2021 年 BTC 各项指标表现如何?
观点丨为什么不存在 "Ethereum杀手"?
观点丨为什么不存在 "Ethereum杀手"?

作者 | EricOlszewskiEthereum 社区一直坚持在前沿和冒险的道路上发展。事实上,我们大多数人都同意这样的观点:如果有更好的平台出现,我们会...

8小时前 admin

加密巨鲸「0x_b1」:收益最好时我们每小时入账7.5—15万美元

...