茫然传输(OT)
茫然传输的概念是由Rabin提出的,Even、Goldreich和Lempel首次提出了1-out-of-2茫然传输的概念。由于茫然传输协议在安全多方计算等领域有着重要应用。Naor和Pinkas最早研究了抵抗自适应腐化者的OT传输协议。M.Green.S.Hohenberger等研究了UC安全的OT协议,不过这些协议基本随机预言模型或者基于一些非经典密码学困难性假设,这些协议对于实际应用而言仍然效率显低。
在OT拓展协议方面,不论是抵抗被动攻击者还是主动攻击者的OT拓展协议都取得了较大的进展。
Naor-Pinkas茫然传输协议
Naro和Pinkas通过三次公钥密码学操作实现了半诚实模型下的1-out-of-2茫然传输协议。
输入信息:发送者输入两个长度为l ll比特的字符串( x 0 , x 1 ) (x_{0},x_{1})(x0,x1),接收者输入一个选择比特r rr。
系统参数:设q qq,p pp均为素数,且满足q ∣ p − 1 q|p-1q∣p−1。Z q Z_{q}Zq为q qq阶群,G q G_{q}Gq是Z p ∗ Z_{p}^{*}Zp∗的q qq阶子群。给定Z p ∗ Z_{p}^{*}Zp∗的生成元g gg,满足D i f f i e − H e l l m a n Diffie-HellmanDiffie−Hellman困难性假设。
随机预言函数:H HH
Step 1: 发送者生成并公布随机数C ∈ Z q C \in {Z_q}C∈Zq,然后发送者生成随机数a aa,并计算g a g_{a}ga和C a C_{a}Ca。
Step 2: 接收者选择随机数1 ⩽ k ⩽ q 1 \leqslant k \leqslant q1⩽k⩽q,并生成公钥p k r pk_{r}pkr,p k 1 − r = C / g k pk_{1-r}=C/g_{k}pk1−r=C/gk,接收者将p k 0 pk_{0}pk0发送给发送者。
Step 3: 发送者计算( p k 0 ) a (pk_0)^{a}(pk0)a,( p k 1 ) a = C a / ( p k 0 ) a (pk_1)^{a}=C_{a}/(pk_{0})^{a}(pk1)a=Ca/(pk0)a。发送者执行加密计算,并将加密结果( E 0 , E 1 ) (E_0,E_1)(E0,E1)发送给接收者。
E 0 = ( g a , H ( ( p k 0 ) a , 0 ) ⊕ x 0 ) E 1 = ( g a , H ( ( p k 1 ) a , 1 ) ⊕ x 1 ) {E_0} = ({g_a},H({(p{k_0})^a},0) \oplus {x_0})\\{E_1} = ({g_a},H({(p{k_1})^a},1) \oplus {x_1})E0=(ga,H((pk0)a,0)⊕x0)E1=(ga,H((pk1)a,1)⊕x1)
Step 4:接收者计算H ( ( p k r ) a ) = H ( ( g a ) k ) H((pk_{r})^{a})=H((g_a)^k)H((pkr)a)=H((ga)k),然后计算x r x_{r}xr。
x r = E r , 2 ⊕ H ( ( p k r ) a , r ) {x_r} = {E_{r,2}} \oplus H({(p{k_r})^a},r)xr=Er,2⊕H((pkr)a,r)
其中,E r , 2 E_{r,2}Er,2表示E r E_{r}Er的第二个元素。
IKN茫然传输协议
Ishai等人提出的茫然传输扩展协议可以将一个O T l m OT_{l}^{m}OTlm协议首先转化为调用一次O T m λ OT_{m}^{\lambda }OTmλ协议,然后将O T m λ OT_{m}^{\lambda}OTmλ协议转化为调用λ \lambdaλ次O T m λ OT_{m}^{\lambda}OTmλ协议。其中,λ \lambdaλ表示系统安全参数。M i M_iMi,M j M_jMj分别表示矩阵M的第i ii列和第j jj行,S SS与R RR分别表示发送者和接收者。
子协议1:O T l m OT_{l}^{m}OTlm转换为O T m λ OT_{m}^{\lambda}OTmλ
输入信息:S的输入信息是m对长度l ll比特字符串( x j , 0 , x j , 1 ) (x_{j,0},x_{j,1})(xj,0,xj,1),其中,1 ⩽ k ⩽ m 1 \leqslant k \leqslant m1⩽k⩽m;R RR的输入是m个选择比特r = ( r 1 , … r m ) r=(r_{1},…r_{m})r=(r1,…rm)。
随机预言函数:H [ m ] × H[m]×H[m]×{0,1}k → _{k}→k→{0,1}l _{l}l。
系统参数:安全参数λ \lambdaλ。
步骤1:S生成随机向量 s ∈ { 0 , 1 } λ s \in {\{ 0,1\} _\lambda }s∈{0,1}λ, R RR生成一个m × λ m×\lambdam×λ的随机矩阵T TT。
步骤2:参与者调用O T m λ OT_{m}^{\lambda}OTmλ协议。在这个协议中,S扮演输入为s的接收者,R RR扮演输入为( t i , r ⊕ t i ) (t_{i},r\oplus t_{i})(ti,r⊕ti)的发送者,其中1 ⩽ i ⩽ λ 1 \leqslant i \leqslant \lambda1⩽i⩽λ。
步骤3:令Q QQ代表S SS在步骤2中接收到的m × λ m×\lambdam×λ的矩阵,即q i = ( s i , r ) ⊕ t i {q_i} = ({s_i},r) \oplus {t_i}qi=(si,r)⊕ti,q j = ( r j ∗ s ) ⊕ t j {q_j} = ({r_{j}*s}) \oplus {t_j}qj=(rj∗s)⊕tj。对于1 ⩽ j ⩽ m 1 \leqslant j \leqslant m1⩽j⩽m, S 向R发送y j , 0 = x j , 0 ⊕ H ( j , q j ) y_{j,0}=x_{j,0} \oplus H(j,q_{j})yj,0=xj,0⊕H(j,qj),y j , 1 = x j , 1 ⊕ H ( j , q j ⊕ s ) y_{j,1}=x_{j,1} \oplus H(j,q_{j} \oplus s)yj,1=xj,1⊕H(j,qj⊕s)。
步骤4:对于1 ⩽ j ⩽ m 1 \leqslant j \leqslant m1⩽j⩽m ,R RR 输出 z j = y i , r ⊕ H ( j , t j ) {z_j} = {y_{i,r}} \oplus H(j,{t_j})zj=yi,r⊕H(j,tj)。
子协议2:O T m λ OT_{m}^{\lambda}OTmλ转换为O T λ λ OT_{\lambda}^{\lambda}OTλλ
输入信息:S SS的输入信息是λ \lambdaλ对长度为m mm比特的字符串( x i , 0 , x i , 1 ) (x_{i,0},x_{i,1})(xi,0,xi,1)。其中1 ⩽ i ⩽ λ 1\leqslant i \leqslant \lambda1⩽i⩽λ;R RR的输入是λ \lambdaλ个选择比特r = ( r 1 , r 2 … , r λ ) r=(r_{1},r_{2}…,r_{\lambda})r=(r1,r2…,rλ)。
系统参数:安全参数λ \lambdaλ。
随机预言函数:一个伪随机数生成器G : G:G:{0,1}λ _{\lambda}λ→ \to→{0,1}m _{m}m。
步骤1:S随机生成λ \lambdaλ对k kk比特的字符串( s i , 0 , s i , 1 ) (s_{i,0},s_{i,1})(si,0,si,1).
步骤2:参与者调用O T λ λ OT^{\lambda}_{\lambda}OTλλ协议。在这个协议中,S SS扮演输入为( s i , 0 , s i , 1 ) (s_{i,0},s_{i,1})(si,0,si,1)的发送者,R RR扮演输入为r rr的接收者,其中1 ⩽ i ⩽ λ 1 \leqslant i \leqslant \lambda1⩽i⩽λ。
步骤3:对于1 ⩽ i ⩽ λ 1 \leqslant i \leqslant \lambda1⩽i⩽λ,S SS向R RR发送y j , 0 y_{j,0}yj,0和y j , 1 y_{j,1}yj,1,其中y i , b = x i , b ⊕ G ( s i , r i ) y_{i,b}=x_{i,b} \oplus G(s_{i,r_{i}})yi,b=xi,b⊕G(si,ri)。
上述协议的调用的O T λ λ OT^{\lambda}_{\lambda}OTλλ协议可以通过调用λ \lambdaλ次O T λ 1 OT^{1}_{\lambda}OTλ1协议实现。
子协议3:O T l m OT_{l}^{m}OTlm转换为O T λ λ OT_{\lambda}^{\lambda}OTλλ
输入信息:S SS的输入信息是m mm对长度为l ll比特的字符串( x j , 0 , x j , 1 ) (x_{j,0},x_{j,1})(xj,0,xj,1),其中1 ⩽ j ⩽ m 1 \leqslant j \leqslant m1⩽j⩽m。R RR的输入是m mm个选择比特r = ( r 1 , … r m ) r=(r_{1},…r_{m})r=(r1,…rm)。
系统参数:安全参数λ \lambdaλ>
随机预言函数:H : [ m ] × 0 , 1 λ → H:[m]×{0,1}_{\lambda} \toH:[m]×0,1λ→ {0,1}l _{l}l。
伪随机数生成器:G : 0 , 1 λ → 0 , 1 m G:{0,1}_{\lambda} \to {0,1}_{m}G:0,1λ→0,1m。
步骤1:R RR生成随机字符串对( k j , 0 , k j , 1 ) ∈ { 0 , 1 } 2 λ ({k_{j,0}},{k_{j,1}}) \in {\{ 0,1\} _{2\lambda }}(kj,0,kj,1)∈{0,1}2λ,1 ⩽ j ⩽ m 1 \leqslant j \leqslant m1⩽j⩽m。S SS生成随机向量s ∈ { 0 , 1 } λ \in {\{ 0,1\} _\lambda }∈{0,1}λ。S SS和R RR执行O T λ λ OT^{\lambda}_{\lambda}OTλλ,其中S SS扮演接收者,R RR扮演发送者。协议结束后,S SS获得k j , s j k_{j,s_{j}}kj,sj,1 ⩽ j ⩽ λ 1 \leqslant j \leqslant \lambda1⩽j⩽λ。
步骤2:R RR生成一个m × m \timesm×λ \lambdaλ的随机比特矩阵T TT,计算v j , 0 = t j ⊕ G ( k j , 0 ) v_{j,0}=t_{j} \oplus G(k_{j,0})vj,0=tj⊕G(kj,0),v j , 1 = t j ⊕ G ( k j , 1 ⊕ r ) v_{j,1}=t_{j} \oplus G(k_{j,1} \oplus r)vj,1=tj⊕G(kj,1⊕r),并将v j , 0 , v j , 1 v_{j,0},v_{j,1}vj,0,vj,1发送给S SS,1 ⩽ j ⩽ λ 1 \leqslant j \leqslant \lambda1⩽j⩽λ。
步骤3:S SS生成m × λ m \times\lambdam×λ的矩阵Q QQ,其中q j = v j , s j ⊕ G ( k j , s j ) q^{j}=v_{j,s_{j}} \oplus G(k_{j,s_{j}})qj=vj,sj⊕G(kj,sj),1 ⩽ j ⩽ λ 1 \leqslant j \leqslant \lambda1⩽j⩽λ。S SS计算y i , 0 = x i , 0 ⊕ H ( q i ) y_{i,0}=x_{i,0} \oplus H(q_{i})yi,0=xi,0⊕H(qi),y i , 1 = x i , 1 ⊕ H ( q i ⊕ s ) y_{i,1}=x_{i,1} \oplus H(q_{i} \oplus s)yi,1=xi,1⊕H(qi⊕s),并将( y i . 0 , y i , 1 ) (y_{i.0},y_{i,1})(yi.0,yi,1)发送给R RR,1 ⩽ i ⩽ m 1 \leqslant i \leqslant m1⩽i⩽m。
步骤4:对于1 ⩽ j ⩽ m 1 \leqslant j \leqslant m1⩽j⩽m,R RR输出z j = y i , r j ⊕ H ( t j ) z_{j}=y_{i,r_{j}} \oplus H(t_{j})zj=yi,rj⊕H(tj)。
字协议3中,R RR共调用m mm次H HH,2 λ 2\lambda2λ次G GG,发送数据2 m λ 2m\lambda2mλ比特;S SS共调用2 m 2m2m次H HH,λ \lambdaλ次G GG,发送数据2 m l 2ml2ml比特。当λ = m \lambda=mλ=m时,O T λ λ OT^{\lambda}_{\lambda}OTλλ的消耗可以忽略不计。