• 沒有找到結果。

P ROTOCOL FOR I NTEGER C LASS

4.3 Protocol for Integer Class

在多方安全計算的環境下,對於整數運算來說,首先就是必須確定運算所在的值域 大小(Domain),有了 Domain 才具有處理運算的能力,因為 secret 型態的數值資料是處 於保密狀態的,所以說即使是負責處理運算的 SMC client 端也是無法知曉數值的真實內

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

27

本上 Domain 的大小定義為 2n,n = k+1,也就是說最高位(MSB)為第 k+1 個 bit 且編號為 k,而最低位(LSB)為第 1 個 bit 且編號為 0。

不同 Domain 下的數值資料想要做運算的話,不可直接執行運算 protocol,必須先經 過 Domain 轉換的動作,使得所有數值資料皆在相同 Domain 下才能做運算。而做 Domain 轉換會呼叫到 zn_to_z2 和 z2_to_zn 這兩個 protocol,由於 protocol 的內層會呼叫到 scalar product protocol,使得需要耗費網路傳輸的時間,造成的 cost 會較高,所以能夠盡量減 少 Domain 轉換,就可降低時間複雜度,在設計演算法時,如何減少 Domain 轉換的次 數將會是決定效能好壞的關鍵。

對於整數的基本四則運算,皆可實現在多方安全計算的環境中。假設有兩個 secret 型態的數值資料 X = x1 + x2 和 Y = y1 + y2,且分持於 client1 和 client2 兩人手裡,即 client1 手中擁有的資料為(x1, y1),client1 手中擁有的資料為(x2, y2),且整數運算所採用的 Domain 為 d,數值範圍為 0 ~ (232-1)。

現在要對 X 和 Y 做四則運算,以下為詳細的設計規則以及相關的演算法與程式碼。

4.3.1 Plus

要求得 X + Y 的結果,只需要將各自手上所持有的部分結果做相加再做 mod 運算,即 為結果。因為根據 mod 運算的定理, 。

Protocol: plus

Party 1 and Party 2 individually computes (xi + yi) mod d, for i = 1, 2.

No need scalar product protocol. Trivial.

Specification: Plus

X + Y = (x1 + x2) + (y1 + y2) = (x1 + y1) + (x2 + y2)

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

28

4.3.2 Minus

要求得 X - Y 的結果,只需要將各自手上所持有的部分結果做相減再做 mod 運算,即 為結果。因為根據 mod 運算的定理, 。

4.3.3 Product

要求得 X × Y 的結果,必須要先將各自手上所持有的部分結果做相乘,以及做一次 scalar product protocol 所得的結果,將兩結果相加之後再做 mod 運算,即為最後結果。

可直接使用之前已定義好的 product protocol。

使用者必須保證相乘之後的結果依然處於 Domain 之內,否則會造成 overflow 的情形,

且經由 mod 運算完之後的結果將會輸出非預期的結果。

Algorithm: plus

(x - y)%d

Protocol: plus

Party 1 and Party 2 individually computes (xi - yi) mod d, for i = 1, 2.

No need scalar product protocol. Trivial.

Specification: Plus

X - Y = (x1 + x2) - (y1 + y2) = (x1 - y1) + (x2 - y2)

Algorithm: plus

(x + y)%d

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

29

4.3.4 Division

要求得 X÷Y 的結果,必須決定好輸出的數值型態。整數的除法運算結果會得到商跟 餘數,若是想求得具有小數點的數值時,要使用浮點數的除法運算 protocol,且還要先 經過整數轉浮點數的型態轉換才行。這裡將使用的是整數的除法輸出。

由於是分持的被除數與除數,所以無法直接得知其值,而若是要做長除法,需先將 被除數與除數由 10 進位轉換成 2 進位,之後再開始做除法的動作。除數先對齊被除數,

被除數減除數後的結果若是小於 0,則被除數不變繼續往下做並記錄 0,若是大於 0,則 記錄 1 並將結果設為被除數,接著重新跑上述的流程,直到跑完最後一個位元為止。最 後再將記錄的結果由二進位轉為十進位,則為商,而之前剩餘的被除數則為餘數。

Algorithm: product

t = (x × y)%d

s = case(@client_type)

when 1 then scalar_product(x, y, d) when 2 then scalar_product(y, x, d) end

(t +s)%d

Protocol: Prodoct

1. Party 1 and Party 2 jointly execute the Scalar-Product protocol ((x1 , y1), (y2 , x2)) → (t1 , t2) such that t1 + t2 = x1y2 + y1x2 .

2. Party j individually computes zj = tj + xjyj , for j = 1, 2.

Specification: Prodoct

X × Y = (x1 + x2) × (y1 + y2) = (x1 × y1) + (x1 × y2) + (x2 × y1) + (x2 × y2) product((x1 , y1), (x2 , y2)) → (z1 , z2) such that z1 + z2 = (x1 + x2)(y1 + y2).

z1 + z2 = x1y1 + x2y2 + (x1y2 + y1x2)

其中 Domain 轉換的功能,使用到 z2_to_zn 以及 zn_to_z2 這兩個 protocol,而比大小 的功能,此使用到的 protocol 為 negative?,這是用來判斷一個分持的數是否小於零,主 要是利用 MSB 是否為 1 來判斷結果。且還會使用到 if_the_else 這個 protocol,利用 negative?

的結果以取得該往哪一步去做的結果。由於使用到了 if_the_else 這個 protocol,所以底 下的兩個 block 都會被執行,且除法也使用到了迴圈,所以整數範圍因為是 0 ~ (232-1),

以至於說上述的流程將會是執行 32 次,執行時間上所花費的時間較多。

Protocol: division

1. Two parties collaboratively execute the z2_to_zn(zn_to_z2 { k’ }) {2k’} protocol ((x1, y1), (x2, y2)) → ((b01 , . . . , bk’1 ), (b02 , . . . , bk’2)) → ((u1, v1), (u2, v2)), such that bi =

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

31

相關文件