區塊鏈 - 快速指南



區塊鏈 - 簡介

近年來,區塊鏈引起了廣泛關注。許多人將其描述為本十年最具顛覆性的技術。特別是金融市場可能會受到最大影響。

該技術正在被應用於許多垂直領域,如醫療保健、醫藥、保險、智慧財產、汽車,甚至政府。

然而,迄今為止,區塊鏈最成功的應用是比特幣 - 一個點對點電子現金系統,巧合的是,這也是區塊鏈技術的首次實現。因此,要了解區塊鏈技術,最好了解比特幣系統的設計和實現方式。

在這篇文章中,您將學習什麼是區塊鏈、它的架構、它是如何實現的以及它的各種功能。在描述區塊鏈的複雜性時,我將以比特幣的實現為例。

區塊鏈架構並非易事,許多人撰寫了優秀的文章、教程,包括一些影片。這些文章面向從新手到專業人士的不同受眾。在本教程中,我將重點關注區塊鏈架構的概念理解,兼顧新手和專業人士。在深入研究區塊鏈之前,瞭解為什麼需要這種新技術非常重要?這個問題的答案在於所謂的**雙重支付**。

區塊鏈 - 雙重支付

考慮影像中所示的情況 -

Double Spending

如這裡清楚地看到,Bob 用一張 10 美元的鈔票向 Lisa 購買了一本書。一旦 Lisa 收到這 10 美元的紙幣,Bob 就無法再次使用這筆錢進行其他交易,因為這筆實體貨幣現在屬於 Lisa。

現在,考慮一種情況,即資金以數字形式支付。這在影像中進行了說明 -

Paid Digital Form

由於貨幣交換的格式為數字格式,它本質上是儲存在 Bob 裝置上的某個位置的二進位制物理檔案。在 Bob 將此檔案(數字貨幣)提供給 Lisa 後,他還可以將檔案的副本提供給 Alice。兩者現在都認為他們收到了這筆錢,卻沒有辦法驗證數字貨幣的真實性,因此都會將各自的商品交付給 Bob。這稱為**雙重支付**,傳送者在多個地方花費同一筆錢以從多個供應商處獲取服務或商品。

為了解決雙重支付問題,可以採用集中式權威機構來監控所有交易。這在影像中進行了說明 -

Centrailized Authority

集中式權威機構(通常稱為銀行)維護一個分類賬,記錄所有交易。現在,Bob 必須將其數字貨幣傳送到銀行,銀行會在其分類賬中記入借方,記入 Bob 的賬戶。在確保 Bob 擁有足夠的餘額來支付他想要傳送的數字貨幣後,銀行會將這筆錢傳送給 Lisa,記入其分類賬的貸方,記入 Lisa 的賬戶。

現在,可以保證 Bob 不會雙重支付這筆錢。如果每筆數字交易都透過這樣的集中式權威機構進行,則雙重支付問題將得到解決。這也提供了另一個好處,可以驗證每枚貨幣(數字貨幣)在其接收到的交易中的真實性。因此,假幣(如 Bob 使用副本支付給 Alice 的情況下的重複貨幣)將很容易被檢測到並防止流通。

雖然引入集中式權威機構解決了雙重支付問題,但也帶來了另一個主要問題 - 建立和維護集中式權威機構本身的成本。

由於銀行需要資金運營,因此它們開始在其為客戶進行的每筆貨幣交易中收取佣金。有時這可能會變得非常昂貴,尤其是在海外轉賬的情況下,整個交易可能涉及多個代理機構(銀行)。

所有上述問題都透過引入數字貨幣比特幣得到了解決。在深入探討其設計和架構之前,我將先向您簡要介紹一下比特幣是什麼。

比特幣 - 簡史

比特幣是由中本聰於 2008 年透過一篇名為比特幣:點對點電子現金系統的研究型白皮書引入世界的。

比特幣不僅解決了雙重支付問題,還提供了更多優勢,其中一個值得一提的優勢是交易中的匿名性。建立該系統並在此係統上進行了一些比特幣交易的中本聰對全世界來說完全是匿名的。

試想一下,在這個社交媒體的世界裡,每個人的隱私都岌岌可危,而世界至今都無法追蹤中本聰是誰?事實上,我們不知道中本聰是個人還是一群人。谷歌搜尋也揭示了這樣一個事實:中本聰持有的比特幣價值約為 194 億美元 - 這筆錢現在在比特幣系統中無人認領。那麼比特幣是什麼 - 讓我們來看一看!

什麼是比特幣?

正如您之前看到的,銀行維護一個記錄每筆交易的分類賬。此分類賬由銀行私下持有和維護。中本聰提出,讓這個分類賬公開,並由社群維護。

一旦您將這樣的分類賬公開,您就會想到一些問題。此分類賬必須防篡改,以便任何人都無法修改其條目。由於分類賬中的每個條目都是公開可見的,因此我們將不得不弄清楚如何維護匿名性 - 顯然,您不希望世界上每個人都知道我向您支付了 100 萬美元。

此外,由於只有一個分類賬跟蹤著世界上所有交易,因此分類賬的大小也將是另一個令人擔憂的問題。為這些複雜問題提供解決方案並非易事,這就是我在這裡嘗試用簡單的語言讓您理解比特幣底層架構的原因。

這個底層架構就是**區塊鏈**,這也是本教程的主題。要了解區塊鏈架構,您需要了解其基礎的一些關鍵特性。因此,讓我們從 PKI - 公鑰密碼學開始。

區塊鏈 - 公鑰密碼學

公鑰密碼學,簡稱 PKI,也稱為非對稱加密。它使用兩對金鑰 - 公鑰和私鑰。金鑰是一個長的二進位制數字。公鑰在全球範圍內分發,顧名思義,它是真正的公開的。私鑰必須嚴格保密,並且任何人都不應該丟失它。

在比特幣的情況下,如果您丟失了比特幣錢包的私鑰,則錢包的所有內容都會立即面臨被盜的風險,並且在您意識到之前,您的所有錢(錢包的內容)都會消失,並且系統中沒有任何機制可以追蹤是誰偷走了它 - 這就是我之前提到的系統中的匿名性。

PKI 完成兩個功能 - 透過加密/解密機制進行身份驗證和訊息隱私。我現在將解釋這兩個功能 -

身份驗證

當雙方交換訊息時,在傳送方和接收方之間建立信任非常重要。特別是,接收方必須信任訊息的來源。回到我們之前(在圖 1 中描述)Bob 向 Lisa 傳送一些錢以購買她的商品的場景,讓我們看看 PKI 如何在 Bob 和 Lisa 之間建立這種信任。請檢視下圖 -

Authentication

首先,如果 Bob 想要向 Lisa 傳送一些錢,他必須建立自己的私鑰/公鑰。請注意,這兩把金鑰始終成對出現,並且您不能混合不同個人或不同例項的私鑰和公鑰。

現在,Bob 說他向 Lisa 傳送了 10 美元。因此,他建立一條訊息(純文字訊息),其中包含 Bob(傳送方)的公鑰、Lisa(接收方)的公鑰以及金額(10 美元)。

此匯款的目的,例如“我想向您購買南瓜”,也會新增到訊息中。整個訊息現在使用 Bob 的私鑰進行簽名。當 Lisa 收到此訊息時,她將使用 PKI 的簽名驗證演算法和 Bob 的公鑰來確保訊息確實來自 Bob。PKI 的工作原理超出了本教程的範圍。有興趣的讀者可以參考此網站,以更詳細地討論 PKI。這建立了訊息傳送者的真實性。現在,讓我們看看訊息隱私。

訊息隱私

現在,由於 Lisa 已收到付款,她想傳送 Bob 想要購買的電子書的連結。因此,Lisa 會建立一條訊息並將其傳送給 Bob,如影像所示 -

Message Privacy

Lisa 建立一條訊息,例如“這是您請求的電子書的連結”,使用她在 Bob 的請求訊息中收到的 Bob 的公鑰對其進行簽名,並使用 HTTPS 握手期間雙方共享的某個金鑰對訊息進行加密。

現在,Lisa 確信只有 Bob 可以使用僅由 Bob 持有的私鑰來解碼該訊息。此外,攔截訊息的人將無法恢復其內容,因為內容已透過僅由 Bob 和 Alice 持有的金鑰進行加密。這保證了 Lisa 只有 Bob 才能訪問她的電子書。

在瞭解了 PKI 隱含的兩個功能身份驗證和訊息隱私之後,讓我們繼續瞭解比特幣如何利用 PKI 來保護我在“什麼是比特幣?”一章中提到的公共分類賬。

僅供參考 - 最流行的PKI演算法是RSAECDSA,比特幣使用後者。

區塊鏈 - 雜湊

PKI中最重要的功能之一是雜湊函式。雜湊函式將任意大小的資料對映到固定大小的資料。比特幣使用SHA-256雜湊函式,生成大小為256位(32位元組)的雜湊值(輸出)。這在圖片中進行了說明 -

Hashing

Bob在向Lisa下訂單時,會建立一個類似於上面顯示的訊息。此訊息透過雜湊函式進行雜湊處理,生成一個32位元組的雜湊值。此雜湊值的優點在於,在所有實際用途下,雜湊值(256位數字)都被認為是訊息內容的唯一標識。如果訊息被修改,雜湊值將發生變化。不僅如此,給定一個雜湊值,也無法重建原始訊息。

在瞭解了雜湊的重要性之後,讓我們繼續探討比特幣中的另一個概念:挖礦。

比特幣 - 挖礦

當Bob為Lisa建立購買請求時,他不會只將其傳送給Lisa。相反,請求訊息會廣播到他連線的整個網路中。Bob的網路在圖片中進行了描述。

Mining

訊息傳送到所有連線的節點(機器)。圖中的一些節點被標記為礦工。這些是執行比特幣訊息挖礦軟體的機器。我現在將向您解釋挖礦的含義。

挖礦過程

由於整個網路是廣泛分佈的,因此網路中的每個礦工都預計在任何給定時間段內會收到來自多個供應商的多個訊息。礦工所做的是將這些訊息組合到一個區塊中。這在圖片中進行了說明 -

Mining Process

形成訊息區塊後,礦工使用前面描述的雜湊函式對區塊進行雜湊處理。現在,正如您所知,如果任何第三方修改此區塊的內容,其雜湊值將變得無效。順便說一句,每條訊息都帶有時間戳,因此沒有人可以在不影響區塊雜湊值的情況下修改其時間順序。因此,區塊中的訊息可以完美地防止篡改。如何利用這一事實來確保網路中所有交易的安全將在後面進行解釋。

區塊鏈 - 區塊鏈

各個礦工建立的區塊鏈在一起形成一個真正的分散式公共賬本。

Chaining Blocks

鏈中的每個區塊包含多條訊息(交易),如前面圖8所示。鏈中的區塊可能來自任何礦工。在建立區塊鏈時,我們遵守以下規則:將前一個區塊的雜湊值新增到當前區塊中。

因此,礦工在建立區塊時,會獲取鏈中最後一個區塊的雜湊值,將其與自己的一組訊息組合起來,併為新建立的區塊生成雜湊值。這個新建立的區塊現在成為鏈的新末端,因此隨著礦工不斷新增更多區塊,鏈會不斷增長。

區塊鏈 - 工作量證明

由於所有交易都帶有時間戳,因此我們需要在點對點網路上實現一個分散式時間戳伺服器。這需要一些額外的實現,那就是我將要描述的工作量證明。在每個區塊中,我們現在新增另一個名為Nonce的專案,如下面的圖所示 -

Proof of Work

Nonce是一個數字,使得區塊的雜湊值滿足某個特定條件。此條件可能是生成的雜湊值的前四位必須為零。

因此,生成的雜湊值將類似於000010101010xxx。通常,礦工從Nonce值為0開始,並不斷遞增,直到生成的雜湊值滿足指定的條件。

請注意,雜湊生成是隨機的,並且不受您的控制 - 也就是說,您無法強制雜湊函式生成特定的雜湊值。因此,可能需要多次迭代才能生成具有四個前導零的所需雜湊值。比特幣系統中生成一個區塊的預期時間為10分鐘。一旦礦工成功挖出區塊,他就會將其釋出到系統中,使其成為鏈中的最後一個區塊。

請注意,有多個礦工正在爭奪生成合法區塊。比特幣系統透過給予第一個成功的礦工一定數量的比特幣來獎勵他。一般來說,擁有更多計算能力的礦工可能會成為早期贏家。這可能會導致那些擁有巨大處理能力的人對整個系統發起攻擊。我將在本教程的最後部分描述這些攻擊以及如何緩解這些攻擊。

區塊鏈 - 網路與挖礦

我現在將總結上面描述的步驟;這就是網路中發生的事情 -

  • 任何想要從在網路上釋出廣告的第三方獲取服務的人,首先建立一個交易(傳送給所需接收者的訊息)。

  • 在給定的時間段內,可能會有許多傳送方(買方)和接收方(賣方)建立此類交易。

  • 所有交易都廣播到網路中的所有節點。請注意,並非每個交易都必須到達網路中的每個其他節點。

  • 每個節點將新的交易組合成一個區塊。請注意,每個區塊中的交易集獨立於其他節點建立的區塊中的交易集,並且自然與其他區塊不同。這無關緊要;系統確保網路上廣播的每筆交易在合理的時間內都包含在某個區塊中。通常,傳送方會透過向礦工提供一定數量的比特幣來激勵節點。礦工可以選擇優先將激勵更高的交易包含在區塊中。

  • 節點現在開始為其組裝的區塊尋找工作量證明。

  • 當節點找到工作量證明時,它會將組裝好的區塊廣播到網路上。

  • 接收新區塊的節點只有在驗證區塊中的所有交易均有效且未被花費後才會接受它。

  • 如果區塊被接受為有效,則正在處理其自身新區塊的節點將不得不重新組裝其區塊中的交易,確保交易不會重複。節點現在開始為其新建立的區塊尋找工作量證明;在此過程中,它將接受的區塊的雜湊值作為前一個雜湊值。

  • 同樣,區塊鏈將永遠持續增長。

現在,我們已經瞭解了整個系統的運作方式,讓我來描述一些副作用以及如何解決它們。

區塊鏈 - 礦工激勵

正如我們在比特幣 - 挖礦章節中看到的,礦工在任何給定時間段內都可能收到大量交易。區塊的最大大小在系統中是預定義的,因此每個區塊只能包含一定數量的交易。

區塊中的交易數量由預定義的區塊大小和每個區塊的平均長度決定。這裡一個重要的提示是,傳送方不應在訊息中包含過多的資訊,以便使訊息簡短,從而激勵礦工在其他較長的訊息之前接受它。

傳送方通常還會新增一定數量的比特幣作為交易費用,以激勵礦工將其儘早包含在其區塊中。

構建區塊鏈的另一個結果是其自身的大小。隨著時間的推移,整個區塊鏈可能會變得太大,以至於節點無法將其儲存在其磁碟上。這可以透過使用Merkle樹來解決,這將在後面進行描述。

區塊鏈 - 梅克爾樹

節點的磁碟空間問題很容易克服,因為區塊中的所有交易都按如下面的圖片所示在Merkle樹中進行雜湊處理 -

Merkle Tree

區塊頭現在包含前一個區塊的雜湊值、Nonce以及Merkle樹中當前區塊中所有交易的根雜湊值。由於此根雜湊值包含區塊內所有交易的雜湊值,因此可以修剪這些交易以節省磁碟空間。因此,您的區塊鏈將如下面的圖片所示 -

Root Hash

這可以節省大量的磁碟空間。此策略由僅對接收他人的付款感興趣的普通客戶端使用。但是,礦工需要儲存完整的區塊鏈。現在問題出現了,接收者如何在沒有能夠追蹤收到的幣到其來源的能力的情況下驗證付款?這將在後面進行解釋。

區塊鏈 - 支付驗證

考慮一種情況,作為供應商,您可能希望驗證過去進行的特定付款。由於您機器上儲存的區塊鏈僅包含前面圖中所示的區塊頭,因此您要搜尋的交易在您的區塊鏈副本中缺失。

您現在可以在您的區塊鏈副本中向後搜尋,直到找到一個包含所需交易時間戳的區塊。現在,請求所選區塊的Merkle樹,您將擁有要查詢的交易。這在下面的圖中進行了說明 -

Payment Verification

在這裡,我們假設您正在查詢Tx103。雖然您可能無法看到Tx103的內容,但您知道它已被其所屬的區塊以及鏈中所有後續區塊接受。因此,您可以安全地信任此交易並繼續您的業務。

區塊鏈 - 解決衝突

正如我們所看到的,比特幣網路包含多個礦工。有可能,兩個不同的礦工同時解決了工作量證明,從而將他們的區塊新增到鏈中最後一個已知的區塊。這在下面的圖片中進行了說明 -

Resolving Conflicts

現在,在區塊3之後我們有兩個分支。這兩個分支都是有效的。因此,下一個挖出的區塊可能會新增到這兩個分支中的任何一個。假設礦工將新挖出的區塊新增到區塊104-A,則包含區塊104-A的分支將比包含區塊104-B的分支更長。這在下面的圖片中進行了說明 -

Bitcoin Architecture

在比特幣架構中,最長的分支總是獲勝,較短的分支會被清除。因此,區塊104-B必須被清除。在清除此區塊之前,此區塊中的所有交易都將返回到交易池,以便它們被挖出並新增到某個未來的區塊中。這就是衝突如何解決以及系統如何僅維護一條區塊鏈的方式。

區塊鏈 - 隱私

由於記錄所有比特幣交易的賬本是真正公開的,因此隱私受到威脅。世界上任何人都可以知道誰付給了誰?傳統的銀行系統能夠透過將其記錄保密來維護這種隱私。

比特幣系統中的隱私透過不同的策略實現。請注意,我們說過比特幣的傳送方需要知道向誰付款。因此,他要求提供他想要付款的供應商的公鑰。此公鑰可以是匿名的。

從某種意義上說,作為某些服務的供應商,當有人詢問您在哪裡傳送付款時,您只需傳送您的公鑰即可。此公鑰與您的關聯未在賬本中的任何地方記錄。這樣,此交易之外的任何人只會知道交易了多少錢以及將這筆錢支付給了哪個公鑰。

為了實現更高的隱私程度,對於每筆交易,您可以在每次交易中生成一個新的私鑰/公鑰,以便第三方無法將您進行的多筆交易組合在一起。對於外部人員來說,這僅僅意味著進行了多筆小額交易,並且他們永遠不會將這些交易連結到一個共同的來源。

最後,任何基於網際網路的線上系統都容易受到濫用。我將描述幾種對比特幣系統可能存在的攻擊型別以及如何緩解這些攻擊。

比特幣 - 緩解攻擊

我將討論比特幣系統中三種不同型別的可能攻擊 -

競爭攻擊(Race Attack)

作為攻擊者,你可能會以快速連續的方式將相同的幣傳送給不同的商家,可能使用兩臺不同的機器。如果商家在交付商品之前沒有等待區塊確認,他們很快就會意識到交易在挖礦過程中被拒絕了。這種攻擊的解決方案是,商家必須至少等待一個區塊確認才能發出商品。

芬尼攻擊(Finney Attack)

在這種情況下,攻擊者是礦工。礦工用自己的交易挖出一個區塊,但不將其釋出到系統中。他現在在第二個交易中使用相同的幣,然後釋出預先挖出的區塊。顯然,第二個交易最終會被其他礦工拒絕,但這需要一些時間。為了降低這種風險,賣家應該至少等待六個區塊確認才能釋放商品。

51% 攻擊

在這種型別的攻擊中,我們提出了一個不切實際的假設,即某人擁有網路 51% 的計算能力。這種攻擊中的攻擊者挖出一個私有區塊鏈,他在其中雙重花費幣。

由於他擁有大部分計算能力,因此可以保證他的私有區塊鏈在某個時間點會比“誠實”網路的鏈條更長。然後,他將他的私有區塊鏈釋出到系統中,使之前記錄在誠實區塊鏈中的所有交易都失效。

這種攻擊是虛構的,因為獲取等於或超過整個網路 51% 計算能力的計算能力非常昂貴。

區塊鏈 - 結論

在本簡短教程中,您透過以比特幣作為案例研究的方式瞭解了區塊鏈的幾個概念。比特幣是區塊鏈的第一個成功實現。如今,世界已經發現區塊鏈技術在多個行業的應用,在這些行業中,人們希望在沒有集中式權威參與的情況下建立信任。因此,歡迎來到區塊鏈的世界。

進一步閱讀 -

廣告

© . All rights reserved.