Oblivious random permutation
The procedure
This is the main building block of the oblivious sort. We briefly describe here the recent construction of Peeter Laud; it specifically requires SPDZ, so it might need to be replaced in case one wants to use different sharing scheme.
For each pair of parties , we need to precompute the following data for each party:
- The party picks a permutation . Honest parties are assumed to pick it uniformly at random.
- Pick a pair of random vectors . Set .
- Set , .
In practice, this can be done in the offline phase in a few different ways.
Then, this precomputed data can be used to construct from a vector belonging to the -th party a permuted vector shared between and in a following way:
- sends to the vector
- sets
- sets
Now, the oblivious random permutation protocol of a shared value is the following:
Repeat for each party : Permute with each of the shares , setting the new shares value ; set -th share to be the sum of discrepancies: .
This requires rounds and total communication.
Active security
The protocol above is passively secure. The active check can be made post-factum: to check that a pair of vectors are permutations of each other, we sample a random value and check .
Offline phase
Offline phase can be done in various ways. We are currently planning to use butterfly network to apply a permutation to a shared value in the offline phase, but other approaches are also possible (mixnet approach might outperform butterfly network for large ), this is largely TBD.