Secure Computation ORAM
The Case of 3-Party Computation
AC’15: Sky Faber, S.J., Sotirios Kentros, Boyang Wei New Work: S.J., Boyang Wei Stanislaw Jarecki, UC Irvine
Cryptography in the RAM Model Workshop, Cambridge, MA, June 2016
Secure Computation ORAM The Case of 3-Party Computation Stanislaw - - PowerPoint PPT Presentation
Secure Computation ORAM The Case of 3-Party Computation Stanislaw Jarecki, UC Irvine Cryptography in the RAM Model Workshop, Cambridge, MA, June 2016 AC15: Sky Faber, S.J. , Sotirios Kentros, Boyang Wei New Work: S.J. , Boyang Wei Secure
Cryptography in the RAM Model Workshop, Cambridge, MA, June 2016
FORAM
ss ss
( for <write>: additional shared input v and D ⟶ D’ s.t. D’[x]=v )
FORAM
ss ss
FORAM FRAM-PROGRAM
var stack
Instr 1,2,... each instruction computed by standard MPC (Yao, BGW, ...)
secret- shared values
Client2 Server MK2 , x2 EncMK(D; r) v2 Client1 MK1 , x1 v1
[2PC]
D[x]=v1⨁v2 P1 P2
[2PC]
For efficient MPC of RAM programs we need ORAM whose Client is “Secure-Computation Friendly”
di·w
...
...
di·w
...
...
Client’s code is a sequence of array or dictionary list look-ups...
w
...
...
Eviction: 1) put the (modified) retrieved entry on top 2) move all* entries down towards their targets labels SC-ORAM: To reduce circuit size, use constrained eviction strategy
X = (X1,…,Xn) : tree path k: sec.par.
Client’s code is a sequence of array look-ups... 3PC idea: ⦁ secret-share all data (Ti’s and N) between P1 & P2
1 di 1
2 di 2
1 ⨁ di 2
1⨁N1 * = Ni 2⨁N2*
1 di 1
2 di 2
1 ⨁ di 2
= String Equality Problem: 2PC, Yao’s GC: knD bndw (+k exp’s) 2PC, arith.circ.: bndw--, rounds++ 2PC, DH-KE: n exp’s 3PC: Conditional Disclosure of Secrets [GIKM00], IT: 4nD bndw [AC’15], crypt: 2n(m+D) bndw 2x plain Client-Server ORAM 3PC, 2-PIR: +1 round, 2nm+nD bnds
k: sec.par. n: # tuples in path D: record size m: address size
P1 & P2 hold same PRF key k
1 ⨁ di 2
1
2
𝑙 𝑏𝑗
2 ⨁𝐸𝑗] }𝑗
𝑙 𝑐𝑗
Problem: P3 learns position i where the ai = bi match occurs… 3PC sol.: P1 & P2 shift their input lists by (the same) random offset P3 can learn a pointer into the shifted list (= random in [n])
X = (X1,…,Xn) : tree path k : sec.par.
Acc: bndw: |X|k + ciph: |CA| + OT’s bndw: |X| Ev.1: ciph: |CT| ? Ev.2: ciph: |CM| ?
3PC idea: Use Yao for CT, but make transition table T “uniform” s.t.: Ev.1: If P1 and P2 locally permute secret-shared list X then P3 can learn T in the clear Ev.2: SS[ X, T ] SS[ T(x) ] is a simple variant of OT
(T) SS[X] SS[ T(X)]
Uniform Transition Table T [AC’15]:
items after 2 random shifts
Acc: bndw: |X|k + ciph: |CA| +OT’s bndw: |X| Ev.1: ciph: |CT| ciph: |CT| + bndw: nmk Ev.2: ciph: |CM| bndw: |X| bndw: |X|k = n(m+|d|)k ≈ m2w k ciph: m2w(+CT+ CM) +OT’s m2w (+k) m2w CT k=128, m=32 2PC: k=512 for =4 D = 16B τ = 2 16 rounds 3PC: +k=384 for =256 D = 1KB τ = 8 4 rounds
X = (X1,…,Xn) : tree path Xi = (addr.,data) k : sec.par. n = mw m : address size w : bucket width = max(2τ,D/m) τ : addr. chunk size D : record size |d| ≈ m CT, CM: circ.comp. of CT,CM (=circuit size / input length)
Acc: bndw: |X|k + ciph: |CA| +OT’s bndw: |X|
X = (X1,…,Xn) : tree path Xi = (addr.,data) k : sec.par. n = mw m : address size w : bucket width = max(2τ,D/m) τ : addr. chunk size D : record size |d| ≈ m CT, CM: circ.comp. of CT,CM (=circuit size / input length)
Ev.1: ciph: |CT| ciph: |CT| + bndw: nmk Ev.2: ciph: |CM| bndw: |X| bndw: |X|k = n(m+|d|)k ≈ m2w k ciph: m2w(+CT+ CM) m2w (+k) m2w CT AC’15: 3PC with simplistic eviction: very low CT, w=O(m+k) ≈100 WCS’15: “Circuit-ORAM”: 2PC, greedy eviction, higher CT, w=3, CM=2 New work: 2PC with same eviction as in Circuit-ORAM, slightly higher CT
Circuit ORAM Eviction:
greedy: “deepest goes first”
Making it Uniform: 6 7 8 5 4 3 2 1 6 7 8 5 4 3 2 1 5 8 2 7 1 4 6 3
Randomly Permute
k : sec.par (=128). m : address size w : bucket width (=3) = max(2τ,D/m)=2τ τ : addr. chunk size D : record size (=4B) CT (= ?) CM (=2) : circ.comp. of CT,CM (=circuit size / input length)
bndw= m2w k |circ|= m2w(+CT+ CM) bndw = m2w (+k) |circ|= m2w CT
CORAM: 2PC [WCS’15]: higher CT, w=3, CM=2 3PORAM: 3PC [AC’15]: low CT, w=O(m+k) ≤ 128 3PCORAM: 3PC [new]: same CT (~1.2x) and w as in CORAM
m: address size
bndw= m2w k |circ|= m2w(+CT+ CM) bndw = m2w (+k) |circ|= m2w CT
CORAM: 2PC [WCS’15]: higher CT, w=3, CM=2 3PORAM: 3PC [AC’15]: low CT, w=O(m+k) ≤ 128 3PCORAM: 3PC [new]: same CT (~1.2x) and w as in CORAM
m: address size
k : sec.par (=128). m : address size w : bucket width (=3) = max(2τ,D/m)=2τ τ : addr. chunk size D : record size (=4B) CT (= ?) CM (=2) : circ.comp. of CT,CM (=circuit size / input length)
bndw= m2w k |circ|= m2w(+CT+ CM) bndw = m2w (+k) |circ|= m2w CT
m: address size
Larger τ 2x
Pipelining 2x
3PCORAM: 2PC [WCS’15]: higher CT, w=3, CM=2 3PORAM: 3PC [AC’15]: low CT, w=O(m+k) ≤ 128 3PCORAM: 3PC [new]: same CT (~1.2x) and w as in CORAM
k : sec.par (=128). m : address size w : bucket width (=3) = max(2τ,D/m)=2τ τ : addr. chunk size D : record size (=4B) CT (= ?) CM (=2) : circ.comp. of CT,CM (=circuit size / input length)
Examples:
pipelining, batched access with postponed eviction, parallel access
MPC for other data-structures
general (t,n): the “P1/P2 permute & P3 gets outputs” idea doesn’t scale...
malicious security? covert security?
secure-computation-friendly multi-server ORAM ([LO’14]: client uses PRF)