Hyperledger Fabric 隱私保護

Hyperledger Fabric 隱私保護

分佈式賬本可以幫助多個成員進行數據共享和協作,因此,隱私保護(如哪些數據可以被誰讀寫)就成了十分關鍵的問題。

目前,Fabric通過多種技術手段在不同層級上分別進行隱私保護,包括如下幾種機制:

●通道機制,網絡內同時存在多個通道,各個通道之間數據彼此隔離。

●私密數據庫,在同一通道內實現對私密交易內容的保護。

●數據加密保護,在數據上鍊之前進行客戶端加密,實現對鏈上數據的保護。

通道機制

通道機制是Fabric中最基礎的數據保護方案。每個通道都擁有自己獨有的賬本、組織、Peer、Orderer、Gossip域。不同通道內數據彼此隔離,實現隱私保護。

組織身份屬於通道成員是該組織節點可以參與通道活動的前提。組織最新的根CA證書和根TLS CA證書都必須保存在通道配置內,以被其他組織認可。證書過期之前,需要進行證書的更新工作。

只有加入通道共識組的排序節點纔可以參與通道內的共識過程,每個通道可以自行添加或刪除合法的排序節點,這些排序節點構建內部的Raft集羣來動態選舉和分發數據。排序節點一旦從通道內刪除後,會通過探測機制發現變更,該節點將不再主動參與通道內的活動。排序節點也會通過系統通道配置的變化來判斷自己所負責的應用通道。

Peer節點要加入通道中還必須擁有該通道的初始區塊。Peer節點會從中解析出維護該通道的排序服務地址(可通過選項覆蓋),並從排序服務拉取完整的區塊鏈結構,構建本地賬本。構建完成後,Peer會通過Gossip協議在通道範圍內獲取新的數據,並更新本地狀態。通道目前無法單獨移除特定Peer節點,但Peer節點自身可以選擇不再處理某通道的業務。

需要注意的是,通道一旦創建後無法自動刪除(可以通過刪除所有組織證書和節點信息來禁用通道),會佔據節點本地存儲。同時,通道的共識過程會消耗排序節點計算資源,因此要避免同時存在過多通道。


私有數據

私密數據庫是自1.1版本開始引入的特性,在通道的隔離性基礎上提供了更細粒度的控制。該特性允許在同一個通道內的若干成員組織構成一個集合(Collection),合法Peer只在集合策略指定的成員之間分發Gossip私密數據,並且可以指定私密數據的存活時間。通道內交易中的私密數據讀寫集在公共賬本上只包括摘要內容,排序節點無法獲知私密數據。

在背書階段,用戶將包括私密數據(通過transient域)的交易提案發給特定Peer節點,然後該Peer節點將私密數據分發給合法的N個Peer節點(requiredPeerCount≤N≤maxPeerCount),這些節點會將私密數據保存在本地的臨時數據庫。在提交階段,Peer節點會記錄私密數據到本地的私密狀態數據庫中,並清理臨時數據庫中記錄(CORE_PEER_GOSSIP_PVTDATA_TRANSIENTSTOREMAXBLOCKRETENTION中指定)。這樣,私密數據的原文只在規定組織內的Peer上存在,其他節點只能看到有交易被提交,但無法獲知原文。

私密數據典型的應用場景爲,在批准和提交鏈碼定義時指定私密數據集合,之後在鏈碼中將私密數據放到指定集合中,只有通過集合相關的API才能讀寫集合內的私密數據。示例代碼如下:

$ peer chaincode instantiate \
    -o ${ORDERER_URL} \
    -C ${channel} \
    -n ${name} \
    -v ${version} \
    -c ${args} \
    -P "${policy}" \
    --collections-config "${collection_config_file}"

其中,在集合配置文件中可以指定哪些組織成員可以訪問,還可以指定分發策略、存活時間、權限和背書策略等,示例代碼如下:

[
 {
    "name": "collection1",
    "policy": "OR('Org1MSP.member', 'Org2MSP.member')",
    "requiredPeerCount": 1,
    "maxPeerCount": 3,
    "blockToLive":99999,
    "memberOnlyRead": true,
    "memberOnlyWrite": true,
    "endorsementPolicy": { 
     "signaturePolicy": "OR('Org1MSP.member')" 
     // "channelConfigPolicy": "Channel/Application/Writers"
    }
 }
]

注意:集合配置可以通過鏈碼升級操作進行更新,但注意無法刪除已定義的集合,並且集合的blockToLive域不支持更新。


加密保護

用戶可以在鏈碼內通過加密機制來實現自定義的保護。由於Fabric支持圖靈完備的鏈碼,用戶可以在鏈外將上鍊數據進行加密,讀取數據後在鏈下進行解密。這種方式提供了較高的獨立隱私性,因爲只有線下用戶可以看到數據原文。但要注意對加密密鑰的保護。

如果用戶希望鏈碼可以自行完成加密和解密過程,則可在發送交易提案請求時使用transient域來提供鍵值明文和加密密鑰,確保只有加密後的結果被記錄到賬本。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章