區塊鏈的進階安全機制
本文的內容是讓讀者了解用於提高區塊鏈隱私性和安全性的架構與加密解決方案。
架構資訊安全的方法
區塊鏈的設計和實現通常並不會完全相同。 某些設計決策可以提高區塊鏈對某些攻擊的韌性。
許可式區塊鏈
最初的區塊鏈被設計為對所有人是公開的所以並沒有存取控制。區塊鏈是完全去中心化和開放的:任何人都可以成為區塊鏈的使用者,並且所有使用者在區塊鏈上擁有的權力是相同的。
許可制區塊鏈具有內建的存取控制機制。一個許可制區塊鏈將有一個或多個MSP(Membership Service Provider) 節點來處理區塊鏈上的驗證、授權和身份管理。這允許區塊鏈開發人員和使用者根據具體情況提供對區塊鏈上的資料和功能的存取做出限制。
許可制區塊鏈的安全性是基於區塊鏈 MSP 的安全性。由於這些節點可以完全控制使用者可以存取區塊鏈以及可以進行那些作業,因此 MSP 節點的淪陷可能會危及整體區塊鏈的安全性。 MSP 也可能成為對區塊鏈的DoS攻擊的目標,因為沒有MSP,使用者就甚麼事也做不了。
檢查點(Checkpoints)
在理想世界中,區塊鏈網路將對每個區塊的內容達成共識。現實中,由於善意和惡意原因,可能會出現不同的區塊鏈版本。區塊鏈協議主要接受支持它的“作業”(以PoW來說就是算力最多最久的)最多的區塊鏈。
攻擊者可以利用此協議,他們故意建立一個不同的區塊鏈版本並將其構建為比正確的區塊鏈擁有更多的作業(如 51% 攻擊)。檢查點主要在通過讓節點定期在接受鏈上存儲一個區塊並拒絕接受任何不包含該區塊的分歧鏈來阻止這種類型的攻擊。
檢查點的主要問題是如果不是中心化,要不然就是有分裂網路的風險(因為去中心化)。如果節點建立自己的檢查點(去中心化方式),他們可能會選擇不同區塊鏈上的區塊並拒絕切換到正確的版本,從而分裂整個區塊鏈網路。如果單一節點或一起作業的群組節點負責建立和發送檢查點,哪這類的方式就是中心化的作法。
進階的密碼學解決方案
區塊鏈是使用加密演算法建立的,以確保安全和隱私。 隨著時間的推移,已經有了額外的基於密碼學的解決方案來增加區塊鏈的隱私和(或)安全性。
多重簽章(Multisignatures)
區塊鏈使用數位簽章來確保交易的真實性和完整性;但是,數位簽章只能驗證一個人。如果交易需要多個驗證者,每個驗證者都必須加上自己的簽章,這可能會變得非常龐大。多重簽章也是一種數位簽章,需要多個私鑰來產生一個有效的數位簽章,讓多個人批准交易。
多重簽章使用 SSS(Shamir Secret Sharing)實現的,它基於以下原則:我們需要一定數量的points來定義特定度數的線(即兩個用於直線,三個用於拋物線等)。SSS 將shared secret key 編碼為 K 度曲線的 y 截距,並將曲線上的point(就是secret)提供給每個潛在的簽章者。如果 K 個不同的簽章者使用他們的(secret)就是他們的point產生他們自己的部分簽章並將它們組合起來,它就會組成一個有效的數位簽章。簽章者的數量 K 可以是任意數量,並且可以是群組的子集(K of N)。
零知識證明(Zero-Knowledge Proofs)
零知識證明(ZKP)是為我們知道一個secret並想向某人證明我們知道它但不會洩露它而設計的。 這在分佈式帳本公開的區塊鏈上非常有用,因為使用者可以通過在區塊鏈上發布一群的secret的 ZKP 來證明他們是群組的成員,從而確認他們知道它而會不洩露它。
一個零知識證明範例來證明紅色球和綠色球對於色盲的人來說是不同的顏色,如下所呈現:
- 找到兩個除了顏色之外(紅色和綠色)完全一樣的球
- 色盲者將這兩個球藏起來不讓驗證者看到
- 色盲者將其中一個球(可能是紅色也可能是綠色)拿出來給驗證者看,然後再把它藏起來
- 色盲者向驗證者再展示另一個球(可能是紅色也可能是綠色)
- 驗證者告訴色盲者他們這兩次的展示是不是同一個球
這個驗證的目的是證明紅色和綠色是不同的顏色,而不講哪個球是紅色的,哪個是綠色的。 如果球的大小是相同的(去除顏色的分別),那麼驗證者可以始終正確回答的唯一方法是紅色和綠色是否不同。 雖然他們有 50/50 的機會個別獨立的猜測是否正確,但如果多次重複測試,哪麼正確猜測的概率會迅速降低。
隱形地址(Stealth Address)
隱形地址是區塊鏈上一種特殊類型的地址(已加密貨幣來說就是錢包),這要是隱藏交易的接收者。 交易接收者公開發布一種特殊類型的公共地址,供使用者在向他們產生交易時使用。 交易發送者使用這個地址來運算一個唯一且是一次性地址和稱為tag的information bit。 然後,交易發送人可以將交易發佈到包含這個tag的一次性或隱形地址。 使用來自地址和tag的資訊,交易接收者可以識別發佈到區塊鏈的交易是否是針對他們的,並相應地更新他們的帳號。
環形簽章(Ring Signatures)
環形簽章主要在通過產生有效的數位簽章來隱藏交易的發送者,該簽章可以被驗證為來自交易中包含的一組公鑰中其中的一個。 為此,發送者選擇一組誘餌(decoy)公鑰並製作一個數位簽章,該簽章只有在簽名者知道至少一個屬於該群組的私鑰但不會透露它是哪個公鑰的情況下才能建立。
誘餌簽章的安全性基於公鑰密碼學的安全性。 環形簽章方程式的設計使得解決它們要嘛涉及解決公鑰密碼算法的“hard”problem(這應該是不可能的),要嘛用方程式來計算從私鑰中的公鑰來代替公鑰本身。
秘密交易
這主要是讓不想透露交易內容的情況下驗證交易是否合法。 這是通過證明交易內容在一組的values內來實現的,所有這些values都可能是有效的交易(即小於使用者帳戶中的金額)。
秘密交易利用了幾種不同的加密操作:
同態加密(Homomorphic Encryption)
允許對加密資料進行算術運算,但全同態加密是緩慢跟效率很差的
- 加法同態(Additive Homomorphism):加密資料之和是未加密資料之和的加密.例如: A+B=C , E(A)+E(B)=E(C)
- 乘法同態(Multiplicative Homomorphism):加密資料的乘積是未加密資料乘積的加密(RSA是乘法同態).例如 A*B=C, E(A)*E(B)=E(C)
ECC(Elliptic Curve Cryptography)
一種使用橢圓曲線上的點作為公鑰的公鑰密碼術形式.這是一種加法同態
- Pederson Commitments:鎖定資料中的value,但卻保持它的secret
○ hash function是一種簡單的承諾類型,例如: C=H(nonce+data)
○ 是加法同態的,可以使用 ECC 實現.例如 P1+P2=(x1+x2(mod n))*G - 環形簽章:產生證明知道與一組公鑰中的一個對應的私鑰的簽章
秘密交易結合了以上這些原則,在不透露交易本身價值的情況下證明交易是有價值的。 這是通過建立一組交易並證明輸入和輸出數量相等而不透露不同交易的分佈來實現的。