Mental Poker- Part 2

在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.mzph.cn/news/77948.shtml

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

相关文章

NFTScan 正式上线 TON NFTScan 浏览器!

2023 年 9 月 12 号,NFTScan 团队正式对外发布了 TON NFTScan 基础设施,将为 TON 生态的 NFT 开发者和用户提供简洁高效的 NFT 数据搜索查询服务。NFTScan 作为全球领先的 NFT 数据基础设施服务商,TON 是继 Bitcoin、Ethereum、BNBChain、Pol…

interview3-微服务与MQ

一、SpringCloud篇 (1)服务注册 常见的注册中心:eureka、nacos、zookeeper eureka做服务注册中心: 服务注册:服务提供者需要把自己的信息注册到eureka,由eureka来保存这些信息,比如服务名称、…

Unity Animation、Animator 的使用(超详细)

文章目录 1. 添加动画2. Animation2.1 制作界面2.2 制作好的 Animation 动画2.3 添加和使用事件 3. Animator3.1 制作界面3.2 一些参数解释3.3 动画参数 4. Animator中相关类、属性、API4.1 类4.2 属性4.3 API4.4 几个关键方法 5. 动画播放和暂停控制 1. 添加动画 选中待提添加…

Sudowrite:基于人工智能的AI写作文章生成工具

【 产品介绍】 名称 Sudowrite 成立/上线时间 2023年 具体描述 Sudowrite是一个基于GPT-3的人工智能写作工具,可以帮助你快速生成高质量的文本内容, 无论是小说、博客、营销文案还是学术论文。 Sudowrite可以根据你的输入和指…

八、MySql表的复合查询

文章目录 一、基本查询回顾二、多表查询(一)笛卡尔积的初步过滤(二)例子1.显示部门号为10的部门名,员工名和工资2.显示各个员工的姓名,工资,及工资级别 三、自连接(一)定…

pkg 打包 nodejs

一、先全局安装pkg npm i -g pkg 二、下载打包所需的 node-v16.16.0-linux-x64 和 node-v16.16.0-win-x64 下载地址,里面选择你需要的版本 三、放到pkg的缓存目录 windows:C:\Users\whh\.pkg-cache\v3.4,(把whh替换为你的电脑…

【计算机网络】传输层协议——TCP(上)

文章目录 TCPTCP协议段格式报头和有效载荷如何分离?4位首部长度 TCP可靠性确认应答机制的提出序号和确认序号为什么序号和确认序号在不同的字段? 16位窗口大小 6个标志位标志位本质具体标志位PSHRSTURG 超时重传机制 文章目录 TCPTCP协议段格式报头和有效…

领域驱动设计:领域模型与代码模型的一致性

文章目录 领域对象的整理从领域模型到微服务的设计领域层的领域对象应用层的领域对象 领域对象与微服务代码对象的映射典型的领域模型非典型领域模型 DDD 强调先构建领域模型然后设计微服务,以保证领域模型和微服务的一体性,因此我们不能脱离领域模型来谈…

树控件、下拉框、文本框常用测试用例

01 控件的测试外观操作 1)项目中的所有树是否风格一致 2)树结构的默认状态是怎样的。比如默认树是否是展开,是展开几级? 是否有默认的焦点?默认值是什么?展开的节点图标和颜色? 3&#xff09…

Matlab之创建空数组的多种方法汇总

一、matlab空数组是什么? 在MATLAB中,空数组是指没有元素的数组对象。它可以用于占位或者作为容器,等待后续添加元素。 二、创建空数组的多种方法 1、使用空方括号 [] 创建空矩阵 A []; % 创建一个空双精度矩阵 B logical([]); % 创建一…

TypeScript类型系统层级

🎬 岸边的风:个人主页 🔥 个人专栏 :《 VUE 》 《 javaScript 》 ⛺️ 生活的理想,就是为了理想的生活 ! 目录 1. 顶层类型(Top Type) 1.1 any 类型 1.2 unknown 类型 2. 底层类型(Bottom …

linux设备树节点添加新的复位属性之后设备驱动加载异常问题分析

linux设备树节点添加新的复位属性之后设备驱动加载异常问题分析 1 linux原始设备驱动信息1.1 设备树节点信息1.2 linux设备驱动1.3 makefile1.4 Kconfig1.5 对应的defconfig文件 2 修改之后的linux设备驱动2.1 修改之后的设备树节点信息2.2 原始test_fw.c出现的问题以及原因分析…

【Git】Git 快照 Snapshot

Git 快照 Snapshot 在对 Git 基础的学习过程中,我们了解了 Git 仓库的基本结构: 工作目录暂存区版本库,即 .git 仓库 下面我们就通过一次修改、暂存以及提交的工作流程,来理解快照(Snapshot)的概念。 现…

【C语言】每日一题(半月斩)——day1

目录 😊前言 一.选择题 1.执行下面程序,正确的输出是(c) 2.以下不正确的定义语句是( ) 3.test.c 文件中包括如下语句,文件中定义的四个变量中,是指针类型的变量为【多选】&a…

The specified module could not be found.

新电脑运行项目的时候出现了某个包找不到的问题 \\?\D:\guanwnag\cloudquery-website\node_modules\.pnpm\nxnx-win32-x64-msvc16.5.3\node_modules\nx\nx-win32-x64-msvc\nx.win32-x64-msvc.node 引入的路径就感觉有问题 去github上查找原因,发现是没安装 Micro…

Anaconda下Jupyter Notebook执行OpenCV中cv2.imshow()报错(错误码为1272)网上解法汇总记录和最终处理方式

零、我设备的相关信息 Python 3.8.8Anaconda3 2021.05查询匹配python3.8.*的OpenCV匹配版本为:4.1.* — 4.2.*,我最后安装4.2.0.32版本如下我记录了 “从发现问题,到不断试错,最后解决问题” 的完整过程,以备自己复盘…

【Java基础篇 | 面向对象】--- 聊聊什么是多态(上篇)

个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【JavaSE_primary】 本专栏旨在分享学习JavaSE的一点学习心得,欢迎大家在评论区讨论💌 目录 一、什么是多态二、多…

IIC总线上拉电阻计算

IIC总线上拉电阻计算 1. 概述2. 上拉电阻计算3. 总线传输速度与功率4. 实例计算 1. 概述 IIC(Inter-Integrated Circuit)其实是IICBus简称,所以中文应该叫集成电路总线,它是一种串行通信总线,使用多主从架构&#xff…

【PowerQuery】Excel的PowerQuery的复制

在Excel中构建符合要求的PowerQuery连接之后,所有的PowerQuery 连接已经顺利的保存在Excel 工作簿当中,但是如何去查看已经保存的PowerQuery连接呢?图6.3 显示了查看PowerQuery连接。 Excel界面->数据页签->查询与连接 如果你的Power…

Redis从入门到精通(四:持久化)

持久化简介 什么是持久化 利用永久性存储介质将数据进行保存,在特定的时间将保存的数据进行恢复的工作机制称为持久化 持久化用于防止数据的意外丢失,确保数据安全性 为什么持久化 redis是将数据存储在内存上的,一旦断电,或者因…