區塊鏈技術:密碼學、可伸縮和共識

在以前的文章中, 我們看到了一個簡單的鏈表概念如何演變為複雜的分佈式系統。顯然,這是區塊鏈簡單的概念演進,但它不是分佈式系統出現的唯一方式。分佈式系統需要協調、容錯、協商一致和多層技術管理(在系統和協議的意義上)。


區塊鏈技術:密碼學、可伸縮和共識


分佈式系統還有許多其他複雜的問題。當分佈式系統中的節點也是分散的(從所有權和控制的角度來看)時,安全性就變得至關重要。這就是複雜密碼機制發揮作用的地方。巨大的事務量使得有必要處理任何共享或複製數據的性能,從而為擴展、分片和驗證分佈式數據的概念鋪平了道路,以確保它不會失去同步 功能或受到損害。在本節中,我們將討論一下並不新鮮的蓋簾;它們已經為人所知,並且已經研究了幾十年。

密碼學

分佈式系統中的一個重要需求是數據和參與者的安全性。這促使了密碼技術的引入。例如,Ralph Merkle在1979年引入了哈希值二叉樹(現在稱為Merkle樹)的概念。塊的加密哈希值是由Stuart Haber & W. Scott Stornetta在1991年實現的。1992年,他們將Merkle樹納入他們的效率方案中。

哈希值函數是經過充分研究的標準技術,為許多現代加密技術提供了基礎,包括眾所周知的SSL證書和http協議。在SHA-1和SHA-2中使用了Merkle哈希值函數,現在稱為merker - damgard構造。Hashcash使用SHA-1(1993年最初使用SHA-0, 1995年使用SHA-1),現在使用更安全的SHA-2(實際上由SHA-256和SHA-512組成)。更安全的SHA-3是下一步升級。

分區、縮放、複製和分片

由於區塊鏈的核心是分佈式分類賬形式的數據庫,如何處理數據庫規模快速增長的問題變得越來越緊迫。分區、複製、縮放和分片都是密切相關的概念。這些技術過去用於企業系統,現在被用於區塊鏈以解決性能限制。

和區塊鏈一樣,這些也不是什麼新概念,因為大公司幾十年來一直在努力解決這些問題。對於不斷增長的數據庫來說,直觀而明顯的解決方案是將其分解為多個部分,並分別存儲這些部分。在這個看似簡單的解決方案的背後,隱藏著許多技術挑戰,例如,應用層如何知道將在哪個“塊”找到任何特定的數據記錄,如何在數據的多個分區之間管理查詢,等等。雖然這些可伸縮性問題在企業系統或已經知道並允許參與者的生態系統(例如,相當於被許可的塊鏈)中易於處理,但在公共區塊鏈中會變得更加棘手。惡意策略的排列似乎沒完沒了,而實際上也不可能事先列舉出來。需要保持合理的匿名性也增加了其解決方案的複雜性。

驗證和確認

零知識證明(ZKP)是一種技術,用來證明驗證者(另一方,稱為驗證者),而驗證者知道的一些東西,不需要證明者披露什麼是驗證者所知道的。(這聽起來很神奇,但是有許多簡單的例子可以說明這是如何實現的,我將在稍後的文章中介紹。)ZKP最初是在Shafi Goldwasser、Silvio Micali和Charles Rackoff於1985年發表的論文《交互驗證系統的知識複雜性》中描述的(顯然,ZKP早在1982年的時候就開發出來了,但直到1985年才發表)。Zcash是一種基於比特幣的加密貨幣,它使用ZKP(或稱為zknoks的變體,由四名研究人員於2012年首次引入)來確保交易的有效性,同時不洩露任何關於發送方、接收方或金額本身的信息。

甚至交易本身都可以通過自動化代碼實現,這通常稱為智能合約。這是Nick Szabo在1996年首次提出的。儘管名稱不同,但考慮到人工智能目前相對先進的狀態,這些自動化代碼是否可以說是智能合約還存在爭議。同樣,智能合約也不完全是法律意義上的合同。例如,信用卡交易結合了大量的計算,包括檢查餘額、欺詐、不尋常的支出模式等,以及在複雜的現代金融交易網絡中各方之間的服務水平協議和合約綁定,但我們通常不稱之為“智能合約”。相比之下,當前的“智能合約”是相當簡單的。

區塊網


分享到:


相關文章: