这篇文章将展示基于2-of-2MPC技术的MACI匿名化方案的具体实现。本文核心内容主要分为三个部分:从任意算法到逻辑电路的实现;从逻辑电路到混淆电路的实现;利用不经意传输实现多方安全计算。最后,我们总结基于多方安全计算的匿名化方案。
感谢FelixCai对MACI和隐私投票中多个问题的讨论。
这篇文章将展示基于2-of-2MPC技术的MACI匿名化方案的具体实现。本文核心内容主要分为三个部分:从任意算法到逻辑电路的实现;从逻辑电路到混淆电路的实现;利用不经意传输实现多方安全计算。最后,我们总结基于多方安全计算的匿名化方案。
算法
在MACI系统中,操作员Operator管理着一个数组,这个数组记为deactivate,其元素个数与registry数组中的元素个数相同。数组中每个位置的编号代表了key值,而每个位置存储着对应的公钥。为了更好地理解deactivate数组,可参考如下例子:在deactivate数组中,假设registry中的用户1发起了deactivatekey操作,操作员O收到该操作请求后,如果操作的合法性被O承认,O在deactivate数组中的第一个位置填入registry数组中第一个位置所包含的value值。另外,假设用户O没有发起deactivatekey操作,那么deactivate数组中的第二个元素的值为0。这样一来,deactivate数组的元素个数和registry数组中的元素个数相同就可以理解了。
现在,为了实现MACI系统对管理员的匿名性,需要设计一个2-of-2的MPC方案来实现以下两个性质:
逻辑电路的生成原理
Unstoppable Domains 宣布为以太坊和 Polygon 推出基于 NFT 的登录服务:1月11日消息,区块链域名项目Unstoppable Domains 宣布为以太坊和 Polygon 推出基于域名 NFT 的登录服务,用户可以将电子邮件地址、信用评分、KYC数据等,通过将单点登录协议绑定到 NFT 域名,进而允许应用程序查找有关自己的信息。该登陆方式类似于 Google 登录,但没有隐私窥探并且具有更大的灵活性。[2022/1/11 8:41:58]
为了简单起见,暂且假设一个公钥由二位二进制数来表示。那么,现在就需要用用户A的输入公钥,对比deactivate数组中的二把公钥。因此,需要对比二次。
逻辑电路由逻辑门组成,逻辑电路中的逻辑门被分为?层,比如上面的电路是两层。逻辑门第一层需要用户来添加输入,其他层是中间节点,最后是根节点。对于用户输入的逻辑门,有两个输入和一个输出。其中一个输入由用户A完成。另外一个由O完成。这三个逻辑门组成了一个子逻辑电路。这个子逻辑电路负责一次公钥的对比。
逻辑电路的生成工具
在现实中,为了让一个固定的算法转换成逻辑电路,需要用到一些工具,如
1.VerilogHDL和VHDL:这两种硬件描述语言被广泛用于数字电路的设计和仿真,可以使用它们来描述算法的行为,并将其转换为逻辑电路的形式。这些语言都支持从高级语言转换为硬件描述语言的形式。使用Verilog或VHDL需要一定的硬件设计和编程经验。
2.XilinxVivadoDesignSuite:这是一款商业软件,用于FPGA的设计和开发。它提供了一个综合工具,可以将高级语言或RTL代码转换为逻辑电路的形式。它支持多种编程语言,包括C、C++、SystemC、Verilog和VHDL等。
UMA 社区发起可基于 UMA 创建看跌期权的提案:3月29日消息,UMA社区开发人员和OpenDAO联合创始人在UMA社区发起提案,该提案建议支持在UMA上创建看跌期权,以补充最近推出的看涨期权。该提案解释了这种看跌期权的使用场景,比如用户想要出售黄金看跌期权或SUSHI代币的看跌期权,那么可以抵押诸如USDC的稳定代币铸造看跌期权合成代币,该合成代币可在AMM上作为看跌期权出售,想要对该资产进行下行保护的投资者可以购买该代币规避风险,一旦代币价格低于目标价格,则有权以预先确定的价格赎回该合成代币。[2021/3/29 19:25:59]
3.Yosys:这是一款开源的EDA工具,用于数字电路的设计和仿真。它支持从Verilog和VHDL等硬件描述语言转换为逻辑电路的形式。它也支持从高级语言转换为RTL代码,然后转换为逻辑电路的形式。
混淆电路
逻辑门的加密
回到现在的例子中,因为我们的公钥在deactivate数组中都是有序号的,且数组deactivate中的最大元素个数是有上限的。因此,假设最大元素个数是N,那么,就需要构建N个子电路,然后合成一个最终的逻辑电路。
由于逻辑电路在每一个epoch中是固定的,那么,所有用户都可以使用这个早已经生成好的,并存储在区块链中的逻辑电路。在本文例子中,由于deactivate数组中只有两个元素,因此子电路只有两个。
注:在一个epoch中,registry数组中元素个数是固定的,因此用户的输入和数组中的元素的对比次数是固定的,因此逻辑子电路的个数是确定的,且逻辑子电路是事先可以确定好的,因此整个逻辑电路是唯一确定的。
接下来,就是将逻辑电路的每一个输入进行加密,然后将每一个逻辑门进行混淆。
先考虑加密。加密这个动作是由用户A完成的。他对每一个输入和输出的0和1用加密值表示。注意,最终的根逻辑门的输出不需要进行加密,在本案例中,就是0,和1。如图所示:
逻辑电路中的每一条引线的0和1都用加密值代替。同时,每一个逻辑电路都有一个固定的编号。例如,编号1、2、5就构成了一个子电路1。
基于 Avalanche 的去中心化交易所 Pangolin 已上线:Avalanche 共识协议发明者、康奈尔大学教授 Emin Gün Sirer 发推表示,基于 Avalanche 的去中心化交易所 Pangolin 已正式上线。该项目使用与 Uniswap 相同的自动做市商(AMM)模型,治理令牌为 PNG。
官方称,Pangolin 的优势在于快速廉价的交易、社区驱动的产品开发以及 100% 社区分配的代币发行。[2020/12/10 14:48:36]
基于此,将逻辑电路的每一个逻辑门的输入和输出进行加密后,在Operator的视角里,对于加密后的逻辑电路,他就不知道每个逻辑门的输入数字对应的明文。
输入加密的方法
在混淆电路中,为每个输入值生成两个随机key的过程通常是使用伪随机数生成器来实现的。常用的生成随机key的实现和库有很多,例如OpenSSL、Crypto++、libsodium等。
输出加密的方法
基于伪随机函数PRF的方法是Yao的混淆电路中实现对输出二进制数0和1的加密的主要方法之一。具体来说,这种方法可以实现对每个逻辑门的输出进行加密,保证了数据的机密性和可靠性。
在基于PRF的方法中,每个逻辑门的输出都被混淆成为一组包含多个label的二元组,其中每个label都是一个随机的01字符串。在生成每个label时,可以使用伪随机函数来实现。具体来说,可以使用一个密钥和输入值作为PRF的输入,然后得到一个随机的01字符串作为label。由于PRF是一种可以模拟真正随机数的算法,因此生成的label具有高度的随机性和不可预测性,保证了数据的机密性和安全性。
在混淆输出时,可以将每个逻辑门的输出表示为一个包含两个label的二元组。其中,当输入为0时,使用label0作为输出;当输入为1时,使用label1作为输出。在将逻辑门的输出发送给下一个参与方时,只发送一个包含正确label的二元组,保证了数据的机密性和保密性。常见的PRF包括HMAC、SHA、AES等。
需要注意的是,对逻辑门的输出采用上述方法的目的是为了便于不经意传输的实现。
动态 | Block.one 发起基于 EOS 的DApp 项目采访系列 KARMA已接受采访:据 IMEOS 报道,Block.one 发起了基于 EOS 的杰出 DApp 项目采访系列,名为:BuiltOnEOSIO。基于EOS的Dapp项目 KARMA 已接受 Block.one 的采访。KARMA 是一个激励用户做出善行的APP,在有益的人类互动和代币激励之间创造一个积极的反馈循环。创始人 Dallas Rushing 设想道:KARMA 有能力改变慈善机构在世界各地的完成和组织方式。
关于DApp项目详细信息可参考DApp信息聚合平台:imeos.one[2018/7/5]
这里其实就可以推导不经意传输过程了。比如,用户A将这四个输出——
用户A输入的生成
现在,我们继续假设,用户A公钥的编号是1,数值是10,而数组中的二把公钥的数值分别是11,10。也就是说用户A的公钥在数组中。
接着,用户将自己的输入,分别输入到两个子电路中。用户在第一个逻辑子电路中进行输入。他的输入是:在编号为1的逻辑门输入2674;在编号为2的逻辑门输入8798。用户在第二个逻辑子电路中进行输入。那么,他的输入是:在编号为3的逻辑门中输入9809;在编号为4的逻辑门中输入3453。
电路混淆
接下来的步骤就是将逻辑电路进行混淆。
这样一来,根据这个表格的排序可能性,O想通过表三还原成真正的表一,会碰到4种可能性。那么,如果在一次证明中涉及到N个逻辑门,每个逻辑门用户A都做上述操作,那么就有4N种可能性。这样,通过排序任意颠倒,使得O很难推断出每个数字到底代表0还是1。
第一次通信
不经意传输
此时,我们需要回顾两个一定要保证的性质:
上述三个步骤,满足了第二个性质,但是没有满足第一个性质,也就是说,O在解密了其中一个加密值后,得到了明文1,但是,也暴露了另一个明文0。这样一来,混淆逻辑门表就暴露了很多信息给O,这样让O有机会破解A的秘密,从而使得性质1无效。
从对一个逻辑门的OT通信可以看出整个OT通信的全貌,即每个逻辑门的OT通信都是如此,且在一次OT通信过程中全部完成。这样,O就能得到所有叶子逻辑门的输出,这样他就能进一步得到分支逻辑门的输出,从而最终得到根逻辑门的输出。
方案改进
上述方案中,需要且可以改进的地方有很多。例如,改进算法设计,降低算法的复杂度;改进逻辑电路的设计,让逻辑电路变得更加简单;增加方案的安全性,加大破解方案的计算复杂度;让交互变成非交互。
算法和逻辑电路的改进
但是,如果采用MerklePatriciaTree的数据结构的话,对比的次数要少很多。那么,一旦算法计算复杂度下降了,逻辑电路的设计也就要简单很多。
逻辑电路的设计也有化简的可能性。
A的每个输入都不同,O也是。实际上,可以进行化简。变成如下图所示。
这样的化简可以让输入变少。
增加安全性
如果O想输入的是0,那么他得到的结果必然是0,也就是说,他天然知道输出0的加密值,那么他就天然知道了1的加密值。同时,由于A的输入已经是确定的,那么他可以根据A的输入值,和1的输出的加密值所在的行,去分析,如果1的输出的加密值所在的行,不包含A的输入加密值,那么A的输入就是0,否则就是1。
为了解决这类问题,我们需要对输出全部进行加密。比如使用该种方法:上表中的四个输出值0、0、0、1分别加密为——
——这样一来,输出的四个值分别对应为四个不同的密文。因此,在此环境下,无法通过上述推断来反推出A的输入值是0还是1。但是,这种方法使得输出加密值的个数从二变成了四。通信复杂度会增大。
此外,非交互式的不经意传输协议也值得研究。
总结
上述方法首先不考虑需要实现MACI匿名化的两个目标,即在明文下设计一个算法,让O能够正确判断是否执行用户A的请求。基于此,再将所设计的算法转化成逻辑电路。再将逻辑电路转化成混淆电路。需要注意的是,逻辑电路在每一个区块链的epoch中是固定的且能够从区块链中直接获取的。用户A获取该epoch的逻辑电路,利用相应工具将逻辑电路转化成混淆电路。同时,用户A将每一个混淆电路的输入进行加密,并将加密好的信息发送给O。此时,O由于不知道加密后的输入对应的明文是什么,O也就不知道用户A具体的输入是什么了,这样就实现了匿名化的第一个性质。
进而,使用不经意传输是实现第二个目的的方法。通过不经意传输,用户A并不知道O具体采用了哪些加密值进行进一步的输入,因此用户A无法推断出deactivate数组中的其他元素信息。同时,由于O通过不经意传输获得了足够的有效输入,因此O将这些有效输入输入到被加密的混淆电路中,最终能够得到正确的输出,该输出和明文下执行第一节的算法所得到的输出是相同的。因此,O就能够根据输出来判断是否要执行用户A的请求。
最终,O将上述所有操作利用零知识证明生成操作的proof。区块链对proof进行验证,验证通过后,区块链将根据deactivate数组中的元素和registry数组中的元素来更新registry数组并结束epoch和开启下一个epoch。
来源:BuidlerDAO作者:HIRAYAMASHO翻译:/img/20230515161505061476/0.jpg "/>上表列举了使用双代币模型的项目,其关键就是效用代币(UtilityToken).
1900/1/1 0:00:00DeFi数据 1、DeFi代币总市值:495.83亿美元 DeFi总市值及前十代币数据来源:coingecko2、过去24小时去中心化交易所的交易量27.
1900/1/1 0:00:00前天新闻发布时,我正在下班的路上。虽然与Bitget的交割已有一段时间,但正式向媒体公开的2023年3月22日,便成了我正式离开BitKeep的日子。翻看日历,自BitKeep创业起步至今,已整整过去了1828天.
1900/1/1 0:00:00“在现阶段,对于游戏公司来说,找到AIGC的应用问题,比在实际投入使用更加关键。”小牛互娱游戏制作人王正表示.
1900/1/1 0:00:00引言 为了带大家更好的了解加密货币的全球政策,郭律师团队曾在今年春节前后,先后在文字型的自媒体平台发布了全球十几个主流国家或地区的加密货币历年政策.
1900/1/1 0:00:00AI有变革生产力之势,证券市场闻风而动。同花顺数据显示,AIGC概念指数年内上涨近60%,涨幅是上证指数的10倍多。具体到个股,软通动力、远大智能等搭上AI风口的企业服务商“老树发新芽”,直接涨停.
1900/1/1 0:00:00