MPC(一) 密码学基础
秘密共享
秘密共享
秘密共享指的是秘密发布者D根据访问结构T将秘密在参与者P中分享,每个参与者得到的秘密份额被称为子秘密。访问结构T定义了参与者的授权子集,由任意授权子集的参与者贡献出他们特有的子秘密可以恢复被共享的秘密,但是非授权子集中的参与者不能获得关于秘密的任何有用信息。
(t-n)门秘密共享
一个秘密共享算法被称为是(t-n)门限秘密共享算法,如果它满足:秘密分发阶段秘密发布者D将秘密\(s\in GF(q)\)在n个参与者{\(P_1\),\(P_2\),...,\(P_n\)}之间共享;秘密恢复阶段,至少需要t个参与者贡献出他们的子密钥才能恢复出秘密。
秘密共享的分类
依据不同需求场景,不同实现思想,可把秘密共享分为以下几种类型:
1.可验证秘密共享(VSS)
2.权重秘密共享
3.主动秘密共享
4.理性秘密共享
5.动态秘密共享
6.多秘密共享(MSS)
7.量子秘密共享
经典协议
Shamir(t-n)门限秘密共享方案
该方案是基于Lagrange插值定理设计的。
子秘密生成阶段:
步骤1:秘密发布者D随机选取n个不同非零元素\(a_1,a_2,...,a_n \in GF(q)\)(q为素数且q>n),并构造t-1次多项式\(f(x)=a_{t-1}x^{t-1}+a_{t-2}x^{t-2}+...+a_{1}x^1+s\)。其中,s是需要共享的秘密信息。
步骤2:D随机的从有限域\(GF(q)\)中选取n个不同的非零元素\(x_1,x_2,...,x_n\),并计算\(y_i=f(x_i)\)。
秘密分发阶段:
D通过安全信道将\((x_i,y_i)\)分别发送给\(P_i\)。
秘密恢复阶段:
t个参与者利用下面的公式可恢复出秘密s。
Asmuth-Bloom秘密共享方案
1983年,C.Asmuth和J.Bloom基于中国剩余定理提出的(t,n)门限秘密共享方案。
子秘密构造阶段:
步骤1:构造Asmuth-Bloom序列。
构造序列\({m_1,m_2,...m_n,p}\),满足如下条件:
(1)\(m_1<m_2<m_n<p\)
(2)\(gcd(m_i,m_j)=1,i\neq j\)
(3)\(m_1\cdot m_2 \cdot m_t>p\cdot m_{n-t+2} \cdot m_{n-t+3} \cdot... \cdot m_n\)
步骤2:构造子秘密
对于秘密m(<p),首先随机选择r,计算\(M= m+rp\)。子秘密\(a_i \equiv M(modm_i)\)。
秘密分发阶段:
秘密发布者将\((a_i,m_i)\)通过安全信道发送给各参与者\(P_i\),并广播p的值。
秘密恢复阶段:
步骤1:t个参与者计算下面方程组的解M
步骤2:利用\(m\equiv M(modp)\)恢复秘密m。r_
XOR-秘密共享方案
对于门限阈值t=n时,一个被广泛使用的秘密共享方案是由Schneier提出的XOR-秘密共享方案。
子秘密构造阶段:
步骤1:秘密分布者随机生成n-1个长度为\(\vert s \vert\)的随机数\(r_1,r_2,...r_{n-1}\)。
步骤2:秘密分布者计算第i个子秘密\(r_i = r_1\bigoplus r_2 \bigoplus ... \bigoplus r_{n-1} \bigoplus s\)。
秘密分发阶段:
n个参与者贡献子秘密做如下运算:\(s=r_1 \bigoplus r_2\bigoplus ... \bigoplus r_n\)。
不经意传输
不经意传输(OT,oblivious transfer)是一个密码学协议,目前被广泛的应用于安全多方计算(SMPC,Secure Multi-Party Computation)。它使得接收方能够不经意地获得获得发送方输入的某些信息,保护发送方和接收方的隐私。不经意传输协议是众多密码学应用的基础协议,在理论层面,安全多方计算与不经意传输是等价的:在不借助任何其他密码学原语、不增加其他假设的前提下,安全多方计算可以单独由不经意传输实现,反之亦然。
一、Rabin 1981 提出
它是为了解决如下的问题而产生:Alice 拥有秘密\(S_A\),Bob 拥有秘密\(S_B\)。Alice和Bob想要交换秘密,要求两方都有可能得到秘密并且秘密拥有方不知道对方是否得到秘密。具体方案如下:
方案假设:
两方的秘密都是单比特。
协议流程:
(1)Alice随机选择两个大素数p和q,并计算得到一次性使用的key \(n_A(=p \cdot q)\),将\(n_A\)发送给Bob。
(2)Bob随机选取一个数x,要求x<\(n_A\),计算\(c\equiv x^2 \;mod\;n_a\),然后将c和私钥加密的x发送给Alice。
(3)Alice找到一个\(x_1\)使得\(x_1^{2}\equiv c\;mod\;n_A\)。
(4)Bob计算\(gcd(x-x_1,n_A)=d\),此时\(p(d==q or d==p)=\frac{1}{2}\)
(5)Bob根据下列公式计算\(v_B\):
(6)接着计算\(e_B=v_B\bigoplus S_B\)发送给Alice
显然,当\(v_B=0\),则 Alice 可获得秘密,反之;本质上问题被转化成了概率方案,Alice 每次有0.5得到概率获得 Bob 的秘密;而类似的,Bob 也有0.5的概率获得 Alice 的秘密。
Rabin 提出的方案两方都无法获得对方的秘密的概率是0.25,可以成功交换的概率是0.75.可见该方案还不是很完善,不能保证两方每次都能在满足要求的情况下获得秘密,还不具有应用意义。所以有了1985年 Even 等人在此基础上提出的新的 1-out-of-2 OT 协议。
二、1985 1-out-of-2 OT
Even 等人的提出新的使用公钥密码体制的 1-out-of-2 OT 协议,给出了 OT 公理化的定义和实现。相比于 Rabin 等人提出的一方只有\(\frac{1}{2}\)的概率获得秘密,Even 等人将其进行了改进,即:Alice 拥有两个秘密\((M_0,M_1)\) ,而 Bob 想要知道其中一个。在 OT 协议执行完成之后,Bob 获得了其中一个秘密,但是不知道另外一条秘密 ,并且 Alice 也不知道 Bob 选择的是\(M_0\)还是\(M_1\)。
协议流程:
(1) Alice 在公钥密码中随机选取一组密钥\((P_k,S_k)\);同时随机选取加密算法明文空间R的两个\(m_0\),\(m_1\)发送给 Bob ;
(2) Bob 随机选择\(r\in \{0,1\}\);然后在与(1)相同的明文空间选择\(k\);计算\(q=E_{P_k}(k)+m_r\),并且向 Alice 发送\(q\);
(3) Alice计算\(k_i'=D_{S_k}(q-m_i),i\in \{0,1\}\);再选择随机变量\(s\in\{0,1\}\),把三元组\((M_0+k_s',M_1+k_{1-s}',s)\)发送给 Bob ;
(4) Bob根据自己选择的\(r\)以及三元组最后一项s来选择第一项或者第二项;\(s,r\)相同选第一项,不同选第二项,与自己的\(k\)进行\(-\)运算得到秘密\(M_s + r\),其中\(+,-\)分别是模加和模减。
由上述过程可知,协议结束之后,Bob 获得了一个秘密且不知道另外一个秘密,而 Alice 则不清楚 Bob 拿到了哪一条秘密。 1-out-of-2 OT 是一个具有实际应用意义的不经意传输协议,也是目前较为常用的一种。
三、1986 1-out-of-n OT
之后在1986年,Brassard 等人继续将OT协议改进到了 1-out-of-n OT 版本。与上述1-out-of-2 OT中的问题基本相同,唯一变化的就是从2选1变成了n选1。
协议流程:
约定n条秘密为:\(M_1,M_2,...,M_n\),且每条消息长\(t\) bits,设\(b_{i,j}\)表示第i个秘密的第j位,可见\(b_{i,j}\in\{0,1\}\)。
(1)首先 Alice 随机选择大素数\(p\),\(q\),计算\(m=p\cdot q\),并计算模m的二次非剩余y,然后对于每一个比特位\(b_{i,j}\)随机选择一个整数\(x_{i,j}\in Z^*_m\)并计算\(z_{i,j}=x_{i,j}^{2}y^{b_{i,j}}\;mod\;m\),然后将所有的\(m,y,z_{i,j}\)发给 Bob, \(p,q\)需要保密;显然只有\(b_{i,j}==0\)时\(z_{i,j}\)是二次剩余。
(2) Bob选择随机数\(r\)以及随机随即比特位\(\alpha \in \{0,1\}\),计算\(Q=z_{i,j}r^2y^{\alpha}\;mod\;m\),其中当且仅当\(\alpha=b_{i,j}\)时,\(Q\)是\(m\)的二次剩余。如此一来,只需要验证 (2) 中得到的\(q\)是否为\(m\)的二次剩余即可若是则\(\alpha=B\),否则不等;这里需要注意 Bob 是不知道\(p,q\)的,计算二次剩余是个困难问题,所以需要在 Alice 配合的情况下向其发送\(Q\)获取结论。
(3)上述过程重复t次。每次 Bob 可以获得消息的一个bit,t次之后就能得到秘密\(M_i\)。而由于加入了随机因子\(r\),Alice 即使计算出每轮 Bob 提供的\(Q\)的二次剩余的值,也无法不知道 Bob选取的是哪一个秘密,这也保证了 Alice 无法获取秘密选择的具体信息,注意若没有\(r\)的话 Alice 是可以计算出\(x_{i,j}y^{b_{i,j}}\)的,这这就泄露了 Bob 的选择。
协议缺陷:
(1) Bob 可能每次询问的\(Q\)是属于不同信息的,这导致 Bob 无法获得一组完整信息。
(2) Bob 可能询问的\(Q=z_{i,j}z_{k,j}r^2 y^\alpha\),那么 Bob 可以获得\(b_{i,j} \bigoplus b_{k,j}\),利用异或的排他性有可能恢复两组明文,这是一种类似CCA的思想。
(3) Alice 可能欺骗 Bob,发送的\(y\)可能是一个二次剩余,这可能导致 Bob 的选择被计算出。
协议改进:
核心思想是基于置换群混淆。
预设:令\(\sigma\)为一个排列(其实就是置换群)\(\{1,2,...,n\}\),建立一个集合\(P_{\sigma}=\{Q_{k,j}=z_{i,j}r_{k,j}^2y^{\alpha_{k,j}}\;mod\;m|1\leq k\leq n,1\leq j \leq t\}\),其中\(\alpha_{k,j}\)是随机比特,\(r_{k,j}\)是\(Z_{m}^*\)中的随机数。若秘密获取方 Bob 知悉\(\sigma,r_{k,j},\alpha_{k,j}\)等,则称该集合为有效的(valid)。该集合是valid
有两方面的含义:
(1)由于进行了置换 Alice 并不能区分\(P_{\sigma}\)中每个元素对应的信息序号\(i\),所以当她接收 Bob 发送的\(k\),她无法区别是哪一个秘密。
(2) 如果不基于置换,Bob 无法把一个随机集合转换为有效包,所以 Bob 无法进行伪造。
协议步骤如下:
(1) Bob随机选择置换群\(\sigma\),建立集合\(P_{\sigma}\)。
(2) Bob把集合\(P_{\sigma}\)发给 Alice ,再把\(k = \sigma(i)\)作为请求发送给 Alice。
(3) Alice 计算这个\(k\)对应的所有\(Q_{k,j}\),其中\(1\leq j \leq t\)发送给 Bob。
(4) Bob 通过 Alice发送的二次剩余信息可以恢复第\(i\)组秘密信息,因为他知道\(i\)和\(k\)的对应关系。
在上述过程中,由于集合满足valid特性,Bob 是难以伪造数据(比如令某一个\(k\)对应的\(Q_{k,j}\)为\(z_{i,j}z_{k,j}r^2 y^\alpha)\),而由于置换的混淆 Alice 在不清楚\(\sigma\)的情况下也不可能知道 Bob 选择的是哪条秘密。
这便是最开始的 1-out-of-n OT 协议。至此最基本的OT协议包括2取1,n取1都已经有了。接下来就是关于OT扩展的内容了。