Skip to content

給自己的區塊鏈指南

🌱 Seedlings

區塊鏈的誕生

  • 已知最早的帳本是烏魯克城Kushim泥板
  • 複式記帳法源自會計學之父Luca Pacioli
  • 2015年底,三十家科技大廠聯合發起,遵循Apache v2的開源項目「超級帳本」(Hyperledger),並由Linux基金會負責管理

站在前人肩膀上的比特幣

  • e-Cash:由David Chaum提出,不可追蹤但須銀行協助
  • HashCash:由Adam Back提出,首次採用PoW對抗DoS
  • B-money:由Wei Dai提出,真正去中心但未解決雙重支付問題
  • Bit Gold:由Nick Szabo提出,很接近比特幣但未能實現

Leslie Lamport

核心技術概覽

  • Hyperledger使用的共識機制包含崩潰容錯(CFT)、拜占庭容錯(BFT)等
  • 2016年起,ITU-T在SG16、17及20研究小組中,各自對分散式帳本進行研究
  • IEEE透過P2418.2規範區塊鏈格式標準,制定過程與中國關係密切

典型應用場景

  • 歐洲虛擬通貨:英國RSCoin、荷蘭DNBcoin等
  • Blockcerts:MIT Media Lab開發的鏈上學歷證書
  • OpenBazaar:2021年停止運行,a16z投資失利的去中心化電商

分散式系統核心技術

一致性問題

  • 順序一致性(Sequential Consistency):1979年,由Leslie Lamport提出。必須達成全域順序一致
  • 線性一致性(Linearizability Consistency):1990年,由Maurice P. Herlihy與Jeannette M. Wing共同提出。比順序一致性嚴格,要求將全域操作視為單核操作,且能瞬時完成
  • 最終一致性(Eventual Consistency):受到Amazon技術長Werner Vogels推廣而為人熟知。最不嚴格,不要求同步以換取高效能。案例如DNS系統

FLP不可能原理

  • 在一個異步的分散式系統中,只要允許任一節點失效,就不可能有算法能達成共識

CAP原理

  • 在分散式系統中做讀寫操作時,只能確保一致性(Consistency)、可用性(Availability)和分區容錯性(Partition)中的其中兩項。可能的系統多半是AP或CP架構
  • AP:弱化一致性,遇到衝突時會回應舊的值,適合SSG或查詢類資料庫等。案例如Gossip Protocol、Apache的資料庫CouchDB和Cassandra
  • CP:弱化可用性,遇到衝突時會回應錯誤,適合ATM等。案例如MapReduce架構、MongoDB和Redis資料庫。共識算法Paxos和Raft,便是對應CP而生
  • AC:弱化分區容錯性。案例如部分關係型資料庫和Apache ZooKeeper

ACID原則與多階段提交

  • BASE原則:由eBay架構師Dan Pritchett提出,認為大型分散式系統應犧牲對強一致性之追求,即透過最弱的最終一致性來換取可用性
  • 比起接近AP的BASE原則,ACID原則更像是CP
  • 多階段提交是為了維持一致性,分為2PC和3PC
  • 2PC:預提交+正式提交。1979年由Jim Gray提出,簡單但效能差
  • 3PC:會先有「嘗試預提交」。知名算法如Paxos

Paxos算法與Raft算法

  • 普通Paxos場景預設處理非拜占庭問題,相關CFT有Paxos和Raft
  • 1990年,Leslie Lamport提出Paxos算法
  • 2014年,Diego Ongaro和TCL語言之父John Ousterhout共同提出Raft算法

Paxos基本原理

  • Paxos算法的三種角色是提案者(Proposer)、接受者(Acceptor)和學習者(Learner)
  • 提案者通常是客戶端;接受者負責投票,通常是服務端
  • 學習者只獲取並傳播結果,不參與投票,客戶端或服務端皆可
  • 在多種組合中,「多個提案者+單個接受者」由於原理簡單,被廣泛採用
  • 需要滿足Safety和Liveness,確保決議是正確的且能準時發生
  • 作為CP架構,Paxos維持一致性的方式,是確保每次達成共識時皆有超過一半節點參與
  • Raft算法的三種角色是領導者(Leader)、候選者(Candidate)和跟隨者(Follower)

拜占庭問題與算法

  • 1982年,Leslie Lamport等學者共同提出拜占庭問題(Byzantine Problem)
  • 思考拜占庭問題時通常難以形成共識,案例如殺人遊戲
  • 拜占庭錯誤(Byzantine Fault):有部分節點偽造訊息
  • 拜占庭容錯(Byzantine Fault Tolerant):處理BF的共識算法BFT
  • N>=3F+1:叛變者不能多於1/3
  • 1999年,Castro和Liskov共同提出實用拜占庭容錯(PBFT),使複雜度不再是指數級
  • PBFT能確保N>=3F+1之下的Safety和Liveness

可靠性指標

  • SLI:服務水準指標
  • SLO:SLI + Time Period + Objective
  • SLA:根據SLO制定的合約
  • MTBF:平均故障間隔時間
  • MTTR:平均修復時間

密碼學與安全技術

  • 1976年,Whitfield Diffie和Martin E. Hellman共同發表論文《New Directions in Cryptography》,開創現代公鑰密碼學
  • SM3:2010年發布的中國雜湊算法
  • SM2:2010年發布的中國非對稱加密標準
  • WCAP Training:加密算法和數位簽名
  • D-H(Diffie-Hellman Key Exchange):使雙方能安全地進行公鑰交換
  • HMAC:雜湊訊息鑑別碼。在開發時適用於不便選擇OAuth或JWT的情境
  • PS3破解事件:2010年,駭客組織fail0verflow在混沌通訊大會(CCC)公開Sony PS3的ECDSA漏洞。由於使用到相同的隨機數,私鑰最終被知名駭客George Hotz揭露
  • WCAP Training:數位憑證、PKI和PGP
  • Merkle Tree可以讓使用者自行做「代管負債證明」,不需要依靠交易所或會計師
  • Bloom Filter可基於Hash快速查找,是高效的資料結構
  • Bloom Filter不會漏報(False Negative),但有機率誤報(False Positive)
  • 同態加密(Homomorphic Encryption):不用解密也可以獲得和明文一樣的運算結果