使用 SEAL 的同態加密

.NET

本文討論如何以及何時使用同態加密,以及如何使用開放原始碼 Microsoft 簡單加密算術庫 (SEAL) 實現同態加密。

架構

顯示傳統加密和 SEAL 加密的圖表。

下載此架構的 Visio 檔案

工作流程

傳統的加密方案由三個功能組成:金鑰產生、加密和解密。 對稱金鑰加密方案使用相同的金鑰進行加密和解密。 它可以對大量資料進行高效加密,以實現安全的外包雲端儲存。 公鑰加密方案使用公鑰進行加密,使用單獨的金鑰進行解密。 任何知道公鑰的人都可以加密資料,但只有知道秘密金鑰的人才能解密和讀取資料。 公鑰加密可以實現安全的線上通訊,但通常效率低於對稱金鑰加密。

您可以使用傳統加密來安全儲存和通訊,但外包計算需要刪除加密層。 提供外包計算的雲端服務必須實施存取策略,以防止未經授權的存取資料和金鑰。 資料隱私依賴雲端提供者實施並受到客戶信任的存取控制策略。

借助 Microsoft SEAL 同態加密,雲端供應商永遠無法對其儲存和計算的資料進行未加密的存取。 可以直接對加密資料進行計算。 這種加密計算的結果保持加密狀態,並且只能由資料擁有者使用金鑰來解密。 大多數同態加密都使用公鑰加密方案,儘管可能不會總是需要公鑰功能。

案例詳細資料

公司通常以加密形式傳送、接收和儲存雲端資料。 但要利用雲端計算,公司必須提供未加密的資料或解密資料的金鑰。 這種做法使公司資料面臨更大的風險。 同態加密允許直接對加密資料進行計算,從而更輕鬆地將雲端的潛力應用於隱私關鍵資料。

潛在使用案例

  • 輕量級計算,例如對隱私關鍵資料和程序部分進行加法和乘法。
  • 外包雲端計算,單一擁有者擁有所有資料,並且可以單獨存取解密金鑰。

考量

  • 只能對加密資料進行一些計算。 Microsoft SEAL 同態加密函式庫允許對加密整數或實數進行加法和乘法。 使用此技術對加密資料進行加密比較、排序或規則計算式通常不可行。 因此,只能使用 Microsoft SEAL 實現對部分程式的特定隱私關鍵雲端計算。

  • Microsoft SEAL 附帶兩種具有不同屬性的同態加密方案。 BFV 方案允許對加密整數進行模計算。 CKKS 方案允許對加密實數或複數進行加法和乘法,但僅產生近似結果。 當加密實數求和、評估加密資料上的機器學習模型或計算加密位置的距離時,CKKS 是最佳選擇。 對於需要精確值的應用,BFV 方案是唯一的選擇。

  • 同態加密效率不高。 由於同態加密會帶來很大的效能開銷,因此對未加密資料進行成本高昂的計算可能在加密資料上不可行。

  • 使用同態加密加密的資料比未加密的資料大很多倍,因此使用該技術加密整個大型資料庫可能沒有意義。 相反,嚴格的隱私要求禁止未加密的雲端計算,但計算本身相當輕量級的情境是有意義的使用案例。

  • 通常,同態加密方案有一個由資料擁有者持有的金鑰。 對於多個不同私有資料擁有者想要進行協作計算的情境,同態加密並不合理。

  • 將未加密的計算轉換為加密資料的計算並不總是容易或直接的。 即使新使用者可以使用 Microsoft SEAL 進行程式設計和執行計算,高效能和低效實施之間也可能存在很大差異。 很難知道如何提高效能。

  • 雖然同態加密原語本身是安全的,但它並不能保證使用它的應用程式和協定是安全的。

參與者

本文由 Microsoft 維護。 原始投稿人如下。

主要作者:

下一步

要了解有關同態加密和 Microsoft SEAL 庫的更多資訊,請參閱 Microsoft Research 的 Microsoft SEAL 以及 GitHub 上的 SEAL 程式碼專案

請參閱以下有關 Azure 安全性的資源: