鏈上密文參與計算?同態加密盡顯神通 | FISCO BCOS隱私特性

買賣虛擬貨幣
前言作為分散式系統,一方面區塊鏈透過資料的共享、共治以及協作處理,充分發揮資料價值。而另一方面,由於資源和隱私的限制,區塊鏈只適合儲存最輕、最有必要、無隱私風險的資料,如雜湊、後設資料的密文等。資料可用性和隱私性之間的矛盾,在區塊鏈中愈發明顯。常言:“魚與熊掌不可兼得”,但是專治疑難雜症的密碼學家們不答應,提出了一種密文也能參與計算的方案——同態加密(HE,Homomorphic Encryption)。本文將解釋同態加密的定義以及在FISCO BCOS中的技術實現。什麼是同態加密同態加密是上世紀七十年代就被提出的一個開放問題,旨在不暴露資料的情況下完成對資料的處理,關注的是資料處理安全。
想象一下這樣一個場景,作為一名滿懷理想的樓二代,你每天過著枯燥乏味的收租生活,希望擺脫世俗的枷鎖、銅臭的苟且去追求詩與遠方。你需要僱一個代理人去承擔收租的粗活,但又不希望其窺探你每月躺賺的收入。於是,你請高人打造了一套裝備,既能保證代理人順利完成收租,又不會洩露收入資訊。這套裝備包括信封、膠水、皮夾和神奇剪刀,每一樣東西都有奇特的功能:a.信封一旦用膠水密封,只有神奇剪刀才能拆開。b.不論信封裡裝了多少錢,信封的大小和重量都不會發生改變。

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平臺。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;