您好,登錄后才能下訂單哦!
本篇內容介紹了“如何在Web應用中添加同態加密支持”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
同態加密改變了隱私保護的游戲規則,它允許直接操作加密數據而無需先進行解密。這一概念可以追溯到RSA加密 —— RSA也具備有限的同態加密功能。不過同態加密很長時間都局限在學術界,直到2009年Craig Gentry的論文發表后,才涌現了大量的同態加密庫。
現在已經有很多可用的同態加密庫了。下面列出了一些比較流行的同態加密開發包以及它們支持的方案類型,當然這個清單是不完整的:
Microsoft SEAL: BFV, CKKS (C++)
HElib: BGV (with GHS), CKKS (C++)
PALISADE: BFV, BGV, CKKS, FHEW (C++)
TFHE: Ring-variant of GSW (C++)
HEAAN: CKKS (with bootstrapping) (C++)
為你的web'應用找到合適的同態加密開發包以及方案類型需要進行大量的研究工作:
這些不同的同態加密實現代碼有什么區別?
安裝這些同態加密開發包需要什么依賴?
我如何在自己的web應用中使用同態加密庫?
一個加密方案對性能有什么影響?
這個加密方案對數據有什么特殊的要求?
什么是自舉?為什么我需要這個環節?
在你開始設計一個隱私保護的應用之前,有些問題就需要先找出答案。
在這個教程里,讓我們從微軟的SEAL開始介紹,因為SEAL的文檔非常好。
讓我們先看看如何加密數據。首先你可以將一個數組(或者c++里的vector)編碼為特定格式的平文本,然后再將平文本加密成密文。同態處理是在密文上進行的。為了讀取處理結果,你需要解密然后再解碼。
上述過程的偽代碼如下:
const arr = [1,2,3...] const plain = encode(arr) const cipher = encrypt(plain) // Add the cipher to itself - element wise evaluate.add(cipher, cipher) const decrypted = decrypt(cipher) const decoded = decode(decrypted) // `decoded` contains [2,4,6, ...]
上面的代碼我進行了簡化,實際上這之前還有一些必要的步驟。
下面是SEAL同態加密庫的一些基本信息。
第三方依賴
SEAL沒有必須的第三方依賴。可選的依賴包括:zlib和Microsoft GSL
支持的方案
BFV:操作有符號/無符號整數
CKKS:操作浮點數
基本的差別和限制
BFV:密文的數據容量由加密參數決定,數組中每個元素的上下界也是參數決定的
CKKS:數組中的每個成員的取值范圍更大,但是密文容量相比BFV減半。而且CKKS 只能進行近似計算
自舉(Bootstrapping)允許在加密數據上進行無限的同態處理。沒有自舉的話,只能執行有限次數的 同態處理(例如乘法等)。目前SEAL同態加密庫還不支持自舉,但是已經有計劃為CKKS方案添加自舉支持。自舉會對性能有很大的影響,在很多情況下你在使用同態算法時都不需要自舉。
沒有自舉的同態算法被稱為層級化算法。分層的數量(也就是可以執行多少次同態處理)是由你選擇的加密參數來決定的。
第一步是為你的應用選擇一個合適的同態加密方案。你是需要整數還是可以容忍一定的誤差?當你需要絕對精度時應該使用BFV方案。CKKS有它的優勢,但是會在解密時引入一定的誤差 —— 雖然通過調整參數可以讓誤差減小到可以接受的范圍,但是對于新手來說這是有難度的。
一旦你選好了同態加密方案,下面就需要確定算法的參數了。這個問題應該是最難回答的,因為它取決于很多因素。此外還有更多的問題,例如:
如何測試那些參數有效?
是否還有優化的空間?
是否需要為每一組參數都構建一個新的測試應用?
下面是我們的同態加密實用方法學:
選擇同態加密方案:我認為BFV要比CKKS更容易商收。至少當解密結果不正確時 你可以立刻判斷有問題
從128位加密層級開始:雖然有更高的可選項,但是代價是縮減的同態加密操作- 能工作就好:從一個中等層級的PolyModulusDegree (4096)開始,然后逐漸增加 直到不能成功解密。再反向逐漸減小至不能成功解密。用這樣的辦法得到上下界。
細調:修改CoeffModulus的位數,使用模數轉換或CKKS的重縮放。
作為替代的方案,我建議你通過快速實驗來找出適合你的應用的參數。為此我開發了一個開源軟件node-seal,以便在JavaScript中實用SEAL同態加密庫。你可以利用這個軟件快速編寫一個JavaScript測試應用來進行參數實驗。node-seal的內核采用webassembly,可以運行在Node.js或現代瀏覽器中,已經包含了zlib支持,不需要進行本地編譯。
“如何在Web應用中添加同態加密支持”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。