盲計算
假設有兩方。聚會 $ A $ 有密文 $ c_1, c_2 $ 加密數據 $ m_1,m_2 $ 分別。 $ A $ 不知道要解密的密鑰 $ c_1, c_2 $ . 聚會 $ B $ 有秘鑰。
$ A $ 想計算 $ (m_1m_2)/(m_1+m_2). $ 因此,它選擇兩個均勻隨機的值 $ k_1,k_2 $ 並發送 $ k_1\cdot c_1\cdot c_2 $ 和 $ k_2\cdot(c_1+c_2) $ 至 $ B $ . $ B $ 解密密文,得到 $ p_1,p_2 $ 分別。 $ B $ 不學習原始數據 $ m_1,m_2 $ 自從 $ A $ 已經蒙蔽了他們。 $ B $ 計算 $ p_1/p_2 $ 並將結果發送回 $ A $ 加密後。
我想在我的實現中使用這個場景,我還沒有決定任何方案,不過考慮過 Paillier。但是,我不確定它有多安全以及如何實現它。
- 你能給我推荐一些文章和範例實現嗎?
你的方法行不通,至少對 Paillier 來說是這樣。您正在嘗試同態計算兩者 $ m_1m_2 $ 和 $ m_1 + m_2 $ , 通過計算 $ c_1c_2 $ 和 $ c_1 + c_2 $ . 三件事:
- 首先,即使你有一個完全同態的加密方案(它可以同時支持同態加法和乘法),一般情況下,明文的同態乘法只是密文的乘法,明文的同態加法只是添加了密文(儘管後者恰好是大多數基於格的方案的情況)。相反,您有一些特定的算法來計算每個同態操作。
- 第二,你想用Paillier,但是Paillier確實只支持同態加法(計算 $ c_1c_2 \bmod N^2 $ 給出一個加密 $ m_1 + m_2 $ , 在哪裡 $ N $ 是 Paillier 模數)
- 第三,你的致盲方法失敗了。第一個原因是僅僅隱藏明文是不夠的:通常還必須重新隨機化密文,否則它們可能會在同態操作中洩露明文中間值的資訊。通常使用 Paillier,這是通過將最終密文與零隨機加密相乘來完成的。其次,您只對明文使用乘法致盲;請注意,這會洩漏值 $ m_1m_2 $ 和 $ (m_1+m_2) $ 是否等於 0。
這是使用 Paillier 的更好方法。我假設雙方都是半誠實的(他們不會主動作弊),並且 A 不應該學習個別明文,而只 $ m_1m_2/(m_1+m_2) $ , B 應該什麼都學不到。
- A 同態地添加一個隨機值 $ r_i $ (撿來的 $ \mathbb{Z}_N $ , Paillier 的明文空間) 到 $ m_i $ 為了 $ i=1,2 $ ,並隨機化生成的密文。他發送結果 $ c’_1, c’_2 $ 給 B。
- B解密,得到 $ (m_1+r_1) $ 和 $ (m_2+r_2) $ . 他計算兩者的乘積,並返回一個隨機加密 $ c $ 這個產品,這是 $ m_1m_2 +r_1m_2 + r_2m_1 + r_1r_2 $ .
- A 同態地計算一個加密 $ r_1m_2 $ 從 $ r_1 $ 和 $ c_2 $ (通過計算 $ c_2^{r_1}\bmod N^2) $ , 和一個加密 $ r_2m_1 $ 從 $ r_2 $ 和 $ c_1 $ (通過計算 $ c_1^{r_2}\bmod N^2) $ . 然後,他同態地減去 $ c $ 這兩種加密,以及 $ r_1r_2 $ ,他清楚地知道這一點。更正式地說,他計算: $$ c/(c_1^{r_2}c_2^{r_1}(1+N)^{r_1r_2}) \bmod N^2, $$ 這是一種加密 $ c’ $ 的 $ m_1m_2 $ .
- A 同態計算從 $ c_1 $ 和 $ c_2 $ 的加密 $ r(m_1+m_2) $ 對於均勻隨機 $ r $ ,隨機化生成的密文,並發送結果 $ c’’ $ 到 B。B 解密、反轉輸出、重新加密並將其發送回 A(請注意,由於您要計算 $ m_1m_2/(m_1+m_2) $ , 我假設我們已經知道 $ m_1+m_2 $ 不為 0 且可逆,因此 $ r(m_1+m_2) $ 確實完美地掩蓋了它)。
- A 同態地將他收到的密文乘以 $ r $ , 得到一個加密 $ (m_1+m_2)^{-1} $ .
- 我們快完成了:A 現在加密了 $ m_1m_2 $ 和 $ (m_1+m_2)^{-1} $ ,並想最終了解他們的產品。A 可以應用與他用來獲得產品加密的策略完全相同的策略 $ m_1m_2 $ 從加密 $ m_1 $ 和 $ m_2 $ ,然後通過隨機值等進行遮罩。因此,A發送加密 $ m_1m_2+r’_1 $ 和 $ (m_1+m_2)^{-1}+r’_2 $ 對於隨機蒙版 $ r’_1,r’_2 $ , B 解密、乘法、重新加密,並且 A 可以從該加密中同態地恢復 $ m_1m_2(m_1+m_2)^{-1} $ .
- 為了獲得最終結果,我們還需要一個互動:Aadditive Masks $ m_1m_2(m_1+m_2)^{-1} $ 隨機的 $ R $ 並對密文進行隨機化;B解密得到 $ m_1m_2(m_1+m_2)^{-1} + R $ ,他將其發回給 A,A 減去 $ R $ 並得到最終的明文 $ m_1m_2(m_1+m_2)^{-1} $ .
我懶得寫詳細的安全證明,但相信我,這可以安全地計算 $ m_1m_2(m_1+m_2)^{-1} $ 在半誠實模型中(在獨立設置中),這似乎是 Paillier 的正確方法(與完全同態加密相比要簡單得多,但在計算上也可能涉及更多)。至於實現它,好吧,有一些解決方案可以實現 Paillier 加密和同態操作,實現這個協議應該不會太難——不過,我通常,如果它是為了任何其他教育目的,你應該讓專業人士去做.