【隐私计算】VOLE (Vector Oblivious Linear Evaluation)学习笔记

2023-12-01 13:28

本文主要是介绍【隐私计算】VOLE (Vector Oblivious Linear Evaluation)学习笔记,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

近年来,VOLE(向量不经意线性评估)被用于构造各种高效安全多方计算协议,具有较低的通信复杂度。最近的CipherGPT则是基于VOLE对线性层进行计算。

1 VOLE总体设计

VOLE的功能如下,VOLE发送 Δ \Delta Δ b b b给sender,发送 a a a c c c给receiver,并且 c , a , b c, a, b c,a,b满足线性关系: c = Δ ⋅ a + b c=\Delta\cdot a + b c=Δa+b
在这里插入图片描述

现在主流的VOLE是基于LPN (Learning with Parity Noise)假设/问题来构造的。

2 基于LPN假设的VOLE构造

2.1 前置知识

1 LPN假设
LPN是一个重要的抗量子计算的困难问题。事实上,解决LPN问题等价于解决编码理论中的随机线性码纠错问题(Decoding a random linear code problem)。LPN的表述为:

  1. 随机生成矩阵 A A A
  2. 随机生成秘密(行)向量 s s s
  3. 随机生成错误(行)向量 e e e,满足 H W ( e ) = r ⋅ n HW(e)=r\cdot n HW(e)=rn,其中,参数 r r r是噪声比率
  4. 计算向量 b = s ⋅ A + e b=s\cdot A+e b=sA+e

则有 ( A , b ) ≈ c ( A ′ , b ′ ) (A, b)\approx _c(A^\prime, b^\prime) (A,b)c(A,b),其中, ( A ′ , b ′ ) (A^\prime, b^\prime) (A,b)是随机生成的。解决LPN问题即使是解决如下问题:给定 A , b A, b A,b,求解 s , e s, e s,e的值。
在密码实践中,为了保证具体的LPN参数设定是困难的,通常选取较大的 k k k,较大的 n n n以及较小的 r r r

2 函数秘密分享(Functional Secret Sharing, FSS)
FSS它允许计算 P 0 , P 1 P_0, P_1 P0,P1合作计算某个函数 f f f在某个点上的估值 f ( x ) f(x) f(x)。计算完成后, P 0 P_0 P0得到一份share为 f 0 ( x ) f_0(x) f0(x) P 1 P_1 P1得到另一份share为 f 1 ( x ) f_1(x) f1(x),满足 f ( x ) f = f 0 ( x ) + f 1 ( x ) f(x)f=f_0(x)+f_1(x) f(x)f=f0(x)+f1(x),其中, f 0 ( x ) , f 1 ( x ) f_0(x), f_1(x) f0(x),f1(x)是伪随机的。
FSS形式化定义如下:
给定函数 f f f,FSS定义了一对算法 ( G e n , E v a l ) (Gen, Eval) (Gen,Eval)

  • F S S . G e n ( 1 λ , f ) FSS.Gen(1^\lambda, f) FSS.Gen(1λ,f):给定安全参数 λ \lambda λ和函数 f f f,生成一对密钥 ( K 0 , K 1 ) (K_0, K_1) (K0,K1)
  • F S S . E v a l ( b , K b , x ) FSS.Eval(b, K_b, x) FSS.Eval(b,Kb,x):给定参与方索引 b ∈ { 0 , 1 } b\in \{0, 1\} b{0,1},密钥 K b K_b Kb和函数输入 x x x,输出 f b ∈ G f_b\in \mathbb G fbG G \mathbb G G表示群)

由此可见,在FSS过程中,涉及到AES对称加密。

3 VOLE生成器
VOLE定义了两个算法,即 V O L E = ( S e t u p , E x p a n d ) VOLE=(Setup, Expand) VOLE=(Setup,Expand)

  • S e t u p ( 1 λ , F , n , x ) Setup(1^\lambda, \mathbb F, n, x) Setup(1λ,F,n,x):输出一对种子 ( s e e d 0 , s e e d 1 ) (seed_0, seed_1) (seed0,seed1),其中, s e e d 1 seed_1 seed1包含输入 x x x
  • E x p a n d ( σ , s e e d σ ) Expand(\sigma, seed_\sigma) Expand(σ,seedσ):如 σ = 0 \sigma=0 σ=0,输出 ( u , v ) (u, v) (u,v);如 σ = 1 \sigma=1 σ=1,输出 w w w

于是VOLE满足以下正确性:
( u , v ) ← E x p a n d ( 0 , s e e d 0 ) , w ← E x p a n d ( 1 , s e e d 1 ) (u, v)\leftarrow Expand(0, seed_0), w\leftarrow Expand(1, seed_1) (u,v)Expand(0,seed0),wExpand(1,seed1),满足 w = u ⋅ x + v w=u\cdot x+v w=ux+v

2.2 VOLE的构造方法

现在介绍如何定义Setup和Expand算法,直觉就是在Setup中分配给 P 0 , P 1 P_0, P_1 P0,P1的种子 s e e d 0 , s e e d 1 seed_0, seed_1 seed0,seed1就具有某种线性关系,同时在Expand时仍保持这种线性关系。

尝试1
Setup构造如下:
s e e d 0 ← ( a , b ) ∈ R F k × F k , s e e d 1 ← ( c = a ⋅ x + b , x ) ∈ F k × F seed_0\leftarrow(a, b)\in _R\mathbb F^k\times \mathbb F^k, seed_1\leftarrow (c=a\cdot x+b, x)\in \mathbb F^k\times \mathbb F seed0(a,b)RFk×Fk,seed1(c=ax+b,x)Fk×F
其中 ( a , b ) (a, b) (a,b)是随机生成的,因此 c c c也是随机的。
Expand构造如下:
随机生成一个矩阵 C ∈ F k × n ( k < n ) C\in \mathbb F^{k\times n}(k<n) CFk×n(k<n),并将 C C C作为公开参数发布出去,然后计算:
E x p a n d ( 0 , s e e d 0 ) = ( a ⋅ C , b ⋅ C ) , E x p a n d ( 1 , s e e d 1 ) = c ⋅ C Expand(0, seed_0)=(a\cdot C, b\cdot C), Expand(1, seed_1)=c\cdot C Expand(0,seed0)=(aC,bC),Expand(1,seed1)=cC
由此可见,Expand保持了 a , b , c a, b, c a,b,c的线性关系,并把种子的长度从 k k k扩展到了 n n n

尝试2
但是上面的构造方式并非伪随机【这里我不是很理解】,借助LPN假设来解决这个问题,Expand构造如下:
E x p a n d ( 0 , s e e d 0 ) = ( a ⋅ C + μ , b ⋅ C − ν b ) , E x p a n d ( 1 , s e e d 1 ) = c ⋅ C + ν c Expand(0, seed_0)=(a\cdot C+\mu, b\cdot C-\nu_b), Expand(1, seed_1)=c\cdot C+\nu_c Expand(0,seed0)=(aC+μ,bCνb),Expand(1,seed1)=cC+νc
根据LPN可知Expand算法的输出是伪随机的【具体原因?】,但是线性关系难以满足,因为这里 ν c ≠ μ ⋅ x − ν b \nu_c \neq \mu\cdot x-\nu_b νc=μxνb,但是如果可以限制 ν c = μ ⋅ x − ν b \nu_c = \mu\cdot x-\nu_b νc=μxνb也就是 ν b + ν c = μ ⋅ x \nu_b+\nu_c = \mu\cdot x νb+νc=μx,线性关系就维持住了。幸运的事,依靠FSS可以生成伪随机 ν b , ν c \nu_b, \nu_c νb,νc满足这个关系。

正式构造
假设LPN假设中公开参数为 F , k , n , t = r n , C ∈ F k × n \mathbb F, k, n, t=rn, C\in \mathbb F^{k\times n} F,k,n,t=rn,CFk×n,则VOLE生成器 G G G可以定义为:
S e t u p ( 1 λ , x ) Setup(1^\lambda, x) Setup(1λ,x)

  1. 随机生成 ( a , b ) ∈ F k × F k (a, b)\in \mathbb F^k \times \mathbb F^k (a,b)Fk×Fk,随机生成 μ ∈ F n \mu\in \mathbb F^n μFn,满足 H W ( μ ) = t HW(\mu)=t HW(μ)=t
  2. 计算 c = a ⋅ x + b c=a\cdot x + b c=ax+b
  3. ( K 0 , K 1 ) ← F S S . G e n ( 1 λ , f ) (K_0, K_1)\leftarrow FSS.Gen(1^\lambda, f) (K0,K1)FSS.Gen(1λ,f),满足 F S S . E v a l ( 0 , K 0 ) + F S S . E v a l ( 1 , K 1 ) = x ⋅ μ FSS.Eval(0, K_0)+FSS.Eval(1, K_1)=x\cdot \mu FSS.Eval(0,K0)+FSS.Eval(1,K1)=xμ
  4. s e e d 0 ← ( K 0 , μ , a , b ) , s e e d 1 ← ( K 1 , x , c ) seed_0\leftarrow (K_0, \mu, a, b), seed_1\leftarrow (K_1, x, c) seed0(K0,μ,a,b),seed1(K1,x,c)
  5. 输出 s e e d 0 , s e e d 1 seed_0, seed_1 seed0,seed1

E x p a n d ( σ , s e e d σ ) Expand(\sigma, seed_\sigma) Expand(σ,seedσ)

  1. σ = 0 \sigma=0 σ=0 s e e d 0 = ( K 0 , μ , a , b ) seed_0=(K_0, \mu, a, b) seed0=(K0,μ,a,b),计算 ν 0 ← F S S . E v a l ( 0 , K 0 ) \nu_0\leftarrow FSS.Eval(0, K_0) ν0FSS.Eval(0,K0),输出 ( u , v ) ← ( a ⋅ C + μ , b ⋅ C − ν 0 ) (u, v)\leftarrow (a\cdot C+\mu, b\cdot C-\nu_0) (u,v)(aC+μ,bCν0)。即,尝试2中的 E x p a n d ( 0 , s e e d 0 ) = ( a ⋅ C + μ , b ⋅ C − ν 0 ) Expand(0, seed_0)=(a\cdot C+\mu, b\cdot C-\nu_0) Expand(0,seed0)=(aC+μ,bCν0)
  2. σ = 1 \sigma=1 σ=1 s e e d 1 = ( K 1 , x , c ) seed_1=(K_1, x, c) seed1=(K1,x,c),计算 ν 1 ← F S S . E v a l ( 1 , K 1 ) \nu_1\leftarrow FSS.Eval(1, K_1) ν1FSS.Eval(1,K1),输出 w ← c ⋅ C + ν 1 w\leftarrow c\cdot C+\nu_1 wcC+ν1。即,尝试2中的 E x p a n d ( 1 , s e e d 1 ) = c ⋅ C + ν 1 Expand(1, seed_1)=c\cdot C+\nu_1 Expand(1,seed1)=cC+ν1

值得注意的是, ν 0 , ν 1 \nu_0, \nu_1 ν0,ν1的生成基于FSS,在Setup中满足 F S S . E v a l ( 0 , K 0 ) + F S S . E v a l ( 1 , K 1 ) = x ⋅ μ FSS.Eval(0, K_0)+FSS.Eval(1, K_1)=x\cdot \mu FSS.Eval(0,K0)+FSS.Eval(1,K1)=xμ,因此很容易得到: ν 0 + ν 1 = x ⋅ μ \nu_0+\nu_1=x\cdot \mu ν0+ν1=xμ,故现在的构造方法符合LPN伪随机性,并且满足线性关系。

3 VOLE在MPC乘法中的应用

在MPC中,安全加法很容易进行,只需在本地做加法即可。而乘法则是困难的,需要双方进行通信实现。
现在考虑乘法 z = x y z=xy z=xy,其中, x x x P 0 P_0 P0方, y y y P 1 P_1 P1方,双方需要联合计算乘法结果。在算术秘密分享机制下,双方将自己的输入进行拆分,因此计算如下:
x y = ( ⟨ x ⟩ 0 + ⟨ x ⟩ 1 ) ( ⟨ y ⟩ 0 + ⟨ y ⟩ 1 ) = ⟨ x ⟩ 0 ⟨ y ⟩ 0 + ⟨ x ⟩ 1 ⟨ y ⟩ 1 + ⟨ x ⟩ 0 ⟨ y ⟩ 1 + ⟨ x ⟩ 1 ⟨ y ⟩ 0 xy = (\langle x\rangle_0+\langle x\rangle_1)(\langle y\rangle_0+\langle y\rangle_1)=\langle x\rangle_0\langle y\rangle_0+\langle x\rangle_1\langle y\rangle_1+\langle x\rangle_0\langle y\rangle_1+\langle x\rangle_1\langle y\rangle_0 xy=(⟨x0+x1)(⟨y0+y1)=x0y0+x1y1+x0y1+x1y0
其中,前两项均可以在本地计算,而后两项(交叉项,CrossTerm)是MPC计算的重难点。
⟨ x ⟩ 0 ⟨ y ⟩ 1 \langle x\rangle_0\langle y\rangle_1 x0y1为例,借助VOLE,让 P 0 P_0 P0计算出 v v v【即上面Expand中的 v = b ⋅ C − ν 0 v=b\cdot C-\nu_0 v=bCν0】, 让 P 1 P_1 P1计算出 w w w【即上面Expand中的 w = c ⋅ C + ν 1 w=c\cdot C+\nu_1 w=cC+ν1】,满足 ⟨ x ⟩ 0 ⟨ y ⟩ 1 = w − v \langle x\rangle_0\langle y\rangle_1=w-v x0y1=wv w − v = ν 0 + ν 1 + c ⋅ C − b ⋅ C = u ⋅ x + c ⋅ C − b ⋅ C w-v=\nu_0+\nu_1+c\cdot C-b\cdot C=u\cdot x+c\cdot C-b\cdot C wv=ν0+ν1+cCbC=ux+cCbC,其中 C C C公开, b ⋅ C , c ⋅ C b\cdot C, c\cdot C bC,cC分别在两方计算出来,是明文了,因此 w − v w-v wv的结果也可算】,即可解决交叉项的计算问题。

4 基于VOLE生成器构造VOLE

VOLE生成器本质是一种伪随机数生成器,生成的两串伪随机数恰好是线性相关的。
预计算生成随机种子

  1. 可信第三方(TTP)随机生成 r x ∈ F r_x\in \mathbb F rxF
  2. 调用VOLE生成器 G G G,计算 ( s e e d 0 , s e e d 1 ) ← S e t u p ( 1 λ , r ) (seed_0, seed_1)\leftarrow Setup(1^\lambda, r) (seed0,seed1)Setup(1λ,r)
  3. s e e d 0 seed_0 seed0发给 P 0 P_0 P0,将 ( r x , s e e d 1 ) (r_x, seed_1) (rx,seed1)发给 P 1 P_1 P1

预计算生成 ( r u , r v , r w ) (r_u, r_v, r_w) (ru,rv,rw)

  1. P 0 P_0 P0计算 ( r u , r v ) ← E x p a n d ( 0 , s e e d 0 ) (r_u, r_v)\leftarrow Expand(0, seed_0) (ru,rv)Expand(0,seed0)
  2. P 1 P_1 P1计算 r w ← E x p a n d ( 1 , s e e d 1 ) r_w\leftarrow Expand(1, seed_1) rwExpand(1,seed1)

在线计算
现在 P 0 P_0 P0拥有 ( u , v ) (u, v) (u,v) P 1 P_1 P1拥有 x x x【于是,我们又回到了最开头那幅图】
在这里插入图片描述

  1. P 1 P_1 P1计算 m x ← x − r x m_x\leftarrow x-r_x mxxrx,并将 m x m_x mx发给 P 0 P_0 P0
  2. P 0 P_0 P0计算 m u ← u − r u , m v ← m x r u + v − r v m_u\leftarrow u-r_u, m_v\leftarrow m_xr_u+v-r_v muuru,mvmxru+vrv,并发给 P 1 P_1 P1
  3. P 1 P_1 P1计算 w ← m u x + m v + r w w\leftarrow m_ux+m_v+r_w wmux+mv+rw

正确性
预计算阶段得到的随机向量满足 r w = r u ⋅ r x + r v r_w=r_u\cdot r_x+r_v rw=rurx+rv,于是 P 1 P_1 P1方:
w = m u x + m v + r w = ( u − r u ) x + ( m x r u + v − r v ) + ( r u ⋅ r x + r v ) = ( u − r u ) x + ( ( x − r x ) r u + v − r v ) + ( r u ⋅ r x + r v ) = u x − r u x + r u x − r u r x + v − r v + r u r x + r v = u x + v w=m_ux+m_v+r_w\\~~~~=(u-r_u)x+(m_xr_u+v-r_v)+(r_u\cdot r_x+r_v)\\~~~~=(u-r_u)x+((x-r_x)r_u+v-r_v)+(r_u\cdot r_x+r_v)\\~~~~=ux-r_ux+r_ux-r_ur_x+v-r_v+r_ur_x+r_v\\~~~~=ux+v w=mux+mv+rw    =(uru)x+(mxru+vrv)+(rurx+rv)    =(uru)x+((xrx)ru+vrv)+(rurx+rv)    =uxrux+ruxrurx+vrv+rurx+rv    =ux+v

这个形式和图中的 c = Δ ⋅ a + b c=\Delta\cdot a+b c=Δa+b完全一致。由此可见,至此我们已经成功构造出VOLE的线性表达式。

参考资料

基于LPN假设构造VOLE

这篇关于【隐私计算】VOLE (Vector Oblivious Linear Evaluation)学习笔记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/441318

相关文章

Python如何实现PDF隐私信息检测

《Python如何实现PDF隐私信息检测》随着越来越多的个人信息以电子形式存储和传输,确保这些信息的安全至关重要,本文将介绍如何使用Python检测PDF文件中的隐私信息,需要的可以参考下... 目录项目背景技术栈代码解析功能说明运行结php果在当今,数据隐私保护变得尤为重要。随着越来越多的个人信息以电子形

Python如何计算两个不同类型列表的相似度

《Python如何计算两个不同类型列表的相似度》在编程中,经常需要比较两个列表的相似度,尤其是当这两个列表包含不同类型的元素时,下面小编就来讲讲如何使用Python计算两个不同类型列表的相似度吧... 目录摘要引言数字类型相似度欧几里得距离曼哈顿距离字符串类型相似度Levenshtein距离Jaccard相

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

C++中使用vector存储并遍历数据的基本步骤

《C++中使用vector存储并遍历数据的基本步骤》C++标准模板库(STL)提供了多种容器类型,包括顺序容器、关联容器、无序关联容器和容器适配器,每种容器都有其特定的用途和特性,:本文主要介绍C... 目录(1)容器及简要描述‌php顺序容器‌‌关联容器‌‌无序关联容器‌(基于哈希表):‌容器适配器‌:(

使用C#代码计算数学表达式实例

《使用C#代码计算数学表达式实例》这段文字主要讲述了如何使用C#语言来计算数学表达式,该程序通过使用Dictionary保存变量,定义了运算符优先级,并实现了EvaluateExpression方法来... 目录C#代码计算数学表达式该方法很长,因此我将分段描述下面的代码片段显示了下一步以下代码显示该方法如

如何用Java结合经纬度位置计算目标点的日出日落时间详解

《如何用Java结合经纬度位置计算目标点的日出日落时间详解》这篇文章主详细讲解了如何基于目标点的经纬度计算日出日落时间,提供了在线API和Java库两种计算方法,并通过实际案例展示了其应用,需要的朋友... 目录前言一、应用示例1、天安门升旗时间2、湖南省日出日落信息二、Java日出日落计算1、在线API2

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;