不经意传输(oblivious transfer)

定义

oblivious transfer(OT)是一个两方协议,输入的一方叫做发送者,产生两个等长的秘密 m 0 , m 1 m_0,m_1 m0,m1,输出的一方叫做接收者。接收者输入一个bit b,返回给他 m b m_b mb.发送者没有返回值。
( O T 1 2 ) (OT_{1}^{2}) (OT12)发送方有两个秘密,想将其中之一发给接收方,接收方得到了其中一个秘密,但是发送方不知道接收方收到了哪个秘密。
( O T 1 n ) (OT_{1}^n) OT1n发送方有n个秘密,想将其中之一发给接收方,接收方得到了其中一个秘密,但是发送方不知道接收方收到了哪个秘密。
平行执行k次 ( O T 1 n ) (OT_{1}^n) OT1n,叫做 O T k n OT_{k}^n OTkn协议。
在这里插入图片描述

基本构造

生成一个循环群 G : Z p ∗ G:Z_p^{*} G:Zp,g是G的生成元。函数H是一个将G中的元素映射到一个与秘密m等长的比特串。令 b ∈ { 0 , 1 } , b ˉ = 1 − b b \in \{0,1\},\bar{b}=1-b b{0,1},bˉ=1b. ( 即 b = 0 , b ˉ = 1 ; b = 1 , b ˉ = 0 ) (即b=0,\bar{b}=1;b=1,\bar{b}=0) (b=0,bˉ=1;b=1,bˉ=0)
1.发送方产生随机数 c ← G c \leftarrow G cG,将其发送给接收方。
2.接收方随机选择 a ← { 0 , . . . , ∣ G ∣ − 1 } a \leftarrow \{0,...,|G|-1\} a{0,...,G1},计算 h b = g a , h b ˉ = c ⋅ h b − 1 h_b=g^a,h_{\bar{b}}=c\cdot h_b^{-1} hb=ga,hbˉ=chb1,将 h 0 , h 1 h_0,h_1 h0,h1发送给接收方
3.发送方检查 h 0 h 1 = c h_0 h_1=c h0h1=c,失败则结束,正确则继续。随机产生 r 0 , r 1 ← G r_0,r_1\leftarrow G r0,r1G.计算 g r 0 , g r 1 , c 0 = H ( h o r 0 ) ⨁ m 0 , c 1 = H ( h 1 r 1 ) ⨁ m 1 g^{r_0},g^{r_1},c_0=H(h_o^{r_0}) \bigoplus m_0,c_1=H(h_1^{r_1})\bigoplus m_1 gr0,gr1,c0=H(hor0)m0,c1=H(h1r1)m1,将这四个值发给接收者。
4.接收者计算 m b = c b ⨁ H ( ( g r b ) a ) m_b=c_b \bigoplus H((g^{r_b})^a) mb=cbH((grb)a)

例子永远滴神:
1.发送方产生c
2.接收方产生随机数a。选择b=0. h 0 = g a , h 1 = c ⋅ h 0 − 1 h_0=g^a,h_{1}=c\cdot h_0^{-1} h0=ga,h1=ch01,发送给接收方
3.发送方检查 h 0 h 1 = h 0 h 0 − 1 c = c h_0 h_1=h_0 h_0^{-1}c=c h0h1=h0h01c=c成立。计算 g r 0 , g r 1 , c 0 = H ( h o r 0 ) ⨁ m 0 , c 1 = H ( h 1 r 1 ) ⨁ m 1 g^{r_0},g^{r_1},c_0=H(h_o^{r_0}) \bigoplus m_0,c_1=H(h_1^{r_1})\bigoplus m_1 gr0,gr1,c0=H(hor0)m0,c1=H(h1r1)m1
4.接收者计算 m 0 = c 0 ⨁ H ( ( g r 0 ) a ) = H ( h o r 0 ) ⨁ m 0 ⨁ H ( ( g r 0 ) a ) = H ( ( g r 0 ) a ) ⨁ H ( ( g r 0 ) a ) ⨁ m 0 = m 0 m_0=c_0 \bigoplus H((g^{r_0})^a)=H(h_o^{r_0}) \bigoplus m_0 \bigoplus H((g^{r_0})^a)= H((g^{r_0})^a) \bigoplus H((g^{r_0})^a)\bigoplus m_0=m_0 m0=c0H((gr0)a)=H(hor0)m0H((gr0)a)=H((gr0)a)H((gr0)a)m0=m0
当用户选择了 b = 0 b=0 b=0但是想去计算 m 1 m_1 m1时:我们看 c 1 = H ( h 1 r 1 ) ⨁ m 1 = H ( ( c ⋅ h 0 − 1 ) r 1 ) ⨁ m 1 c_1=H(h_1^{r_1})\bigoplus m_1=H((c \cdot h_0^{-1})^{r_1})\bigoplus m_1 c1=H(h1r1)m1=H((ch01)r1)m1。即使用户能计算 ( c ⋅ h 0 − 1 ) (c \cdot h_0^{-1}) (ch01),但是 r 1 r_1 r1是发送方随机选取的,这是一个CDH问题,所以不能恢复。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

帅逼码农

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值