| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 区块链 -> Bolt: Anonymous Payment Channels for Decentralized Currencies 学习笔记 -> 正文阅读 |
|
[区块链]Bolt: Anonymous Payment Channels for Decentralized Currencies 学习笔记 |
1. 引言Matthew Green和Ian Miers 发表于2017年论文《Bolt: Anonymous Payment Channels for Decentralized Currencies》。 相关代码实现见: 使用payment channel进行链下支付的典型方案有:
无需将每笔交易提交到链上,channel在2方初始建立a shared deposit时会使用链,然后2方可直接进行支付——调整该deposit中相应的ownership shares,仅 在需要关闭channel 或 存在争议需要解决 时,才会再与链上通讯。 若2方之间无直接的payment channel,可通过中间peer路由实现支付。 payment channel的最大优势在于,可在无需引入可信第三方和中心化机制的情况下,大幅减少链上的交易存储空间。 尽管payment channel可解决扩容问题,但是存在一些隐私弱点:尽管交易发生在链下,任何人都可获知 the pseudonymous identities and initial (resp. final) channel balances of the Bolt(Blind Off-chain Lightweight Transactions)中,包含了一系列技术,用于构建privacy-preserving unlinkable payment channels for a decentralized currency。本文提出了三种实现方式:【将通道内双方的角色分别称为customer客户 和 merchant供货商。】
链的作用主要为:
1.1 payment channel背景知识
任何payment channel必须满足2个条件:
payment channel的隐私性:
1.2 构建隐私支付通道总览本文提出了2种构建隐私支付通道的方案:
1.2.1 e-cash的单向支付通道e-cash scheme中有一个名为bank的可信第三方,bank会issue one-time tokens(又名coins),customer可一次性赎回这些one-time tokens。 merchant承担bank的角色,会issue a “wallet” of anonymous coins to the customer,customer可spend这些coins back to the merchant。 以上方案存在如下弱点:
1.2.2 双向支付通道单向支付通道限制了:所有支付仅能由customer 到 merchant。 因此,基于现有(non-anonymous)支付通道 + 盲签名和zkProofs,来实现双向隐私支付通道。 关键点在于: 为此,在每次支付时,customer都需要给merchant一个revocation token for the previous state。如果customer表现honest,则该revocation token将永远不会关联channel 或 任何previous transactions。 1.2.3 由直接支付 到 第三方支付基于双向支付通道可构建第三方支付。A 通过 untrusted中介I 向 B 支付。 1.2.4 Aborts对于单项支付通道,当通道关闭时,最终channel balances将公开。customer和merchant之间的支付为non-interactive的,为完全匿名的。 对于双向支付通道,在执行过程中终止时,merchant可让customer处于无法再发起支付交易的状态,这无法阻止merchant向链上求助来关闭通道,但需要考虑2方面的隐私:
对于传统商业设置,abort的后果可很小:无论是何种支付机制,若供货商无法提供合适的商品,customer可终止交易。对于微支付场景,应考虑abort的情况。customer应扫描链上未成熟的关闭,若customer的open channels数低于其最小anonymity set,则abort该channel。 2. 相关定义2.1 匿名支付通道 APCAPC(Anonymous Payment Channel)匿名支付通道为2方基于某链(支付网络,该支付网络应可conditionally escrowing funds and binding these transactions funds to some data,如记录Bitcoin链上)构建的链下支付通道。
以及2个交互协议:
实例化匿名支付通道的流程为:
2.2 APC的正确性和安全性APC的正确性是指:若整个过程中都是是正确且honest执行的,则每次运行 APC的安全性主要体现在:
3. APC的技术要点APC中涉及的技术要点有:
4. APC协议本文实际实现了3种APC协议:
4.1 单向匿名支付通道主要对[CHL05]中的compact e-cash技术进行改进实现的高效、succinct单向匿名支付通道。 4.1.1 compact e-cash在compact e-cash scheme中,customer withdraw a fixed-size wallet capable of generating B B B coins。customer的wallet基于tuple ( k , s k , B ) (k,sk, B) (k,sk,B),其中:
customer的wallet一经merchant签名,即可用于生成最多
B
B
B coins:
整个构建过程,可保证Verifier可立即发现双花,因为2笔交易使用相同的serial number
s
s
s。 基于compact e-cash构建的单向支付通道,merchant承担bank角色,会为customer issue a wallet of
B
B
B coins,customer可将其匿名地 spend back to the merchant。 本文的方案为:merchant会存储必要的信息来验证通道关闭,因此需要对[CHL05]中的compact e-cash scheme进行改进。 4.2 双向支付通道4.1节的单向支付通道,存在如下缺陷:
因此需要构建双向支付通道,支持:
双向支付通道的customer wallet 与 单向支付通道的customer wallet 结构类似,包含了:
当merchant为wallet的内容提供盲签名后,该wallet被激活。 Signed wallets are obtained as in the previous protocol, with a commitment being placed in the anchor transaction and signing happening once the transaction is confirmed. 不同于之前协议中使用a series of individual coins来支付
?
\epsilon
?,此处,customer和merchant简单地将现有价值为
B
c
u
s
t
B^{cust}
Bcust的signed wallet 交换为 价值
B
c
u
s
t
?
?
B^{cust}-\epsilon
Bcust??的新signed wallet(对应有a fresh wallet public key
w
p
k
n
e
w
wpk_{new}
wpknew?)。此时的
?
\epsilon
?可为正值,也可为负值。 构建过程中的调整在于:使现有wallet失效的同时,签名一个新的wallet。若merchant在old wallet失效之前签名了新wallet,则customer可retain the funds in the old wallet while continuing to use the new one。若merchant在签名新wallet之前使old wallet失效,若merchant拒绝签名新的wallet,则customer没有办法来关闭通道。 为此,需要通过interactive payments,区分在关闭通道时提供的value,采用2个子阶段协议来获取每组值。不公开最新的wallet
w
w
w,customer使用包含了
B
c
u
s
t
B^{cust}
Bcust、当前wallet公钥 以及 merchant签名 的 refund token
r
t
rt
rt来关闭通道,
双向支付通道整个构建过程为:
4.3 双向第三方支付通道若A与中介I开通了双向支付通道,B与中介I开通了双向支付通道,则A可通过中介I向B进行支付。 双向第三方支付通道的主要挑战在于支付的原子性,即: 回忆下4.2节双向支付通道
为了保证chained transaction A → I → B A\rightarrow I\rightarrow B A→I→B 的安全,要求这2个环节中的第一阶段为原子式成功或失败。 为此,需要给refund tokens增加条件,这些条件为simple statements for the network to evaluate on examining a token during the
4.3.1 隐藏支付金额在第三方支付通道中,由于 I I I作为积极参与者,并不维护channel的状态, I I I也无需知道支付的金额。只要 A , B A,B A,B对支付金额 ? \epsilon ?达成共识(即双方在各自的channel中有足够的金额),任何一方都无法向 I I I透露 ? \epsilon ?。 I I I仅确信the balance of funds is conserved。 为了隐藏支付金额,需要将图3 可在通道中冲入匿名currency,以尽可能地减少匿名信的威胁。关联2个不同的channel并不会泄露参与者的身份。最重要地是,由于中介仅可在每个通道使用一次abort技术,merchant无法关联同一通道内的不同支付。最后,执行abort的中介会在链上产生公开记录,使得参与者可回避该malicious中介。 4.4 隐藏支付balance以上三种创建方式,当通道关闭时,存在channel balance将会被公开的隐私问题。 注意,对于不存在争议的通道关闭流程,可按如下方式隐藏信息:
在类似Zerocash [SCG+14]的系统中,the final payment redeeming coins to the merchant and customer can be modified to include an additional statement: the amounts paid in this transaction are consistent with the commitment, and do not exceed the initial funding transaction that created the channel.【本文未来将进一步研究】 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/28 19:26:08- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |