免責聲明:本文旨在傳遞更多市場信息,不構成任何投資建議。文章僅代表作者觀點,不代表火星財經官方立場。
小編:記得關注哦
來源:碳鏈價值
原文標題:隱私計算+區塊鏈:一次具體場景下的詳細應用
在本文中,我們假設了一個非常具體的業務場景,在這個場景中說明應用隱私計算的詳細過程,以及區塊鏈在其中扮演的作用。
編者按:本文轉自公眾號「一個洋蔥」
作者:繆弘、毛葦
目前的人工智慧模型大多依賴海量數據的訓練,對於海量數據的需求導致了數據隱私問題的泛濫。而隱私計算可以實現在不聚合海量數據的前提下利用分散在多方的數據完成聚合計算和模型訓練,保證整個過程中每一方的數據都不會暴露出來,是大數據時代解決隱私問題的關鍵。在本文中,我們假設了一個非常具體的業務場景,在這個場景中說明應用隱私計算的詳細過程,以及區塊鏈在其中扮演的作用。
隱私計算是一類技術的統稱,其中包括安全多方計算、零知識證明、聯邦學習等。近年來,學術界對於隱私計算相關算法的研究有了長足的進步,也發展出了許多成熟的、高效的改進模型。我們研究了其中的一些模型框架,並且將這些框架嘗試應用於企業信息整合方面的實踐。
場景假設
我們假設這樣一個場景:每個企業有一個本地部署的信息中心。信息中心存儲了企業內部文檔、企業從外部獲取的市場信息、團隊成員之間的交流討論等數據。信息中心還集成了一個區塊鏈的節點,通過區塊鏈網絡實現受控的跨企業信息分享和協作。
在這樣的場景下,我們可以通過信息中心的數據計算出企業內部的最熱話題,代表著這家企業當下所關注的重點領域、新技術、發展趨勢等等。信息中心的數據涉及到企業的隱私,絕對不能對外洩露。而另一方面,同一個行業的企業都想知道整個行業的大趨勢,大家都在關注哪些事情,有什麼熱點事件,哪個技術現在大家應用的最多,等等。
這裡就有了隱私計算發揮作用的地方,在保證企業內部信息不外露的情況下,聯合所有企業的信息中心,通過區塊鏈網絡協調,完成全局的熱點話題計算,並將計算結果公開給參與計算的企業使用。
舉一個具體的例子:每個企業節點已經計算出了企業內部的最熱話題排行,和每個話題的熱度評分,我們需要在不暴露每個企業內部的最熱話題和評分的情況下,對多個企業的話題評分進行累加,最後得到全局的話題熱度排行。
比如,有三家企業部署了信息中心,在企業內部計算得到的熱點話題和熱度評分如下:
企業A:人工智慧(90),大數據(45),健康(21),金融(10)
企業B:大數據(87),數據分析(55),交易(32),新聞(21)
企業C:PHP(80),Java(70),大數據(54),人工智慧(31)
我們要基於上面的數據進行累加,得到全局的熱點話題排行榜:
大數據(186),人工智慧(121),PHP(80),Java(70)
並且最重要的是,在整個計算過程中,要保證企業A、B、C各自的熱點話題和評分不對外暴露。
簡化的問題:多節點安全數字求和
我們先考慮一個簡化的問題:多節點安全數字求和。假設有N(N>2)個節點,各個節點都知道彼此的存在,且可以互相通信;每個節點都持有一個隱私的數字,這N個節點想要求得這些隱私的數字的和,同時不希望暴露自己持有的隱私數字。
這個簡化的場景相對與原始場景,不需要考慮節點之間的通信問題,且每個節點只持有一個數,不需要考慮多個熱門話題的對齊問題,問題簡化為,如何在不洩露隱私數據的前提下,得到所有節點的持有數字之和的問題。
我們使用安全多方計算(MPC)的方法來解決這個問題。在使用安全三方計算協議(例如ABY3、SecureNN等)的情況下,如果只有3個節點(N=3),那麼能直接通過安全三方計算協議得到所有節點持有數字之和。但是,當節點數大於3個時(N>3),我們就無法直接通過安全三方計算協議得到最後的結果了,需要在安全三方計算協議的基礎上,進行進一步的算法設計(最新的研究已經有了支持任意多方安全計算的協議,比如SPDZ,但是出於工程化和方便使用的角度,我們採用了三方協議來實現這個功能)。
算法的具體步驟如下:
該算法的正確性是顯然的,現在我們要確保的是算法的安全性,即算法中各個節點間的隱私數據沒有被洩露:
算法第3步中,使用安全三方計算協議,保證了兩個節點進行求和的數字沒有洩露到外部,只有最後求和的結果暴露到了外部算法第3步中進行求和的數,只是原始隱私數字的一個拆分,進行求和計算的配對方也只能反推出這個拆分,無法得到原始的隱私數字算法第4步中,第3步的N個求和結果都暴露了出來,可以得到N條方程,共2N個未知數。每個節點只知道自身的兩個拆分數,所以對每個節點來說,共有2N-2個未知數。當2N-2>N,即N>2時,方程組沒有確定解,所以各個節點的隱私數字也沒有洩露更進一步:多節點安全的熱門話題聚合
現在我們考慮一個更複雜一點的問題,將上一小節中的計算單個數字的和,變為計算多個節點的熱門話題的聚合。熱門話題的聚合相比於計算單個數字的和,每個節點可以有多個話題,且每個節點之間的話題可以不相同。例如,節點A有熱門話題1、2,節點B有熱門話題2,3,節點C有熱門話題1、3、4,現在需要得到這三個節點上熱門話題1、2、3、4、5 的熱度值。
由於每個節點持有的話題並不相同,想要進行多方的熱門話題聚合,首先需要對話題進行同步。對話題進行同步,最簡單的就是各個節點將自身的熱門話題公開出來,但是處於隱私保護的考慮,各個節點不想公開自己有哪些熱門話題。這種情況下,我們需要另一種方法,在不洩露各個節點的熱門話題情況下,完成熱門話題的同步。
對於這種情況,我們可以使用這種方法:
各個節點使用同一種方法,將熱門話題映射到一個整數域[0, Z]上各個節點將熱門話題的熱度值,填到話題對應的維度上,得到一個長度為Z的話題熱度向量各個節點無需將各自的熱門話題公布出來,只需要對話題熱度向量,按照上一小節的算法,進行安全多方計算即可上述這種方法,將在節點間同步各自持有的熱門話題,改為了在節點間同步一個熱門話題到整數的映射函數。可以將這個熱門話題到證書的映射函數看作是一種加密方法,各個節點之間只暴露加密過的熱門話題,只要這個映射函數是不可逆的,就能避免明文暴露自己的話題。
在這個問題中,我們可以選用一種哈希函數,將熱門話題映射為一個整數。同時,將整數的範圍設定的比較大,防止不同節點間產生哈希碰撞。各個節點同步完哈希函數之後,可以將自己持有的多個話題的熱度轉化為一個定長的話題熱度向量,各個節點的話題向量長度一致,可以按照上一小節的算法,進行安全多方計算。
在各個節點安全多方計算、得到話題向量的和之後,就可以得到最熱門的幾個話題的維度和熱度值了。這時我們需要從熱門話題的維度,得到對應的熱門話題。因為哈希函數是不可逆的,所以需要各個節點將它們知道的熱門話題公開出來,這樣所有節點就都能知道完整的熱門話題了。同時,每個節點只公開了自己持有的熱門話題,並不會暴露其他非熱門的話題,保證了數據的隱私。
實際場景
現在我們考慮實際的場景。在上一小節的場景中,我們假設各個節點之間是互相知道彼此的,可以互相通信。同時之前的算法還蘊含了一個假設,即存在一個各個節點都信任的第三方,幫助節點間實現配對、哈希函數的同步、最後熱門話題的公開等操作。但是在實際的場景下,並不滿足這些條件,各個節點間可能並不知道彼此,也不存在一個各個節點都信任的第三方。這時想要實現多節點的熱門話題聚合,需要藉助區塊鏈,來在多個節點間進行協調。
通過之前的算法,我們可以看出,區塊鏈需要幫助實現以下的功能:
各個節點間的互相發現節點間計算配對的協調節點使用的哈希函數的協調各個節點計算結果的公開我們可以通過智能合約,在區塊鏈上實現這些功能:
在區塊鏈上部署一個智能合約,各個節點都可以執行這個合約的方法合約提供一個上報節點信息的方法,節點將自身的通訊地址、名字、等信息上報上去合約提供一個上報哈希函數的方法,節點將自己支持的哈希函數通過該方法上報到鏈上合約提供一個開始方法,當開始方法被調用時,會觸發一個計算開始的事件,各個節點可以監聽這個事件合約提供一個獲取配對節點的方法,當計算開始後,節點可以通過這個方法,請求得到其配對的節點信息合約提供一個獲取哈希函數的方法,節點可以通過這個方法,得到其需要使用的哈希函數合約提供一個提交計算結果的方法,各個節點完成自己的計算後,可以通過這個方法,將結果上傳上鏈當所有節點都提交其計算結果後,合約會觸發一個計算結束的事件,各個節點可以監聽這個事件合約提供一個獲取當前輪次全部計算結果的數據,當計算結束後,節點可以通過該方法獲得所有的計算結果合約提供一個上傳熱門話題對應關係的方法,節點可以在得到最終的熱門話題後,通過該方法將自身的已知的熱門話題上傳上鏈合約提供一個查詢熱門話題對應關係的方法,可以查詢得到其未知的熱門話題(前提是別的節點上傳過了)由此,我們通過結合區塊鏈與安全多方計算,就可以在實際場景下,實現多個企業平臺的安全的熱門話題聚合了。整體流程如下:
首先由一個節點在鏈上部署智能合約,實現上述的功能參與的節點調用合約的方法,上報自己的節點信息、支持的哈希函數,並開始監聽計算開始與計算結束事件某一個節點可以調用合約的開始方法,開始一輪計算各個節點收到計算開始事件後,向合約請求統一的哈希方法,並用得到的哈希方法,將自身的熱門話題與熱度轉換為熱門話題向量,並將熱門話題向量拆分為兩個子向量各個節點向合約請求這輪計算中與其配對的節點信息,根據配對的信息配置,啟動對應的計算節點。例如:4個節點A、B、C、D,節點A會收到3個配對信息,分別為(A,B)和輔助節點C,(C,D)和輔助節點A,以及(D,A)和輔助節點B;節點A則啟動兩個計算節點,一個輔助節點,兩個計算節點分別持有兩個拆分的熱門話題向量,與配對的節點進行通信,完成計算節點的計算完成後,將得到結果通過合約提供的方法提交上去。為了防止計算結果的重複提交,我們可以在上一步的配置中約定好提交的節點。例如,配對(A,B)中,A提交計算結果,配對(D,A)中,D提交計算結果當所有節點都提交了計算結果後,智能合約會發布計算結束事件。節點監聽到計算結束事件後,從合約中獲取這一輪計算的全部結果,本地進行聚合,得到最終的熱門話題向量各個節點將自己已知的最熱門話題上報給合約,同時查詢未知的話題,就能得到最終的熱門話題及熱度了總結
我們通過區塊鏈和安全多方計算技術實現了多個企業節點數據不公開的前提下計算全局的最熱話題排行。安全多方計算技術提供了多個節點間進行數據聚合計算的功能,而區塊鏈在其中起到了計算協調和部分可信性保證的作用。
說到計算過程的可信性保證,仍然是目前的一個開放問題。用我們的全局最熱話題功能來舉例:由於最熱話題的來源是企業內部未公開的文章、討論等內容,並且我們無法看到最原始的文章、討論等數據,那我們如何相信最後拿到的全局熱度排行是可信的?
如果有一個節點在參與計算的過程中,不斷的上報錯誤數據幹擾計算結果怎麼辦?甚至是說,企業可以在信息中心內不斷提交隨機的文章和評論,來幹擾計算結果。這樣的情況下,我們如何相信最後的熱度排行的正確性?
上述的兩種情況,可以被總結成兩個可信性問題:
數據來源可信計算過程可信對於第2個問題,我們可以在計算過程中嵌入零知識證明,來保證節點在計算過程中無法篡改數據。而第1個問題,目前似乎也沒有完美的解法,針對信息中心的場景,我們只能要求企業不斷在區塊鏈上提交內容存證,然後在計算時證明自己使用的數據是之前存證的數據,這種方法可以提高企業的作惡成本,在一定程度上解決這個問題。
在整個功能的實現過程中,我們測試了多個國內外的MPC的開源框架,比如PySyft、百度的Paddle-FL、微眾的FATE、矩陣元的Rosetta等,最終使用矩陣元的Rosetta完成了MPC部分的開發,在這裡我們對各位隱私計算開源貢獻者表示感謝:
https://github.com/LatticeX-Foundation/Rosetta
對於MPC相關模型和工具的介紹,我們推薦下面這個repo:
https://github.com/mpc-sok/frameworks/wiki