c.把多個信封放在皮夾裡後,信封會在不拆開的情況下兩兩合併,最後變成一個信封,裡面裝的錢正好是合併前所有信封金額的總和。
你把信封和膠水分發給所有租客,把皮夾交給代理人。
到了約定交租的日子,租客把租金放到信封裡密封后交給代理人;代理人收齊信封,放到皮夾中,最後得到一個裝滿所有租金的信封,再轉交給你;你使用神奇剪刀拆開,拿到租金。
在這個場景中,信封的a、b兩個性質其實就是公鑰加密的特性,即使用公鑰加密得到的密文只有掌握私鑰的人能夠解密,並且密文不會洩露明文的語義資訊;而c則代表加法同態的特性,兩個密文可以進行計算,得到的結果解密後正好是兩個原始明文的和。
到此,同態加密的全貌已經呼之欲出:
· 同態加密本質是一種公鑰加密方案,即加密使用公鑰pk,解密使用私鑰sk;
· 同態加密支援密文計算,即由相同公鑰加密生成的密文執行f()函式的同態操作,生成的新密文解密後恰好等於兩個原始明文計算f()函式的結果;
· 同態加密公式描述如下:
同態加密可分為全同態加密(FHE,Fully Homomorphic Encryption)和半同態加密(SWHE,Somewhat Homomorphic Encryption)。
FHE顧名思義就是支援任意給定的f()函式,不過由於計算開銷極大,目前學術界還沒有一個實用型的FHE方案;SWHE只支援一些特定的f()函式,例如加法或者乘法等,由於開銷小,在工業界尤其是雲端計算領域已有不少的應用。
FISCO BCOS技術選型
在聯盟鏈中,考慮到監管需求,鏈上機構可能需要將應用中的一些隱私資料上鍊,如營收賬目、產品流量等。為了不洩露機密,機構可以使用監管方的公鑰對這些資訊進行加密,加密後,資訊統計可交由代理機構完成。在這種場景下,由於需要針對密文進行計算,同態加密便可大展身手。
FISCO BCOS透過整合同態加密,為使用者提供一種支援密文處理的隱私保護工具。加解密會暴露明文資料,基於安全性考量,只適合在鏈下完成,鏈上只保留同態運算介面,加解密介面則以獨立演算法庫的形式提供給應用層。
在同態加密方案的選擇上,出於對計算開銷的考慮,首選輕量級加法同態方案;鑑於區塊鏈儲存資源有限,密文不能太大,可對齊標準的RSA加密演算法。
綜合上述兩點,我們選擇了兼具以上特性的加法同態方案Paillier《Public-Key Cryptosystems Based on Composite Degree Residuosity Classes》,該方案由Paillier於1999年在歐密會(EUROCRYPT)上提出。
Paillier方案的實驗分析如下:
其中公私鑰對透過RSA金鑰生成演算法得到,從上表中可以看到各項開銷和秘鑰長度正相關。目前1024位的RSA金鑰已經不再安全,推薦使用2048位及以上的金鑰。
如何在FISCO BCOS中使用同態加密
FISCO BCOS 2.3版本以預編譯合約的形式整合了Paillier方案的密文同態加法介面。要啟用同態加密功能需要開啟CRYPTO_EXTENSION編譯選項,並重新編譯原始碼。同態加密預編譯合約地址分配如下:
要完成預編譯合約的呼叫,首先需要以Solidity合約方式宣告合約介面。
// PaillierPrecompiled.sol
pragma solidity ^0.4.24;
contract PaillierPrecompiled{
function paillierAdd(string cipher1, string cipher2) public constant returns(string);
}
然後可在業務合約中透過地址例項化預編譯合約物件以完成同態加介面的呼叫。
// CallPaillier.sol
pragma solidity ^0.4.24;
import "./PaillierPrecompiled.sol";
contract CallPaillier {
PaillierPrecompiled paillier;
constructor() public
{
// 例項化PaillierPrecompiled合約
paillier = PaillierPrecompiled(0x5003);
}
function add(string cipher1, string cipher2) public constant
returns(string)
{
return paillier.paillierAdd(cipher1, cipher2);
}
}
Paillier方案中的公私鑰生成、加解密介面以獨立的密碼庫提供給開發者。目前密碼庫內包含了一個Java語言的完整版Paillier方案,以及一個供預編譯合約呼叫的C語言版同態加介面。
密碼庫地址如下:
https://github.com/FISCO-BCOS/paillier-lib
未來改進的方向
開發者當下可觸達的同態加密演算法庫只有Java版本,未來根據實際需求,我們將對齊FISCO BCOS的SDK語言種類,提供多語言版本的同態加密庫。
同態加密一直是密碼學界難題,要實現全同態加密計算,在效能和可用性上還存在很大挑戰,FISCO BCOS將持續關注該領域的技術進展。
結語
安全之道修遠兮,FISCO BCOS將上下求索。目前,FISCO BCOS已配置包括群簽名、環簽名、同態加密等多種密碼學工具,接下來將實現和整合面向特定場景的定製化隱私保護解決方案。
歡迎大家一起使用和關注同態加密技術在隱私保護場景的應用,共同探討交流,積極反饋、共建更為安全可靠的FISCO BCOS平臺。