Function 可以用公式表達, 也可以用 table 表達.
以 2 個 input 的 boolean function 為例:
XOR
0 0 0
0 1 1
1 0 1
1 1 0
我們有 2 * 2 個 input, 每個 input 都有恰一個 output.
那, 有多少個 “2 個 input 的 boolean function” 呢?
每個 row 的 output 有 2 種填法, 所以有 2^4 個這樣的 function.
我們填好 2^4 張表格, 從中 random 挑一張, 也就是挑了一個 function.
我們拿一張 4 個 row 的空白表格. 在每個 row randomly 挑一個 output. 填滿全部 4 個 row.
我們拿一張 4 個 row 的空白表格. 先不填.
有人問某個 input 時, 如果 output 是空的, 就 randomly 填一個 output.
如果不是空的, 就回先前填過的 output.
以上三個定義是等價的.
當 input output 的範圍很大時, random function 的表格會很大. (exponential)
定義 1 2 都超花空間. 就算用定義 3, 也是要花空間來記載.
在 1986 年, Goldreich - Goldwasser - Micali 提出了 “Pseudorandom Function” 的概念.
F(key, x)
給定 key, 可以得到一個只有單一 argument 的 function, 這個 function 和 random funciton 的行為幾乎一樣, 很難分辨出差異.
F(1, x) 很像 random function. 是個 pseudorandom function.
F(2, x) 很像 random function. 是個 pseudorandom function.
…
(F 是個 pseudorandom function ensemble indexed by key)
我們只要用一個 key 的空間, 就好像得到了一整張填滿 random value 的 table. 儲存/傳送都很方便.
因為每個 output 都是各自 random 選取的, 所以是有可能 f(x) = f(y) 但 x != y . (for a fixed key)
但如果 f 的 output bits 夠長, 這種情況的機率就小到可以忽略.
我們幾乎可以說 f(x) = f(y) => x = y .
固定 key. 給一個 value v, 能找出 x 使得 f(x) = v 的機率也小到可以忽略. (前提是 output 夠長, input 夠多)
這裡進入 MPC 的範圍.
Sender 知道 key.
Receiver 知道 x.
想在不洩漏 key 和 x 的情況下, 計算 F(key, x)
最後 Receiver 得到 F(key, x). Sender 沒有得到什麼.
這可以用 generic 的 MPC protocol 來算. 不過 custom 的 protocol 應該比較快.
一個 party Sender 有 set X = {x1, x2, … xn}
一個 party Receiver 有 set Y = {y1, y2, … yn}
兩個人想知道 X 和 Y 有哪些共同的 elements (X ∩ Y). 而不在 X ∩ Y 中的 elements 不會被洩漏.
和 OPRF 一樣, PSI 有很多種實作方法. 這裡介紹 2008 年由 Hazay 和 Lindell 提出的, 基於 OPRF 的作法:
因為 oblivious, 所以 key 和 y 不會洩漏. 因為 one way 且有 key, 所以 x 也不會洩漏.