近似全同態(tài)加密的安全性措施

致遠(yuǎn)博士
眾所周知,要保護(hù)靜態(tài)或傳輸中的數(shù)據(jù),必須使用CCA安全加密。如果將加密功能作為較大系統(tǒng)中的一個(gè)組件,而該系統(tǒng)中的其他組件則提供了針對(duì)活動(dòng)攻擊者的保護(hù),則CPA安全性就足夠了。

如今,標(biāo)準(zhǔn)(非同態(tài))加密的安全性已經(jīng)被很好的理解。通常有兩種形式:加密方案只能抵御被動(dòng)攻擊者(可以查看加密數(shù)據(jù)但不能操縱它),或者也可以抵御主動(dòng)攻擊者可以操縱加密的數(shù)據(jù),然后觀察如何解密。

較弱(被動(dòng))概念的加密術(shù)語是“CPA-security”,而較強(qiáng)的概念稱為“CCA-security”。(這些首字母縮寫分別代表“選擇明文攻擊”和“選擇密文攻擊”。)

眾所周知,要保護(hù)靜態(tài)或傳輸中的數(shù)據(jù),必須使用CCA安全加密。如果將加密功能作為較大系統(tǒng)中的一個(gè)組件,而該系統(tǒng)中的其他組件則提供了針對(duì)活動(dòng)攻擊者的保護(hù),則CPA安全性就足夠了。

對(duì)于同態(tài)加密(HE)方案,眾所周知,它們本質(zhì)上不能CCA安全。其非CCA安全性的后果之一是,系統(tǒng)必須確保永遠(yuǎn)不要將解密應(yīng)用于無效的密。

實(shí)際上,對(duì)于目前的全同態(tài)加密方案,允許攻擊者提交要解密的無效密文通常會(huì)導(dǎo)致密鑰泄露。因此,全同態(tài)加密方案通常會(huì)采用CPA安全性,并依靠周圍的系統(tǒng)來提供可能需要的額外保護(hù)。

Li和Micciancio最近觀察到,對(duì)于近似全同態(tài)加密方案,CPA安全性的通用概念可能甚至不足以應(yīng)對(duì)被動(dòng)攻擊者。

關(guān)鍵區(qū)別在于,由于該方案本身會(huì)增加一些錯(cuò)誤,如果攻擊者知道解密結(jié)果應(yīng)該是什么,攻擊者也可以從解密結(jié)果中學(xué)到一些東西。具體來說,它能夠?qū)W習(xí)錯(cuò)誤,這可能會(huì)泄漏有關(guān)密鑰的信息。

Li和Micciancio描述了對(duì)CKKS近似全同態(tài)加密方案的簡單攻擊,該攻擊在看到少量解密結(jié)果(有時(shí)只有一次解密)后可以破解密鑰。

如何減輕Li-Micciancio襲擊

針對(duì)此觀察,HElib現(xiàn)在包括減輕這種風(fēng)險(xiǎn)的對(duì)策。特別是,對(duì)CKKS的HElib解密函數(shù)進(jìn)行了修改,以添加一些與密鑰無關(guān)的噪聲,從而掩蓋了與密鑰有關(guān)的噪聲,并使Li-Micciancio攻擊更難以奏效。

但是,這種額外的噪聲降低了解密結(jié)果的準(zhǔn)確性。默認(rèn)情況下,選擇與密鑰無關(guān)的噪聲的大小在HElib為解密密文而保留的噪聲范圍之內(nèi),但是該范圍可能過于保守,因此添加的噪聲有時(shí)可能會(huì)導(dǎo)致準(zhǔn)確性顯著降低。因此,HElib為應(yīng)用程序提供了指定解密所需精度的方法,然后將在此精度約束下添加最大數(shù)量的噪聲。

使用CKKS的應(yīng)用程序需要找到一條能平衡安全性,準(zhǔn)確性和性能的方法。下面,我們?cè)诳紤]這些方面的同時(shí),描述了一個(gè)用于開發(fā)基于CCKS的應(yīng)用程序的框架。粗略地,我們建議應(yīng)用程序嘗試對(duì)錯(cuò)誤進(jìn)行嚴(yán)格估算,然后使用該估算值代替HElib計(jì)算的噪聲范圍。

1.首先確定應(yīng)用程序需要應(yīng)用于數(shù)據(jù)的(類別)流程;

2.從處理結(jié)果中確定所需的精度;

3.在測試數(shù)據(jù)上的HElib中運(yùn)行這些過程,以確定要使用的參數(shù),大致如下:

i.找到一些參數(shù)設(shè)置,其中context.securityLevel()返回足夠高的安全性,并且?guī)觳粓?bào)告解密錯(cuò)誤;

ii.當(dāng)使用步驟2中的精度參數(shù)調(diào)用時(shí),通過實(shí)驗(yàn)找到解密結(jié)果的噪聲大小的一個(gè)相當(dāng)緊密的邊界。這可以通過多次運(yùn)行HElib處理來實(shí)現(xiàn),并將解密的結(jié)果與對(duì)明文數(shù)據(jù)進(jìn)行相同處理時(shí)得到的結(jié)果進(jìn)行比較;

iii.比較從上面3.2步得到的噪聲邊界和HElib在解密之前計(jì)算的估計(jì)誤差,后者可以通過ctxt.errorBound()訪問。如果實(shí)驗(yàn)噪聲明顯小于ctx.errorbound()返回的噪聲,那么在解密之前使用ctx.bumpnoisebound()來強(qiáng)制HElib使用更嚴(yán)格的誤差估計(jì)。

iv.重復(fù)步驟3.1-3.3,增加參數(shù),直到解密不再發(fā)出有關(guān)所添加噪聲太小的警告。

現(xiàn)在,我們將詳細(xì)介紹每個(gè)步驟。

步驟1-2過程和所需的精度

與全同態(tài)加密的任何應(yīng)用程序一樣,起點(diǎn)是確保足夠的功能。因此,開發(fā)人員必須確定要計(jì)算的運(yùn)算和所需的輸出精度。一些應(yīng)用程序只需要計(jì)算一個(gè)功能,而其他應(yīng)用程序則需要處理更廣泛的功能,但是至少開發(fā)人員應(yīng)該確定所支持電路的最大深度和所需的最大精度。

在HElib中,應(yīng)用程序可以指定用于加密明文數(shù)據(jù)的輸入精度,并且電路中的每個(gè)級(jí)別都將精度降低一位(或最多1.5位),即,每個(gè)級(jí)別的誤差大約翻倍。例如,使用輔助類PtxtArray可以調(diào)用ptxt.encrypt(ctxt,ptxtMagnitude,precision),這將導(dǎo)致給定輸入明文的加密,并且錯(cuò)誤以2精度為邊界。在計(jì)算了一個(gè)三層深度的電路(例如)之后,誤差將增加到超過23個(gè)精度。在計(jì)算深度d電路之后,需要p位輸出精度的應(yīng)用程序應(yīng)以p+d到p+3d/2之間的輸入精度進(jìn)行加密。

步驟3查找匹配參數(shù)

在確定了所需的深度d和輸出精度p之后,應(yīng)用程序開發(fā)人員需要找到一些在確保安全性的前提下產(chǎn)生該輸出精度的參數(shù)。這通常涉及迭代的反復(fù)試驗(yàn)過程,如下所示:

1.從對(duì)參數(shù)的一些粗略估計(jì)開始:深度d電路所需的模數(shù)的總位長通常約為,使用該模數(shù)獲得128位安全性所需的環(huán)尺寸約為(取整為2的冪,因?yàn)槟壳暗腃KKS支持在HElib只測試了2的冪次環(huán))

用m表示大于的2的下一個(gè)冪,然后可以使用ContextBuilder類在HElib中設(shè)置這些初始參數(shù),設(shè)置

Context context=ContextBuilder<CKKS>().m(m).bits(16*(d+1)).precision(p+d).c(3).build();

注意,上面指定的位數(shù)僅為而不是,并且存在一個(gè)神秘的附加參數(shù)c=3,它滿足。是對(duì)深度d電路所需的估計(jì),而HElib中的總模數(shù)位數(shù)按大致獲得。(請(qǐng)參閱HElib文檔中有關(guān)密文與特殊素?cái)?shù)的討論,第5.1節(jié)。)

通過將c參數(shù)從其默認(rèn)值c=3增加,可以使相同功能的總位大小略小,但是密鑰大小和運(yùn)行時(shí)間會(huì)增加與c幾乎成線性關(guān)系。

設(shè)置完這些參數(shù)后,運(yùn)行HElib處理并檢查庫是否出現(xiàn)可能的解密錯(cuò)誤,并使用這些實(shí)驗(yàn)增加或減少位和m參數(shù)。您還應(yīng)該使用接口context.securityLevel()來檢查參數(shù)m,bits,precision和c的組合是否產(chǎn)生可接受的安全級(jí)別。

2.檢查這些參數(shù)確實(shí)產(chǎn)生所需的輸出精度。即運(yùn)行HElib處理的幾個(gè)實(shí)驗(yàn),使用可選的控制精度的參數(shù)(例如,使用ptxtArray類的接口ptxt.rawDecrypt(ctxt,secretKey))解密結(jié)果,并將結(jié)果與明文處理結(jié)果進(jìn)行比較。(這時(shí),您應(yīng)忽略HEib的任何有關(guān)增加的噪聲過小的警告。)重新檢查上述步驟1中的參數(shù),直到安全性和輸出精度均可接受為止。

3.接下來,檢查在解密之前HElib通過ctxt.errorBound()報(bào)告的錯(cuò)誤界限,與上一步中觀察到的實(shí)際錯(cuò)誤(大概不超過)有關(guān)。如果HElib估算值明顯大于實(shí)際噪聲,則在解密之前使用ctxt.bumpNoiseBound()強(qiáng)制HElib使用“正確估算值”。

4.此時(shí),您需要切換到使用ptxt.decrypt(ctxt,secretKey,p)并檢查HElib在解密時(shí)不再發(fā)出警告消息,說明添加的噪聲太小。如果仍然看到該警告,則需要重新訪問參數(shù)設(shè)置,增加bits參數(shù)(以及保持安全性和精度所需的其他參數(shù)),直到不再顯示此警告為止。

最后指出,此過程僅適用于威脅模型包括僅獲得少數(shù)解密結(jié)果的對(duì)手的情況。如果對(duì)手可獲得的有關(guān)解密查詢的信息總量大得多,則應(yīng)用程序需要從上方增加bits參數(shù)。特別是,為了抵御可以訪問D密文解密結(jié)果的攻擊,應(yīng)該將bits參數(shù)粗略地增加D倍,并且將輸入精度參數(shù)類似地增加到D(p+d)。

在HElib中,如果密文是使用庫的加密和計(jì)算例程生成的,則密文是有效的,并且不會(huì)包含太多噪聲。特別是,使用解密不應(yīng)發(fā)出有關(guān)“太多噪聲解密”的警告。

ptxtMagnitude和precision參數(shù)是可選的,默認(rèn)值取決于上下文和要加密的實(shí)際明文。重要的是,精度(如果指定)表示的是絕對(duì)數(shù)字,而不是明文大小的一小部分。例如,調(diào)用precision=3將產(chǎn)生1/8大小的錯(cuò)誤,無論調(diào)用ptxtMagnitude=16,還是ptxtMagnitude=1。最后請(qǐng)注意,精度參數(shù)也可以是負(fù)值,表示誤差幅度大于1。

THEEND

最新評(píng)論(評(píng)論僅代表用戶觀點(diǎn))

更多
暫無評(píng)論