商用區塊鏈的資訊安全
本文為讀者介紹幾種已經商業化使用的區塊鏈案例,包含Corda、以太坊(Ethereum)與超級帳本(Hyperledger)。
Corda安全性介紹
Corda 是專為商業案例設計的區塊鏈。 開發人員已經將 Java 環境作為一個虛擬機(JVM),以方便企業採用。
Corda 區塊鏈具有以下屬性:
- 私有的網路隱私性
- 許可制網路
- 使用X.509認證進行身份驗證
- 可插拔的共識演算法
Corda的分佈式帳本
Corda 的分佈式帳本與大多數區塊鏈的不同之處在於,區塊鍊網路中沒有人可以看到帳本的全部資料。 對資料的檢視是在need-to-know的基礎上進行的,只有參與到交易的各方才能看到資料。
從它的角度來看,區塊鏈網路中的每個節點都保存著自己的當前狀態的分佈式帳本副本。 節點的帳本由多個不可變的狀態鏈(交易的輸入和輸出)組成。 狀態會由交易來消耗和產生,每個節點都保留其所有狀態的現況和歷史版本的完整資料。
Corda的智慧合約
Corda 是一個圍繞 Java 環境構建的智慧合約平台。 它使用 Java VM,合約可以用 Java 或 Kotlin 開發。
Corda 中的每個狀態都由智慧合約管理。 智慧合約將涉及其狀態的交易作為輸入,並根據智慧合約中編碼規則確認交易是否有效。
Corda 中的交易必須被確定為唯一且有效才能被認可。 交易的有效性由參與交易的各方確定。 為了讓交易有效,它必須能夠:
- 交易的各方都需要簽署交易
- 具有合約效力
- 輸入的狀態可以一路驗證回創世區塊
交易的唯一性是因為我們要驗證交易狀態沒有雙重花費。 Corda 中的節點只能看到交易和它們參與的狀態,因此節點無法驗證交易的唯一性(因為它們不會成為雙重花費交易的參與方)。
為了解決這個問題,Corda 區塊鏈有一個公證人網路,公證人必須簽署交易才能生效。 每個節點的分佈式帳本副本中的每個狀態都有一個指定的公證人,並且公證人只會批准一個交易,它是所有輸入狀態的指定公證人。 如果一開始沒有指定公證人,交易還是可以執行,然後事後更改狀態公證人。 一旦公證人擁有所有狀態的所有權,他們就會驗證交易的唯一性並對其進行簽章。
Corda的安全機制
Corda 的安全性主要基於其need-to-know的機制和公證人網路。 由於使用者只能看到跟他們有關的交易並與之互動,因此會降低資料外洩的潛在影響會。 Corda 還使用point-to-point TLS 加密通訊,而不是像其他區塊鏈那樣的peer-to-peer broadcasts。
Corda 安全性很依賴公證人機制。 如果指定的公證人拒絕轉移或簽署,Corda 中的資產和交易可能會被公證人扣為人質。 惡意公證人可以允許雙重花費攻擊,並使區塊鏈節點之間無法協調。 如果實施 Corda 區塊鏈,公證人的信任和安全性至關重要。
以太坊資安簡介
以太坊是第一個智慧合約平台,主要讓開發人員訪問區塊鏈上的圖靈完備平台,並將應用程式開發為智慧合約。 以太坊網路具有以下屬性:
- 沒有網路隱私
- 非許可制
- 使用公鑰方式作為身分驗證
- 共識協議現行是PoW,之後將移到PoS
以太坊的分佈式帳本
以太坊的分佈式帳本包含一組tree:
- State Tree: 在以太坊網路中每一個帳號都有value pairs。其中value是帳號的nonce、blanace、storage root和code hash(如果是智慧合約帳號)
- Storage Trees:每個帳號的智慧合約的資料存儲
- Transaction Trees:特定區塊交易的 Merkle tree
- Receipts Trees: 包含特定區塊中每筆交易的 gas 使用量、logs、Bloom filter和status code
區塊鏈上的每個區塊都包含當前版本state tree的root hash值以及區塊的交易和Receipts Trees。 這允許區塊鏈在建立區塊時驗證分佈式帳本的狀態。
以太坊的智慧合約
以太坊智慧合約在以太坊虛擬機中運行。 合約是用 Solidity 開發語言編寫的,以太坊虛擬機中的每條指令都有一個相關的 gas 值。 為了執行智能合約,交易包括一定量的gas(我們可以視為手續費,而這也是以太幣的一部分),用於支付執行代碼所要花費的代價(因為要請所有的節點驗證這一筆交易)。 如果一筆交易包含的 gas (手續費)不夠就無法完成,則整個交易將被撤銷(也就是無法完成交易)。
以太坊虛擬機目前不支持平行化執行,這意味著一個區塊中的所有交易都是按排隊一筆一筆來交易的。 但是,如果以太坊實現分片(sharding),這可能會在未來發生變化,這讓與分佈式帳本狀態的不同部分交互的交易能同時執行。
以太坊的安全機制
目前,以太坊對隱私或安全的內建支援有限。 主要的內建功能是使用公鑰進行身份管理,因為它們為使用者提供了一定程度的偽匿名性。 但是,高階安全功能(如秘密交易)可以在以太坊中用智慧合約實現。 此外,以太坊的未來發展計劃包括對 zkSNARKS 等zero-knowledge proofs(零知識證明)使用的數學運算的支援。
超級帳本的資安簡介
超級帳本(Hyperledger) 是一個智慧合約平台,最初由 IBM 構建,目前由 Linux 基金會維護。 它主要是成為企業的區塊鏈平台,含有能夠其實現這一目標的功能。
超級帳本區塊鏈具有以下屬性:
- 私有的網路隱私性
- 許可制網路
- 使用X.509認證進行身份驗證
- 可插拔的共識演算法
超級帳本的分佈式帳本
超級帳本是基於通道(channels)原理構建的。 超級帳本中的每個通道都是一個完全不同的區塊鏈,有自己的分佈散式帳本,只有同一個通道成員可已看到。 這種架構允許多個區塊鏈網路(也就是多個帳本)在同一個節點上運作。
超級帳本的分佈式帳本包含兩個組件:
- 交易日誌(transaction log): 在特定通道內執行的所有交易
- 全域狀態(World State): 每一次交易都有快照資料
超級帳本中的智慧合約通常只與 全域狀態組件互動。 其目的是通過將當前狀態作為value pair存儲在資料庫中,從而省去合約需要在整個區塊鏈中搜尋必要資訊的問題。
超級帳本的智慧合約
超級帳本的智慧合約(或稱chaincode)可以在 Node.js 或 Go 中開發並在 Docker 容器中運作。 它們是分佈式帳本與外部應用程式運作的介面。 超級帳本採用與以太坊等智慧合約平台不太ㄧ樣的交易驗證和執行方法。 它遵循 Execute、Order、Validate 等控制流程:
- Execute: 節點執行代碼,檢查其正確性,如果正確則對其進行背書
- Order:使用共識協議將交易組織成區塊
- Validate:確保交易符合背書政策.每筆交易都可以有一組必要的背書人(threshold、某些用戶等),並且只有在滿足要求時才會被認可.
在超級帳本中使用控制流程有著以下的效益:
- 平行化(Parallelization): 在執行階段,是同時多筆交易能被平行運作的確認.而不是一筆一筆的排序進行.
- 專業化(Specialization): 因為Order跟Validate是完全不同的階段,所以網路上的節點只會是這個階段的其中一種角色.
智慧合約主要是要吸引商業用戶,因為代碼可以通過專門的節點進行有效測試和排序,並且可以編寫背書政策來滿足業務需求。
超級帳本的安全機制
超級帳本具有一些主要在提高其商業案例的安全性功能:
- 可插拔的身份驗證管理:支援傳統的LDAP 與 OpenID的身份驗證系統連結
- 通道架構:不同邏輯的區塊鏈,能夠根據工作角色的要求讓同一個節點作業於多個通道(也就是多個帳本)
- 私有資料:使用 gossip 協議進行資料交換,這個協議只發送到需要知道(need-to-know)的節點,並存儲在off-chain中不同的資料庫.
最後下圖為三種區塊鏈之間的各項比較表: