年份:2016
简介:
提供了一个可编程的,在非匿名的情况下保护隐私的智能合约的通用基本框架。利用了类似zerocash的原理。
系统概述
hawk编译器将程序编译成区块链和用户之间的加密协议。 Hawk程序包括: 1、私有部分 执行计算来确定多方的支出分配 2、公有部分 不涉及隐私数据或者money
编译器会将Hawk程序编译成由users、manager、blockchain共同定义的加密协议: 被所有共识节点执行的blockchain程序 被users执行的程序 被manager执行的程序
安全的保证
1、on-chain privacy. 除非协议方自愿揭露信息,否则任何人无法向没有参与合约的人提供交易隐私。 虽然在Hawk协议中,users和blockchain交换数据,并依靠它来保证中断的公平,但是资金流和交易的金额对未参与合约的人是加密隐藏的,这是通过向blockchain使用零知识证明保证执行合同和资金保护的正确性。 2、contractual security. 在同一合约中,保护每个人彼此之间的隐私。 是一个多方面的概念,不仅包括机密性和真实性,还包括发生欺骗和中止行为时的经济公平。
manager
可以看到users的输入,并且被信任不会揭露users的私人数据,但是不等于可信第三方。 他可以随意违背协议或者和参与者密谋,但是不会影响合约的正确执行。 不需要信任manager来维护基础货币的安全或隐私 多个合同可以指定多个不同的manager,那么就降低了恶意manager的影响范围,恶意的也可以被用户的多方计算所代替。
具体过程
拍卖例子
文中举了个例子,拍卖过程中以得到拍品的是出价最高的人,但是以第二高的价格成交,其余出价的人退回出价的钱。 Hawk在这里有两个功能: 1.每个人都不知道别人的出价 2.适当的赏罚机制,给违反规定的参与者惩罚,其余参与者适当受到补偿。
中断和超时机制
三个时间T1<T2<T3 T1:users开始出价,提交给区块链 T2:users向manager公开自己的出价,如果没有按时open的话,会被当作0处理 T3:如果由于manager中断,那么users可以在这个时间重新提交出价
灰色部分是延迟处理,也就是在下一个计时器的开始,因为区块链在做实际运算的时候也都会推迟, 应该是避免因为延迟出现的误操作吧?A在这扮演的到底是什么角色?第三方?
1、初始化:用户标价 2、Mint(铸币):当受到用户的交易后,将这笔交易发给A 延迟:验证用户拥有比这个价格多的资产后,将这笔钱转移到私有硬币池中 3、pour(花费):我们要给P1和P2转账,首先判断要转的这笔钱和提交的钱是不是一致的 (1)如果P是诚实的节点,判断要转出去的钱确实在私有硬币池中,且对方用户不是空用户,判断通过就从私有硬币池中转钱。但是如果Pi是恶意节点,那么我们将这笔交易留证发给A;如果Pi诚实时,向A发送交易成功信息; (2)延迟处理: 如果P是恶意节点,判断要转出去的钱确实在私有硬币池中,并从私有硬币池中转钱。将这笔钱记录在私有硬币池中,如果Pi不为空,那么就转给Pi
1.Freeze:判断没有超时->Pi之前没有调用Freeze->他的私有硬币库中确实有这笔钱,那么我们就发送这个操作给A 延迟:把这笔钱放到冻结库中,并从私有库中取出(为什么不是先取出来再放进去呢?如果先扣钱,那这笔钱还没被冻结,有没有可能受到攻击) 2.Compute:判断没有超时,如果manager是恶意的就将操作信息发给A,诚实的就发送成功消息给A 延迟:Pi要转的钱进行分配并和冻结库里同步,并把这个操作公开给manager 3.如果Pi没有调用compute,那么就将置0处理,否则,验证输入输出相等后,把输出的(划分成功的)加入到Pi的私有库中,并给他发送成功消息
加入密码学的Hawk
(不再附图) 主要用到mekle tree 、commitment和NIZK(非交互式零知识证明)
Freeze(t<T1) ·用户P选择了一个私有货币c,P使用私钥并计算c的一个序列号Sn(用来防止双花) ·P会将输入计算为一个commitment,用到对称密钥 ·P使用零知识证明 1)c存在私有池中 2)Sn是正确的 3)输入等于输出(你提交的和你要兑换的是相等的)
Compute(T1<t<T2) 在off-chain中计算支出的划分和证明的正确性 这里所有的参与者会将自己的输入(你提交的)公开,并用加密的manager的公钥进行加密,这个密文和零知识的证明一起被提交到智能合约中,当用户出现中断的时候,作为惩罚的依据 然后,manager会计算支出分配,并且公有的输出会被私有合约应用,manager也会用零知识证明这些花费。
Finalize(T2<t<T3) manager提交成功后,blockchain会验证这些东西,然后对冻结的钱进行交付 blockchain也会将manager的公有输入和输出传递给公有合约 公有合约会去验证这些,也会对公有的储蓄进行再分配
思考:为啥说他在非匿名的情况下也可以保护隐私嘞? 1.假名是一次性的,暴漏可以重新更换 2.没有参与智能合约的人是无法看到任何信息的 3.即使你知道了某个假名对应的user,但是在private部分,你不知道他做了哪些交易,对应不上 4.引入了赏罚机制
总结: 后面还引入了安全多方,但是读不下去了… 知乎上有一篇对他的解释https://zhuanlan.zhihu.com/p/31125630写的很清楚
虽然基本上是直译,但是英文文献对没有基础的人读起来好困难,希望坚持读可以掌握方法😭
|