Mental Poker- Part 2

news2024/12/22 20:59:22

在part-1中,我们梳理了去中心纸牌游戏所面临的挑战,也介绍了一种改进的Barnett-Smart协议,part-2将深入了解该协议背后涉及的算法。

Discrete-log VTMF

VTMFs包含4部分:key generation, mask, remask and unmask,这些算法主要通过El Gamal加密算法来实现的。可验证性是通过零知识证明来实现的,主要用于证明加密和解密操作的正确性。

key generation

玩家i 随机选取私钥 x i ← Z q x_i \leftarrow Z_q xiZq , 计算相应公钥 H i = x i ⋅ G H_i = x_i \cdot G Hi=xiG并公开(为抵抗rogue key attacks,要求每个玩家提供一个零知识证明,可以使用schnorr身份证明协议)

一旦所以玩家公开他们的公钥之后,我们可以计算一个聚合公钥 H H H,其中 l l l代表参与玩家总数
H = ∑ i l H i = ∑ i = 1 l x i G H= \sum_i^{l}H_i = \sum_{i=1}^{l}x_iG H=ilHi=i=1lxiG

Mask

ζ H \zeta_H ζH表示掩码函数, H H H表示聚合公钥, M ∈ G M \in G MG表示卡牌映射在群G上的元素,对 M M M进行mask得到密文 C ∈ G × G C\in G \times G CG×G, 其过程如下:
C = ζ H ( M , r ) = ( C a C b ) = ( r G M + r H ) C = \zeta_H(M,r) = \left( \begin{matrix} C_a \\ C_b \end{matrix} \right) = \left( \begin{matrix} rG \\ M + rH \end{matrix} \right) C=ζH(M,r)=(CaCb)=(rGM+rH)

这里 r ∈ Z q r \in Z_q rZq被称为masking factor。通过计算 C b − r H C_b - rH CbrH 可以恢复卡牌, 所以r必须保密不可泄漏。

Remask

ζ H ′ \zeta_H' ζH表示掩码函数, H H H表示聚合公钥,玩家随机选择 r ′ ← Z q r' \leftarrow Z_q rZq,对掩码卡牌 C = ( C a C b ) C=\left( \begin{matrix} C_a \\ C_b \end{matrix} \right) C=(CaCb)进行重掩码:
C ′ = ζ H ′ ( C , r ′ ) = C + ( r ′ G r ′ H ) = ( C a + r ′ G C b + r ′ H ) C' = \zeta_H'(C,r') = C + \left( \begin{matrix} r' G \\ r' H \end{matrix} \right) = \left( \begin{matrix} C_a+r' G \\ C_b+r' H \end{matrix} \right) C=ζH(C,r)=C+(rGrH)=(Ca+rGCb+rH)

例如一局游戏有Alice、Bob和Charlie三个玩家,这三个玩家先后其对卡牌进行掩码和重掩码的过程如下:Alice首先用 α \alpha α去随机化卡牌M得到 C 1 C_1 C1,然后Bob用 β \beta β C 1 C_1 C1进行重掩码得到 C 2 C_2 C2,最后Charlie用 γ \gamma γ C 2 C_2 C2进行重掩码得到 C 3 C_3 C3
C 1 = ζ H ( M , α ) = ( α G M + α H ) C 2 = ζ H ′ ( C 1 , β ) = C 1 + ( β G β H ) = ( ( α + β ) G M + ( α + β ) H ) C 3 = ζ H ′ ( C 2 , γ ) = C 2 + ( γ G γ H ) = ( ( α + β + γ ) G M + ( α + β + γ ) H ) \begin{align} & C_1 = \zeta_H(M,\alpha) = \left( \begin{matrix} \alpha G \\ M + \alpha H \end{matrix} \right) \\ & C_2 = \zeta_H' (C_1,\beta) =C_1 + \left( \begin{matrix} \beta G \\ \beta H \end{matrix} \right) = \left( \begin{matrix} (\alpha+\beta) G \\ M + (\alpha+\beta) H \end{matrix} \right) \\ & C_3 = \zeta_H' (C_2,\gamma) =C_2 + \left( \begin{matrix} \gamma G \\ \gamma H \end{matrix} \right) = \left( \begin{matrix} (\alpha+\beta +\gamma ) G \\ M + (\alpha+\beta+\gamma ) H \end{matrix} \right) \\ \end{align} C1=ζH(M,α)=(αGM+αH)C2=ζH(C1,β)=C1+(βGβH)=((α+β)GM+(α+β)H)C3=ζH(C2,γ)=C2+(γGγH)=((α+β+γ)GM+(α+β+γ)H)

在所有玩家完成上述掩码或重掩码过程后,实际上我们得到在masking factor为 α + β + ζ \alpha+\beta+\zeta α+β+ζ下的掩码卡牌,因此要恢复卡牌,需要每个玩家提供其所拥有的masking factor,还有另外一种方法不需要提供masking factor,见下面unmask过程。

Unmask

给定掩码卡牌 C = ( C a C b ) C=\left( \begin{matrix} C_a \\ C_b \end{matrix} \right) C=(CaCb),玩家i使用私钥计算 D i = x i C a D_i = x_iC_a Di=xiCa并公开,等待所有玩家公开之后,可以计算
M = C b − ∑ i = 1 l D i M = C_b - \sum_{i=1}^l D_i M=Cbi=1lDi

Verifiability

上述操作(不包括密钥生成)的可验证性可以通过Chaum-Pedersen离散对数相等性证明来实现。在经典的sigma协议中, 给定 α G \alpha G αG β H \beta H βH, 证明者可以通过zero knowledge证明他知道 α \alpha α的值且 α = β \alpha = \beta α=β 。对于mask操作而言,需要证明和验证的是 c a c_a ca c b − M c_b -M cbM对应 α = r \alpha =r α=r , 对于remask操作而言,需要证明和验证的是 c a ′ − c a c_a' -c_a caca c b ′ − c b c_b' -c_b cbcb对应 α = r ′ \alpha =r' α=r , 对于unmask操作来说,需要证明和验证的是 H i H_i Hi D i D_i Di对应 α = x i \alpha = x_i α=xi ,

ZK Shuffle

为了便于理解ZK Shuffle,假设存在一组群中元素 P 1 , P 2 , . . . , P N P_1,P_2,...,P_N P1,P2,...,PN ,这些元素经过置换再加上盲化因子 Δ i \Delta_i Δi后输出为:
P i ′ = P π ( i ) + Δ i P_i' = P_{\pi(i)} + \Delta_i Pi=Pπ(i)+Δi
其中 π \pi π为置换函数,下面这张图展示了6个元素的置换过程:

在这里插入图片描述

为了有效地生成论证(argument),我们使用多项式等式来表示洗牌过程。然后,我们从domain上选择一个随机点,在该点打开多项式,并通过比较在该点的值是否相等来验证等式是否成立。其中一个多项式由验证者使用公开数据来计算,另外一个多项式由证明者使用秘密数据来计算。由于证明者不可信,还必须设计额外的arguments来确保证明者的多项式是正确计算的。

Shuffle as a Polynomial Equality

argument的核心是下面这个验证等式,给定一个挑战 z c ← Z q \ { 0 , 1 } z_c \leftarrow Z_q \backslash \{0,1\} zcZq\{0,1},验证者验证:
∑ i = 1 N z c i P i = ∑ i = 1 N z c π ( i ) ( P i ′ − Δ i ) \sum_{i=1}^{N}z_c^iP_i = \sum_{i=1}^{N}z_c^{\pi(i)}(P_{i}'-\Delta_i) i=1NzciPi=i=1Nzcπ(i)(PiΔi)
等式左边可使用公开数据(shuffle的输入)和挑战计算,因此这部分验证者可以计算;而等式右边只能由证明者计算,因此它涉及到秘密置换 π \pi π和盲化因子 Δ i \Delta_i Δi

注意到上述等式同两个多项式在点 z c z_c zc处打开的过程非常相似。我们可以用变量乘以生成元的形式来表示上述等式中的元素:

  • s i ∈ Z q s_i \in Z_q siZq,则 P i = s i G P_i = s_iG Pi=siG
  • s i ′ ∈ Z q s_i ' \in Z_q siZq,则 P i ′ = s i ′ G P_i' = s_i'G Pi=siG
  • δ i ∈ Z q \delta_i \in Z_q δiZq,则 Δ i = δ i G \Delta_i = \delta_iG Δi=δiG

用这些新的形式替换上面等式,得到:
( ∑ i = 1 N z c i s i ) G = ( ∑ i = 1 N z c π ( i ) ( s i ′ − δ i ) ) G (\sum_{i=1}^Nz_c^is_i)G = (\sum_{i=1}^Nz_c^{\pi(i)}(s_i'-\delta_i))G (i=1Nzcisi)G=(i=1Nzcπ(i)(siδi))G
考虑下面的多项式 f f f g g g,这两个多项式在 z c z_c zc处的打开值再乘以群的生成元就可以得到上面的等式:
f ( z ) = ∑ i = 1 N z i s i , g ( z ) = ∑ i = 1 N z π ( i ) ( s i ′ − δ i ) f(z) = \sum_{i=1}^Nz^is_i , g(z) = \sum_{i=1}^Nz^{\pi(i)}(s_i' - \delta^i) f(z)=i=1Nzisi,g(z)=i=1Nzπ(i)(siδi)
鉴于累加的顺序是可以交换的,则 f f f可以写成 f ( z ) = ∑ i = 1 N z π ( i ) s π ( i ) f(z) = \sum_{i=1}^Nz^{\pi(i)}s_{\pi(i)} f(z)=i=1Nzπ(i)sπ(i),实际上只是通过置换改变求和中每项的顺序,所以最后累加的结果不变。
f ( z ) = g ( z ) ⟺ ∑ i = 1 N z π ( i ) s π ( i ) = ∑ i = 1 N z π ( i ) ( s i ′ − δ i ) ⟺ ∀ i ∈ { 1 , 2 , . . . , N } , s π ( i ) = s i ′ − δ i ⟺ ∀ i ∈ { 1 , 2 , . . . , N } , P π ( i ) = P i ′ − Δ i f(z) =g(z) \Longleftrightarrow \sum_{i=1}^Nz^{\pi(i)}s_{\pi(i)} = \sum_{i=1}^Nz^{\pi(i)}(s_i' - \delta^i) \\ \Longleftrightarrow \forall i\in \{1,2,...,N\},s_{\pi(i)} = s_i' -\delta_i \\ \Longleftrightarrow \forall i\in \{1,2,...,N\},P_{\pi(i)} = P_i' -\Delta_i f(z)=g(z)i=1Nzπ(i)sπ(i)=i=1Nzπ(i)(siδi)i{1,2,...,N},sπ(i)=siδii{1,2,...,N},Pπ(i)=PiΔi
很明显z不能等于 0 或 1,当且仅当shuffle过程是有效的,多项式 f f f g g g相等

Checking the Polynomial Equality

为了检查多项式相等,我们计算这两个多项式在点 z c ← Z q \ { 0 , 1 } z_c \leftarrow Z_q \backslash \{0,1\} zcZq\{0,1}处的打开值,然后检查 f ( z c ) = g ( z c ) f(z_c) =g(z_c) f(zc)=g(zc),然而这不能保证这两个多项式完全相等,Schwartz-Zippel 定理告诉我们大概以 1 − N Z q 1-\frac{N}{Z_q} 1ZqN的概率趋于相等,其中 ∣ Z q ∣ > > N |Z_q|>>N Zq>>N.

其次,我们也不能直接计算这两个多项式,因为我们不可能获取到 s π ( i ) 、 s i ′ , δ i s_{\pi(i)}、s_i',\delta_i sπ(i)si,δi这些秘密值,所以只能通过计算下面这个等式来验证:
∑ i = 1 N z c i P i = ∑ i = 1 N z c π ( i ) ( P i ′ − Δ i ) \sum_{i=1}^{N}z_c^iP_i = \sum_{i=1}^{N}z_c^{\pi(i)}(P_{i}'-\Delta_i) i=1NzciPi=i=1Nzcπ(i)(PiΔi)

Ensuring the Prover Behaves Honestly

如前面所说,等式右边( ∑ i = 1 N z c π ( i ) ( P i ′ − Δ i ) \sum_{i=1}^{N}z_c^{\pi(i)}(P_{i}'-\Delta_i) i=1Nzcπ(i)(PiΔi))只能由不受信任的证明者进行计算,且不泄露任何隐私信息。我们通过承诺(commitments)和零知识证明(zero-knowledge arguments)来满足这些属性。

首先,证明者会对置换进行承诺,并通过zero knowledge证明他们按照已承诺的置换对挑战 z c z_c zc的幂进行了置换,最后验证者可以得到承 C z , π C_{z,\pi} Cz,π,其是对向量 [ z c π ( 1 ) , z c π ( 2 ) , . . . , z c π ( N ) ] [z_c^{\pi(1)},z_c^{\pi(2)},...,z_c^{\pi(N)}] [zcπ(1),zcπ(2),...,zcπ(N)]的承诺,这个向量可用于内积证明(inner-product argument),以生成可证明的期望值: ∑ i = 1 N z c π ( i ) ( P i ′ − Δ i ) \sum_{i=1}^N z_c^{\pi(i)}(P_{i}'-\Delta_i) i=1Nzcπ(i)(PiΔi)

这些arguments并不是平凡的(trivial),可能需要单独的文章来提供数学方面的理解。此外在《Efficient Zero-knowledge Argument for Correctness of a Shuffle》中提到的 inner-product argument和permutation argument后来也分别被Bulletproofs和PlonK采用和改进。

From Shuffling Group Elements to Shuffling Cards

请注意,以上讨论仅涉及对单个群元素进行洗牌,而不是对一个掩码卡牌(由两个群元素组成的密文)进行洗牌。然而,我们可以将上述过程扩展到掩码卡牌,这里推荐两种方式:

  1. 证明者分别在两组群元素上执行argument,同时要求证明对这两组元素使用相同的置换。这对于现有的argument structure是可行的,因为证明者已经承诺了一个置换并且证明了它的正确性。
  2. 将每张掩码卡牌视为群 H = G × G \mathbb{H} = G \times G H=G×G中的一个元素,并定义群 H \mathbb{H} H的操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1006766.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2024年java面试--mysql(4)

系列文章目录 2024年java面试(一)–spring篇2024年java面试(二)–spring篇2024年java面试(三)–spring篇2024年java面试(四)–spring篇2024年java面试–集合篇2024年java面试–redi…

Matlab 2016安装MinGW-w64-4.9.2

Matlab 2016安装MinGW-w64-4.9.2 项目需求:需要将matlab中的.m文件编译为cpp文件 .dll .h .lib。 我相信大家在对matlab2016安装MinGW-w64出现了各种各样的问题。如:4.9.2安装失败;安装了其他版本但是matlab检测不到,或者其他各种…

stable diffusion安装及使用

最近在看这个,踩了一些坑,现在有点头绪了,记录如下 安装很简单,直接git下载下来,然后进到根目录执行./web-ui.py,第一次启动你没有模型他会帮你下载个默认模型,我有模型了,就先把这个模型放到*/…

【Python】从入门到上头— 使用re模块用于快速实现正则表达式需求(11)

正则表达式语法规则 详见 【Java基础】正则表达式应用 re模块 正则表达式是一种用来匹配字符串的强有力的武器。它的设计思想是用一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符串,我们就认为它“匹配”了,否则,…

服务器上一个域名对应多个前端项目的nginx转发配置

场景: 当有两个前端项目A,B的时候,项目A(对应端口8000)和项目B(对应端口8001)分别部署在服务器的不同位置,通过服务器ip端口都能正常访问单独的项目A和项目B;现在要求两个项目共用一…

工作中有许多比较常用的SQL脚本

工作中有许多比较常用的SQL脚本,今天开始分几章分享给大家。 1、行转列的用法PIVOTCREATE table test (id int,name nvarchar(20),quarter int,number int) insert into test values(1,N苹果,1,1000) insert into test values(1,N苹果,2,2000) insert into test va…

整理一下5个全国化的股票十倍杠杆正规平台(2023最大十倍杠杆炒股平台)

在全国范围内,有诸多优秀的杠杆平台可供选择。本文将介绍5个全国化的股票十倍杠杆正规平台:红腾网、广瑞网、一鼎盈、广盛网、富灯网。 1. 红腾网 红腾网是国内的一家知名杠杆交易平台,平台以高效、便捷、安全的特点著称。 2. 广瑞网 广瑞…

拿走吧你,Fiddler模拟请求发送和修改响应数据

模拟伪造请求 方法一:打断点模拟HTTP请求 1、浏览器页面填好内容后(不要操作提交),打开fiddler,设置请求前断点,点击菜单fiddler,”Rules”\”Automatic Breakpoints”\”Before Requests” 2、在页面上点…

数字孪生的实用性为何遭受质疑?这篇文章为你解答

数字孪生技术的实用性体现在哪?数字孪生技术不仅是当今科技领域的热点,也是各行各业不断探索和应用的新兴领域。这项技术的实用性在于它的多领域适用性和巨大潜力。然而,目前有许多声音认为数字孪生技术是一项“没用”的技术,仅仅…

扑克牌QB/T 2228标准

QB/T 2228-2013扑克牌 本标准规定了扑克牌的术语和定义、分类及组成、要求、试验方法、检验规则和标志、包装、运输、贮存。 本标准适用于纸质扑克牌。 规范性引用文件 下列文件对于本文件的应用是必不可少的.凡是注日期的引用文件,仅注日期的版本适用于本文件。凡是不注日期…

抖音生活服务“整编”,一场消费与产业的生态共赢

团券、到店、核销,这已经成为当代年轻人出去吃饭、理发等的日常,如同上网买衣服、买手机一样。这样的消费日常背后,稳定已久的生活服务行业再次硝烟弥漫。搅动一池春水的,是抖音等互联网后来者。 根据媒体报道,抖音生…

市场开始复苏,三星传调涨内存芯片高达20% | 百能云芯

随着行动内存芯片市场迹象显示出复苏迹象,并且最早在第四季度供不应求,三星电子已宣布将提高动态随机存取存储器(DRAM)和NAND闪存芯片的价格,幅度达到10%~20%。 韩国经济日报报道,知情人士透露,…

四川玖璨电子商务有限公司:怎么做视频运营?

视频运营是指通过策划、发布和推广视频内容,以吸引更多的用户观看,并实现商业价值的过程。在当今数字化时代,视频已经成为人们获取信息、娱乐消遣的重要方式之一,因此,如何做好视频运营成为了各大平台和个人所关注的焦…

有了这个Python库,免费实现验证码识别

在做UI自动化时,无论是APP还是Web在登录页面经常会遇到需要输入验证码的时候,网上也有很多方法进行帮助我们,比如通过百度OCR的接口或者其他平台的开源接口,但是大多数都是收费的,对于我们个人学习非常不友好。 以前小…

[Java] String详解

愿一分耕耘,一份收获 文章目录 前言1. String基础概念2. String对象的比较2.1 与equals()的应用 3. 字符串的转化3.1 数字与字符串的转化3.2 大小写转换3.3 字符串与字符数组转换4. 字符串修改1.引入库2.读入数据 总结 前言 String这部分是面试中常常考到的题.string常量池,Sr…

流量录制回放工具在自动化测试领域应用探索

引言: 随着中国农业银行技术架构的日益更迭与业务场景的不断创新,测试工作正在面临数据构造繁琐、案例维护成本较高且质量参差不齐等诸多问题与挑战,主要体现在以下四方面: 一是在系统架构升级与代码重构时,大量原始接…

01_kafka_环境搭建安装_topic管理

文章目录 安装jdk配置主机名Zookeeper 下载与安装Kafka 下载与安装测试集群版安装测试输出 安装jdk 略 配置主机名 hostnamectl set-hostname kafka_1 /etc/sysconfig/network HOSTNAMEkafka_1/etc/hosts ip kafka_1ping kafka_1 测试 Zookeeper 下载与安装 由于 集群…

科技云报道:青云科技为何成为IDC云转型的“神队友”?

科技云报道原创。 如今随着出海企业数量的不断增长,跨境业务也逐渐从蓝海变红海,从“价格战”到“智能战”。 一个明显的变化,来自企业对于出海效率的提升。《埃森哲2022中国企业国际化研究》指出,企业想要在出海浪潮中取胜&…

智能合约平台开发指南

随着区块链技术的普及,智能合约平台已经成为了这个领域的一个重要趋势。智能合约可以自动化执行合同条款,大大减少了执行和监督合同条款所需的成本和时间。那么,如何开发一个智能合约平台呢?以下是一些关键步骤。 一、选择合适…

赴日IT工作 日本的IT工作怎么样?

有许多朋友困惑去日本做IT需要什么条件?日本的IT工作怎么样?今天我来给大家简单分析一下。如果你想要去做赴日IT工作,需要国内正规本科或大专学历及以上才可以,然后就是你的技术和日语要过关,比较重要的是日语&#xf…