4. 秘密共享

前言

本文主要记录了近期学习的秘密共享算法,包括算数秘密共享(Arithmetic Secret Sharing,ASS)与函数秘密共享(Function Secret Sharing,FSS):

  • 算数秘密共享 :将秘密 x = x 1 + x 2 x=x_1+x_2 x=x1+x2 拆分为加性份额 x 1 x_1 x1 和 x 2 x_2 x2 以保护输入数据的安全,支持密态加法与乘法。
  • 函数秘密共享 :将密态函数 f ( x ) = f 0 ( x ) + f 1 ( x ) f(x)=f_0(x)+f_1(x) f(x)=f0(x)+f1(x) 拆分为加性份额 f 0 ( x ) f_0(x) f0(x) 和 f 1 ( x ) f_1(x) f1(x) 以保护函数结构的安全,不保证输入的安全性。

文章目录


一、算数秘密共享

1. 缩放

秘密共享是环 Z 2 l \mathbb{Z}{2^l} Z2l 上的安全计算,所有运算均需模 2 l 2^l 2l。为了利用秘密共享实现隐私保护的多方计算,需要利用缩放因子 s s s 将实数消息 x ′ ∈ R x'\in\mathbb{R} x′∈R 扩大 2 s 2^s 2s 倍,并映射到环 Z 2 l \mathbb{Z}{2^l} Z2l 上,再进行秘密共享:

x = ⌊ x ′ ⋅ 2 s ⌋ m o d    2 l x=\lfloor x'\cdot 2^s \rfloor\mod 2^l x=⌊x′⋅2s⌋mod2l

2. 加解密

  • 加密 :对于秘密 x ∈ Z 2 l x\in \mathbb{Z}{2^l} x∈Z2l,数据拥有者采样随机值 r ∈ Z 2 l r\in \mathbb{Z}{2^l} r∈Z2l,并设置两个份额分别为 ⟨ x ⟩ 0 = x − r \langle x \rangle_0 = x-r ⟨x⟩0=x−r 和 ⟨ x ⟩ 1 = r \langle x \rangle_1 = r ⟨x⟩1=r,然后将份额 ⟨ x ⟩ b \langle x \rangle_b ⟨x⟩b 发送给计算方 P b P_b Pb,其中 b ∈ { 0 , 1 } b\in\{0,1\} b∈{0,1} 。
  • 解密 :计算方 P 0 P_0 P0 和 P 1 P_1 P1 将各自的份额发送给对方,然后将两个份额相加即可解密 x = ⟨ x ⟩ 0 + ⟨ x ⟩ 1 x=\langle x \rangle_0+\langle x \rangle_1 x=⟨x⟩0+⟨x⟩1 。
  • 正确性 : ⟨ x ⟩ 0 + ⟨ x ⟩ 1 = ( x − r ) + r = x \langle x \rangle_0+\langle x \rangle_1 =(x-r)+r=x ⟨x⟩0+⟨x⟩1=(x−r)+r=x

3. 安全计算

秘密共享可以在密文上实现加法和乘法运算:

  • 加法 :假设计算方 P b P_b Pb 拥有密文 ⟨ x ⟩ b \langle x \rangle_b ⟨x⟩b 和 ⟨ y ⟩ b \langle y \rangle_b ⟨y⟩b,则加法份额为 ⟨ x + y ⟩ b = ⟨ y ⟩ b + ⟨ x ⟩ b \langle x + y \rangle_b = \langle y \rangle_b + \langle x \rangle_b ⟨x+y⟩b=⟨y⟩b+⟨x⟩b,其正确性如下:
    ∑ b ∈ { 0 , 1 } ⟨ x + y ⟩ b = ∑ b ∈ { 0 , 1 } ⟨ y ⟩ b + ∑ b ∈ { 0 , 1 } ⟨ x ⟩ b = x + y \sum_{b\in\{0,1\}}\langle x + y \rangle_b = \sum_{b\in\{0,1\}}\langle y \rangle_b + \sum_{b\in\{0,1\}}\langle x \rangle_b = x+y b∈{0,1}∑⟨x+y⟩b=b∈{0,1}∑⟨y⟩b+b∈{0,1}∑⟨x⟩b=x+y
  • 乘法 :离线阶段,数据拥有者需预先生成 Beaver 三元组 { A , B , C } \{A,B,C\} {A,B,C} 使得 C = A ⋅ B C=A\cdot B C=A⋅B,然后将该三元组分别加密:
    A = ⟨ A ⟩ 0 + ⟨ A ⟩ 1 B = ⟨ B ⟩ 0 + ⟨ B ⟩ 1 C = ⟨ C ⟩ 0 + ⟨ C ⟩ 1 A=\langle A \rangle_0+\langle A \rangle_1 \\ B=\langle B \rangle_0+\langle B \rangle_1\\C=\langle C \rangle_0+\langle C \rangle_1 A=⟨A⟩0+⟨A⟩1B=⟨B⟩0+⟨B⟩1C=⟨C⟩0+⟨C⟩1 并将秘密份额 { ⟨ A ⟩ b , ⟨ B ⟩ b , ⟨ C ⟩ b } \{\langle A \rangle_b,\langle B \rangle_b,\langle C \rangle_b \} {⟨A⟩b,⟨B⟩b,⟨C⟩b} 发送给计算方 P b P_b Pb。在线阶段, P b P_b Pb 首先本地计算: ⟨ E ⟩ b = ⟨ x ⟩ b − ⟨ A ⟩ b ⟨ F ⟩ b = ⟨ y ⟩ b − ⟨ B ⟩ b \langle E \rangle_b=\langle x \rangle_b-\langle A \rangle_b \\ \langle F \rangle_b=\langle y \rangle_b-\langle B \rangle_b ⟨E⟩b=⟨x⟩b−⟨A⟩b⟨F⟩b=⟨y⟩b−⟨B⟩b 然后双方交换本地份额 ⟨ E ⟩ b \langle E \rangle_b ⟨E⟩b 和 ⟨ F ⟩ b \langle F \rangle_b ⟨F⟩b,恢复: E = ⟨ E ⟩ 0 + ⟨ E ⟩ 1 F = ⟨ F ⟩ 0 + ⟨ F ⟩ 1 E=\langle E \rangle_0+\langle E \rangle_1 \\ F=\langle F \rangle_0+\langle F \rangle_1 E=⟨E⟩0+⟨E⟩1F=⟨F⟩0+⟨F⟩1 最后计算乘法份额为 ⟨ x ⋅ y ⟩ b = b ⋅ E ⋅ F + F ⋅ ⟨ A ⟩ b + E ⋅ ⟨ B ⟩ b + ⟨ C ⟩ b \langle x \cdot y \rangle_b = b\cdot E\cdot F+F\cdot \langle A \rangle_b + E \cdot \langle B \rangle_b + \langle C \rangle_b ⟨x⋅y⟩b=b⋅E⋅F+F⋅⟨A⟩b+E⋅⟨B⟩b+⟨C⟩b。该流程的正确性如下:
    ∑ b ∈ { 0 , 1 } ⟨ x ⋅ y ⟩ b = E ⋅ F + F ⋅ ∑ b ∈ { 0 , 1 } ⟨ A ⟩ b + E ⋅ ∑ b ∈ { 0 , 1 } ⟨ B ⟩ b + ∑ b ∈ { 0 , 1 } ⟨ C ⟩ b = ( x − A ) ⋅ ( y − B ) + ( y − B ) ⋅ A + ( x − A ) ⋅ B + A ⋅ B = x ⋅ y \begin{aligned}\sum_{b\in\{0,1\}}\langle x \cdot y \rangle_b &= E\cdot F+F\cdot \sum_{b\in\{0,1\}}\langle A \rangle_b + E \cdot \sum_{b\in\{0,1\}}\langle B \rangle_b + \sum_{b\in\{0,1\}}\langle C \rangle_b \\ &= (x-A)\cdot (y-B)+ (y-B)\cdot A + (x-A)\cdot B +A\cdot B \\ &=x\cdot y\end{aligned} b∈{0,1}∑⟨x⋅y⟩b=E⋅F+F⋅b∈{0,1}∑⟨A⟩b+E⋅b∈{0,1}∑⟨B⟩b+b∈{0,1}∑⟨C⟩b=(x−A)⋅(y−B)+(y−B)⋅A+(x−A)⋅B+A⋅B=x⋅y

二、函数秘密共享

1. 加解密

对于一个函数组 F \mathcal{F} F,函数秘密共享将其中一个函数 f : G in → G out f:\mathbb{G}^{\text{in}}\to \mathbb{G}^{\text{out}} f:Gin→Gout 分解为两个份额 f 0 f_0 f0 和 f 1 f_1 f1 使得 f = f 0 + f 1 f=f_0+f_1 f=f0+f1 ,然后再将份额 f b f_b fb 发送给计算方 P b P_b Pb,其中 b ∈ { 0 , 1 } b\in\{0,1\} b∈{0,1} 。计算方 P b P_b Pb 在公开输入 x x x 上计算 f b ( x ) f_b(x) fb(x),最后交换计算结果并相加即可得到在密态函数上的计算结果 f ( x ) = f 0 ( x ) + f 1 ( x ) f(x)=f_0(x)+f_1(x) f(x)=f0(x)+f1(x) 。

2. 偏移函数

由于函数秘密共享仅保证函数的隐私性,而输入数据是可共享的。为了同时保证函数与输入的安全,已有方法提出对输入输出均进行掩码处理,相应的偏移函数族定义如下:

G ^ = { g r i n , r o u t : G i n → G o u t    |    g : G i n → G o u t ∈ G r i n ∈ G i n , r o u t ∈ G o u t } \widehat{\mathcal{G}} =\left\{ g^{r\^{in},r\^{out}} : \mathbb{G}^{in} \rightarrow \mathbb{G}^{out} \;\middle|\; \begin{array}{l} g : \mathbb{G}^{in} \rightarrow \mathbb{G}^{out} \in \mathcal{G}\\ r^{in} \in \mathbb{G}^{in},\\ r^{out} \in \mathbb{G}^{out} \end{array} \right\} G =⎩ ⎨ ⎧grin,rout:Gin→Gout g:Gin→Gout∈Grin∈Gin,rout∈Gout⎭ ⎬ ⎫ 其中, g r i n , r o u t ( x ^ ) = g ( x ^ − r in ) + r out g^{r\^{in},r\^{out}}(\hat{x})=g(\hat{x}-r^{\text{in}})+r^{\text{out}} grin,rout(x^)=g(x^−rin)+rout。用大白话来解释:输入 x ^ = x + r i n \hat{x}=x+r^{in} x^=x+rin 是一个被掩码 r i n r^{in} rin 保护的消息 x x x。为了正确计算,偏移函数在安全计算过程中抵消输入偏移,即实现 x ^ − r i n \hat{x}-r^{in} x^−rin 的效果。注意,这里并不是直接将输入的偏移移除,而是在计算过程中将输入偏移带来的扰动消除,从而保护输入数据。同时,为了保证输出数据的隐私性,需要加上输出偏移 r o u t r^{out} rout 。后续内容中带尖的参数 x ^ \hat{x} x^ 表示是使用了偏移函数进行隐私保护。

3. 份额转换

在进行安全多方计算时,算数秘密共享的输入是消息 x x x 的秘密份额 ⟨ x ⟩ \langle x \rangle ⟨x⟩,而函数秘密共享要求输入形式为 x ^ = x + r i n \hat{x}=x+r^{in} x^=x+rin。前者擅长于线性运算,而后者擅长于非线性函数的运算。在计算目标中同时包含线性与非线性计算的场景下,PriFFT 通过设计 ASS 与 FSS 之间的份额转换机制,使安全计算能够根据不同算子的计算特性动态选择更合适的秘密共享方式,在保持函数和数据隐私的同时兼顾协议效率:

  • ASS → FSS \text{ASS}\to\text{FSS} ASS→FSS:参与方首先利用 ASS 份额本地执行 ⟨ x ^ ⟩ b = ⟨ x ⟩ b + ⟨ r i n ⟩ b \langle \hat{x} \rangle_b = \langle x \rangle_b + \langle r^{in} \rangle_b ⟨x^⟩b=⟨x⟩b+⟨rin⟩b,其中 r i n = ⟨ r i n ⟩ 0 + ⟨ r i n ⟩ 1 r^{in} = \langle r^{in} \rangle_0 + \langle r^{in} \rangle_1 rin=⟨rin⟩0+⟨rin⟩1。然而,二者交换份额并相加得到带偏移的 FSS 输入 x ^ = ⟨ x ^ ⟩ 0 + ⟨ x ^ ⟩ 1 \hat{x} = \langle \hat{x} \rangle_0 + \langle \hat{x} \rangle_1 x^=⟨x^⟩0+⟨x^⟩1 。
  • FSS → ASS \text{FSS}\to\text{ASS} FSS→ASS:进行 FSS 计算时,不再加入输出偏移即可。此时,两个参与方分别将带偏移 r i n r^{in} rin 的消息 x ^ = x + r i n \hat{x}=x+r^{in} x^=x+rin 输入本地份额 f b f_b fb ,得到无偏移输出 ⟨ y ⟩ b = f b ( x ^ ) \langle y \rangle_b=f_b(\hat{x}) ⟨y⟩b=fb(x^)。因为 ⟨ y ⟩ 0 + ⟨ y ⟩ 1 = f 0 ( x ^ ) + f 1 ( x ^ ) = f ( x ) = y \langle y \rangle_0+\langle y \rangle_1=f_0(\hat{x})+f_1(\hat{x})=f(x)=y ⟨y⟩0+⟨y⟩1=f0(x^)+f1(x^)=f(x)=y,因此无偏移输出 ⟨ y ⟩ b \langle y \rangle_b ⟨y⟩b 本身即为 ASS 份额。
相关推荐
青云交2 年前
Java 大视界 -- 深度洞察 Java 大数据安全多方计算的前沿趋势与应用革新(52)
java·大数据·密码学·安全多方计算·分布式计算·医疗数据·技术融合
山登绝顶我为峰 3(^v^)33 年前
FHE 的高精度算术:BGV-big、BFV-big
大数据·计算机·ai·密码学·安全多方计算
Chahot3 年前
基于量子同态加密的安全多方凸包协议
网络安全·量子计算·安全多方计算·安全多方凸包协议