[MPC-Notes] [REPO] [SOURCE]

PRF / OPRF / PSI

Function

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.

Random Function

定義 1

我們填好 2^4 張表格, 從中 random 挑一張, 也就是挑了一個 function.

定義 2

我們拿一張 4 個 row 的空白表格. 在每個 row randomly 挑一個 output. 填滿全部 4 個 row.

定義 3

我們拿一張 4 個 row 的空白表格. 先不填.
有人問某個 input 時, 如果 output 是空的, 就 randomly 填一個 output. 如果不是空的, 就回先前填過的 output.

以上三個定義是等價的.

Pseudorandom Function (PRF)

當 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. 儲存/傳送都很方便.

Collision

因為每個 output 都是各自 random 選取的, 所以是有可能 f(x) = f(y) 但 x != y . (for a fixed key)

但如果 f 的 output bits 夠長, 這種情況的機率就小到可以忽略.
我們幾乎可以說 f(x) = f(y) => x = y .

One-way function

固定 key. 給一個 value v, 能找出 x 使得 f(x) = v 的機率也小到可以忽略. (前提是 output 夠長, input 夠多)

Oblivious Pseudorandom Function (OPRF)

這裡進入 MPC 的範圍.

Sender 知道 key.
Receiver 知道 x.
想在不洩漏 key 和 x 的情況下, 計算 F(key, x)
最後 Receiver 得到 F(key, x). Sender 沒有得到什麼.

這可以用 generic 的 MPC protocol 來算. 不過 custom 的 protocol 應該比較快.

Private Set Intersection (PSI)

一個 party Sender 有 set X = {x1, x2, … xn}
一個 party Receiver 有 set Y = {y1, y2, … yn}

兩個人想知道 X 和 Y 有哪些共同的 elements (X ∩ Y). 而不在 X ∩ Y 中的 elements 不會被洩漏.

用 OPRF 實作 PSI

和 OPRF 一樣, PSI 有很多種實作方法. 這裡介紹 2008 年由 Hazay 和 Lindell 提出的, 基於 OPRF 的作法:

  1. Sender 用同一個 key, 和 Receiver 用 OPRF 算出 F(key, y1), F(key, y2) … , F(key, yn).
  2. Sender 用同一個 key, 自己算出 F(key, x1), F(key, x2) …, F(key, xn), 通通送給 Receiver.
  3. Receiver 判斷: 如果有 F(key, y) = F(key, x), 則 y = x. 代表 y 也在 X 裡面. 公布這些 y. (collision 機率很小的話)

因為 oblivious, 所以 key 和 y 不會洩漏. 因為 one way 且有 key, 所以 x 也不會洩漏.


後記

  1. 我們不但假裝 PRF 是 RF, 我們還假裝 PRF 存在. (目前沒有理論證明 PRF 存在)
  2. 書中和 Lindell 的文章都沒有強調 collision 機會低. 我一開始看的時候想: 這樣不會有 false positive 嗎? (困惑)
  3. PSI 和 OPRF 的作法都非常多. 可以參考 “Private set intersection: A systematic literature review” 和 “SoK: Oblivious Pseudorandom Functions”.
  4. 如果這邊不是用 OPRF 而是用單純的 hash function, 讓 Sender 送所有的 hash(a) 給 Receiver 去比呢? 雖然 hash 是 one-way, 但應該還是會 leak information.
    所以這邊像 commitment scheme 一樣, 除了 input 還搭配了一個 secret value (key). 而 key 不傳給對方, 改用 OPRF.