一. Shamir秘密分享方案
参见:
二. 不经意传输方案
不经意传输(Oblivious Transfer, OT) ,它主要用于让双方在不泄露多余信息的情况下传递数据。
最经典的是 1-out-of-2 OT:发送方有两个消息 m0,m1,接收方只能选择拿到其中一个;同时:
- 发送方不知道接收方选了哪一个;
- 接收方也无法知道另一个没选的消息。
以经典的RSA型OT为例来说明该方案的完整流程:
设:
- 发送方 Alice 有两个秘密消息:
- 接收方 Bob 想得到其中一个:
- Alice 不应该知道 Bob 选择的是 0 还是 1。
- Bob 不应该知道另一个
。
1. Alice 生成 RSA 参数
Alice 首先生成 RSA 密钥:
选择公钥指数 e,计算私钥指数 d,满足
ed≡1(mod φ(N))
于是有 RSA 性质:
Alice 公开:
(N,e)
但保留:
d
然后 Alice 随机生成两个数:
把
发送给 Bob。
2. Bob 秘密选择一个消息
Bob 想选择:
b∈{0,1}
例如,他想要 m1,那么:
b=1
但他不能直接把 b 告诉 Alice。
Bob 随机选择:
然后利用 Alice 的 RSA 公钥计算:
再计算:
然后 Bob 只发送:
v
给 Alice。
注意 Alice看到的只是一个随机模 N 的值 v。
她不知道它究竟是:
还是:
所以她不知道 Bob 选的是哪个。
3. Alice 分别尝试两个可能
Alice 收到:
v
由于她不知道 Bob 选择了哪个,于是她分别计算:
以及
这里就出现了整个 OT 最重要的地方。
假设 Bob 实际选择:
b=1
那么 Bob 发送的是:
所以:
于是 Alice 计算:
根据 RSA:
所以:
也就是说,Bob 和 Alice 对第 1 个消息拥有相同的密钥。
但是看看另一个:根据同样计算方法得到的则与k无关系
因此 Bob 只知道:
不知道:
4. Alice 用两个密钥加密两个消息
Alice现在得到:
实际系统中通常不会直接拿它们当密钥,而是通过哈希/KDF:
然后分别加密:
Alice把:
全部发送给 Bob。
注意:
两个密文都发送。
5. Bob 解密自己选择的消息
Bob自己一开始知道随机数:
k
假设他选择:
b=1
那么我们前面已经知道:
因此:
Bob可以计算:
成功得到:
但是对于:
Bob需要:
而 Bob不知道 k0。
想获得它,就需要计算:
但 Bob没有 RSA 私钥:
d
所以在 RSA 安全假设下,他无法有效计算 k0。
因此无法解密:
最终: Bob 只能得到 m1
整个流程图如下:
Alice Bob
有 m0,m1 选择 b
生成 RSA:
(N,e,d)
随机:
x0,x1
N,e,x0,x1
--------------------------------------------->
随机 k
计算
v = xb + k^e mod N
v
<---------------------------------------------
计算:
k0 = (v-x0)^d mod N
k1 = (v-x1)^d mod N
K0 = H(k0)
K1 = H(k1)
c0 = Enc(K0,m0)
c1 = Enc(K1,m1)
c0,c1
--------------------------------------------->
Kb = H(k)
mb =
Dec(Kb,cb)