• 沒有找到結果。

三、 演算法介紹

3.1 加密演算法

我們的演算法包含 KeyGen , Encryption , Decryption。

公開常數:k 個 hash 函數,bloom filter 陣列長度 m。

KeyGen(1𝛾): 給定一安全係數𝛾,隨機產生𝛾長度的字串 2 個,sk1 和 sk2 並輸出。

Encryption(資料 D , sk1 , sk2):

首先,把 D 轉化為二進位形式,接者對其做 HYL encoding 可得到 D 的 0 集合和 1 集合,而由於 0 集合和 1 集合其元素個數會因為各數字的二進位形式不同而不同,舉例 來說:

156(二進位 10011100)

0 集合:11,101,1001111,10011101

1 集合:1,1001,10011,100111

因其二進位形式由 4 個 0 和 4 個 1 構成,所以 0 集合元素個數 4 個,1 集合元素個 數 4 個,為了防止攻擊者可從元素個數得到資訊,我們稍微修改 HYL encoding,在不影 響比較結果的情況下,把 0 集合和 1 集合的元素個數都補到上限,也就是 bit 數(以上 156 的例子來講的話,0 集合和 1 集合都補到 8 個元素)。

新增元素到 0 集合和 1 集合中,如下

0 集合: 11,101,1001111,10011101 ,𝑥1, 𝑥2, 𝑥3, 𝑥4

13

1 集合: 1,1001,10011,100111, 𝑦1, 𝑦2, 𝑦3, 𝑦4

而為了避免影響比較結果,𝑥1, 𝑥2, 𝑥3, 𝑥4不能與本來的 1 集合元素有交集,𝑦1, 𝑦2, 𝑦3, 𝑦4 也不能和本來的 0 集合元素有交集而且𝑥1, 𝑥2, 𝑥3, 𝑥4也不能和𝑦1, 𝑦2, 𝑦3, 𝑦4有交集。

補足方法:首先觀察本來的 0 集合和 1 集合的元素皆為 1 收尾,而且其長度最多為 bit 數(8),所以我們把本來 0 集合的元素尾數改 0 後加到 1 集合內,即為𝑥1, 𝑥2, 𝑥3, 𝑥4,而 對本來 1 集合內的元素,後頭補 0 補到長度為 bit 數加 1 後加入 0 集合內,即為𝑦1, 𝑦2, 𝑦3, 𝑦4, 如下(同樣以 156 為例)

0 集合: 11,101,1001111,10011101 ||100000000, 100100000,100110000,100111000

1 集合: 1,1001,10011,100111 ||10,100,1001110,10011100

此方法不只補足個數,也讓任 2 密文,其 0 集合與 0 集合的交集個數等同於其 1 集 合和 1 集合的交集個數,而此數也等同於兩者原本 0 集合與 0 集合的交集個數加上 1 集 合和 1 集合的交集個數,降低可能洩漏的資訊(本來可得到 0 集合與 0 集合的交集個數 和 1 集合與 1 集合的交集個數,但現在只能得到兩者總和),如下例(156 和 131)

131(二進位形式 10000011)

0 集合:11,101,1001,10001,100001 ||100000000,100000100,100000110

1 集合:1,1000001,10000011 ||10,100,1000,10000,100000

可以看到若比較原本的 coding(只看||左邊),156 的 0 集合和 131 的 0 集合交集個 數為 2,1 集合和 1 集合交集個數為 1,而經過補足後,兩者皆為 3。

在經過 HYL coding 和補足完後,我們可得到 2 元素個數相等的集合,0 集合和 1 集合,以𝐷0, 𝐷1稱之,𝐷0 = {𝑑01, 𝑑02… 𝑑0𝑏}、𝐷1 = {𝑑11, 𝑑12… 𝑑1𝑏},b 為 bit 數。

之後使用 HMAC 將每個集合裡的元素加密,做出𝐻𝑀𝐴𝐶𝑠𝑘1(𝐷0)、𝐻𝑀𝐴𝐶𝑠𝑘1(𝐷1),

14

𝐻𝑀𝐴𝐶𝑠𝑘1(𝐷0)={ 𝐻𝑀𝐴𝐶𝑠𝑘1(𝑑01),𝐻𝑀𝐴𝐶𝑠𝑘1(𝑑02)…. 𝐻𝑀𝐴𝐶𝑠𝑘1(𝑑0𝑏)}

𝐻𝑀𝐴𝐶𝑠𝑘1(𝐷1)={ 𝐻𝑀𝐴𝐶𝑠𝑘1(𝑑11),𝐻𝑀𝐴𝐶𝑠𝑘1(𝑑12)…. 𝐻𝑀𝐴𝐶𝑠𝑘1(𝑑1𝑏)}

接者為了加速伺服器處理速度,將𝐻𝑀𝐴𝐶𝑠𝑘1(𝐷0)和𝐻𝑀𝐴𝐶𝑠𝑘1(𝐷1)做成 bloom filter,

先產生一長度 m 的陣列𝐵𝐷0和𝐵𝐷1,並把𝐵𝐷01… . 𝐵𝐷0𝑚和𝐵𝐷11… . 𝐵𝐷1𝑚初始值皆設為 0,

然後對𝐻𝑀𝐴𝐶𝑠𝑘1(𝐷0)裡每個元素 e 都做 k 個 hash 函數,並把陣列中,輸出數字位置(𝑏1(𝑒), 𝑏2(𝑒),… 𝑏𝑘(𝑒))的值設成 1,如圖 4 所示(每個箭頭代表一個 hash 函數):

圖 4:HMAC 集合的 bloom filter 製作示意圖

做出𝐻𝑀𝐴𝐶𝑠𝑘1(𝐷0)和𝐻𝑀𝐴𝐶𝑠𝑘1(𝐷1)的 bloom filter 𝐵𝐷0和𝐵𝐷1後,在用第二把密 鑰 sk2 以一對稱式加密方法 SENC 加密成密文𝐶𝐷=SENC(sk2,D),最後輸出 bloom filter 𝐵𝐷0、𝐵𝐷1、𝐻𝑀𝐴𝐶𝑠𝑘1(𝐷1)及𝐶𝐷

最後在為加密方法做個總結:

1. 把資料 D 化成二進位形式,並對其做 HYL encoding 和補足,得到 D 的 0 集合和 1 集 合𝐷0和 𝐷1

2. 將𝐷0和𝐷1裡的元素利用 sk1 做 HMAC,得到𝐻𝑀𝐴𝐶𝑠𝑘1(𝐷0)、𝐻𝑀𝐴𝐶𝑠𝑘1(𝐷1)。

15

3. 把𝐻𝑀𝐴𝐶𝑠𝑘1(𝐷0)、𝐻𝑀𝐴𝐶𝑠𝑘1(𝐷1)這兩個集合,利用 k 個 hash 函數,做成兩長度為 m 的 bloom filter 陣列 𝐵𝐷0和𝐵𝐷1

4. 對資料 D 用 sk2 進行對稱式加密,得到𝐶𝐷= SENC(sk2,D)。

5. 輸出𝐻𝑀𝐴𝐶𝑠𝑘1(𝐷1)、𝐵𝐷0、𝐵𝐷1和𝐶𝐷

Decryption(sk2, 𝐶𝐷):

就用密鑰 sk2 去解𝐶𝐷,輸入解密結果資料 D=SDEC(sk2, 𝐶𝐷)。

相關文件