Implementation

F# 中的僅加法 PHE

  • January 31, 2014

使用同態加密,我希望能夠獲取一個加密整數並為新的加密值添加 1 或 -1。我不希望加密的值是可恢復的 - 只是以下內容:

  • $ \varepsilon(x) = (\varepsilon(x) \oplus \varepsilon(-1)) \oplus \varepsilon(1) = (\varepsilon(x) \oplus \varepsilon(1)) \oplus \varepsilon(-1), $
  • $ \varepsilon(x+1) = \varepsilon(x) \oplus \varepsilon(1) \ \mathrm{and} $
  • $ \varepsilon(x-1) = \varepsilon(x) \oplus \varepsilon(-1) $
  • $ \forall x \in \mathbb{Z} $

$ x $ 永遠無法恢復,因為密鑰不為人所知(原始 $ \varepsilon(x’) $ 被選為 $ 0 $ 並且只會以加密形式被操縱或使用)。如果 $ \varepsilon(x + n) $ ,(僅)遞歸地計算為一系列單個增量或減量,比 $ O(n) $ 但不比大約 $ O(n \log n) $ 並且應該沒有限制 $ n $ - 也就是說,我朝著一個方向走得越遠,繼續前進就會變得越困難,但並非不切實際。

在我看來,如果提示 $ \mathrm{sK} $ 可以永遠重複使用 $ \mathrm{recrypt}() $ ,但我可能會誤解這一點(或全部)。然後,Gentry 可能有點矯枉過正,因為我似乎不需要乘法( $ \varepsilon(-1) $ 不需要計算為 $ \varepsilon(1) \otimes \varepsilon(-1) $ , 對?)。我認為任何支持無限添加的 PHE 都足夠好。Gentry 的數字“變硬”——但所有系統都是如此嗎?如果它們在大約 $ O(n \log n) $ 這就是我希望最壞的情況。

我想在 F# 中實現這一點,但是 1) 我需要一個很好的選擇 .NET 支持的算法或 F# 中的實現,以及 2) 如何在這種通常會瘋狂的方案中禁用填充去做?

目的是創建一個起源未知但可以相對導航的維度。我在數學、乳膠和形式主義方面低於新手,所以如果我上面的嘗試完全愚蠢,我道歉。您是否認識到不需要 HE 的等效方案?

為此,您不需要完全同態加密。特別是,您不需要使用 Gentry 的方案。任何用於加法同態加密的標準方案都可以。例如,Paillier 應該可以正常工作,指數 El Gamal 也應該如此。

搜尋這個站點,你可以找到很多關於加法同態加密的資訊。參見,例如,Elgamal 可以加法同態嗎?它如何用於電子投票?https://crypto.stackexchange.com/a/9003/351>和<https://crypto.stackexchange.com/a/12704/351>和<https://crypto.stackexchange.com/a/9139/351。此外,搜尋有關“加密計數器”的文獻,您應該會找到可能有用的其他內容。

這不是詢問如何在 F# 中實現加密的網站;在 StackOverflow 上詢問編碼問題。你關於填充的問題對我來說毫無意義。真正的問題是使用什麼算法。一旦你知道要使用什麼算法,只需實現它(這只是一個簡單的程式問題)。

引用自:https://crypto.stackexchange.com/questions/13238