混淆电路——不经意传输

不经意传输

不经意传输(Oblivious Transfer,OT)是一种密码学协议,它解决了以下问题:
我们假设 Alice 有两个数值 v 0 v_0 v0 v 1 v_1 v1,Bob想知道其中的一个。通过执行 OT协议,Bob知道了 v i v_i vi,但不知道 v 1 − i v_{1-i} v1i,同时,Alice不知道 i i i。举一个例子,Alice这儿有两个产品的折扣码,Bob 想获得其中一个。但 Bob 又比较注重隐私,不想让 Alice 知道他选择了哪一个。这时候,他们就可以通过 OT 来完成交易。
现在我们来看一看基于 OT 的实现方式。我们考虑

  1. Alice拥有值 v 0 v_0 v0 v 1 v_1 v1和密钥 s s s r 0 r_0 r0 r 1 r_1 r1
  2. Bob拥有值 i ∈ { 0 , 1 } i\in\{0,1\} i{0,1}和密钥 k k k,Bob想获得 v i v_i vi
  3. Alice和Bob事先统一 g ∈ Z p g\in Z_p gZp,其中 g g g是一个大整数, p p p是一个大质数

那么 OT 协议可以通过如下演绎

  1. A l i c e → B o b : g s Alice\to Bob:g^s AliceBob:gs
    因为离散对数问题不存在高效解法,Bob知道 g g g g s g^s gs也无法破译 s s s
  2. Bob基于 i i i生成 L i = { g k , i = 0 g s − k , i = 1 L_i=\begin{cases}g^k,&i=0\\g^{s-k},&i=1\end{cases} Li={gk,gsk,i=0i=1
  3. B o b → A l i c e : L i Bob\to Alice:L_i BobAlice:Li
    因为离散对数问题不存在高效解法,Alice知道 g g g g k g^k gk也无法破译 k k k。因此,Alice无法知道Bob发来的是 g k g^k gk还是 g s − k g^{s-k} gsk,也就无法知道 i i i
  4. Alice生成 C 0 C_0 C0 C 1 C_1 C1
    a. C 0 = ( g r 0 , ( L i ) r 0 ⊕ v 0 ) C_0=(g^{r_0},(L_i)^{r_0}\oplus v_0) C0=(gr0,(Li)r0v0)
    b. C 1 = ( g r 1 , ( g s L i ) r 1 ⊕ v 1 ) C_1=(g^{r_1},(\frac{g^s}{L_i})^{r_1}\oplus v_1) C1=(gr1,(Ligs)r1v1)
    其中 ⊕ \oplus 表示异或操作
  5. A l i c e → B o b : C 0 , C 1 Alice\to Bob:C_0,C_1 AliceBob:C0,C1
    因为离散对数问题不存在高效解法,Bob知道 g g g g r 0 g^{r_0} gr0 g r 1 g^{r_1} gr1也无法破译 r 0 r_0 r0 r 1 r_1 r1
  6. Bob解密 v i v_i vi
    a. 当 i = 0 i=0 i=0时,Bob可以通过以下方式获得 v 0 v_0 v0而获得不了 v 1 v_1 v1
    C 0 [ 0 ] k ⊕ C 0 [ 1 ] = ( g r 0 ) k ⊕ ( L i ) r 0 ⊕ v 0 = ( g r 0 ) k ⊕ ( g k ) r 0 ⊕ v 0 = v 0 C_0[0]^k\oplus C_0[1]=(g^{r_0})^k\oplus (L_i)^{r_0}\oplus v_0=(g^{r_0})^k\oplus (g^k)^{r_0}\oplus v_0=v_0 C0[0]kC0[1]=(gr0)k(Li)r0v0=(gr0)k(gk)r0v0=v0
    C 1 [ 1 ] = ( g s L i ) r 1 ⊕ v 1 = g ( s − k ) r 1 ⊕ v 1 C_1[1]=(\frac{g^s}{L_i})^{r_1}\oplus v_1=g^{(s-k)r_1}\oplus v_1 C1[1]=(Ligs)r1v1=g(sk)r1v1,因为Bob不知道 s s s r 1 r_1 r1,所以Bob无法得到 v 1 v_1 v1
    b. 当 i = 1 i=1 i=1时,Bob可以通过以下方式获得 v 1 v_1 v1而获得不了 v 0 v_0 v0
    C 1 [ 0 ] k ⊕ C 1 [ 1 ] = ( g r 1 ) k ⊕ ( g s L i ) r 1 ⊕ v 1 = ( g r 1 ) k ⊕ ( g k ) r 1 ⊕ v 1 = v 1 C_1[0]^k\oplus C_1[1]=(g^{r_1})^k\oplus (\frac{g^s}{L_i})^{r_1}\oplus v_1=(g^{r_1})^k\oplus (g^k)^{r_1}\oplus v_1=v_1 C1[0]kC1[1]=(gr1)k(Ligs)r1v1=(gr1)k(gk)r1v1=v1
    C 0 [ 1 ] = ( g s − k ) r 0 ⊕ v 0 = g ( s − k ) r 0 ⊕ v 0 C_0[1]=(g^{s-k})^{r_0}\oplus v_0=g^{(s-k)r_0}\oplus v_0 C0[1]=(gsk)r0v0=g(sk)r0v0,因为Bob不知道 s s s r 0 r_0 r0,所以Bob无法得到 v 0 v_0 v0

除了上述实现,OT 还有多种实现方法。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值