天天看點

關于區塊鍊,作為程式員的你,好歹應該知道三大技術要點吧!

作為程式員的你,關于區塊鍊在去中心和去中介、隐私保護、時間戳三大要素中的技術内涵,好好學習一下吧~

作者 | 曹嚴明

如果說比特币是對傳統貨币的一種颠覆,那麼比特币的基礎技術——區塊鍊則是對傳統程式設計範式的一種颠覆。

區塊鍊技術被看作是一次Paradigm Shift。也許很多人對 “颠覆”這種說法不以為然,因為現在這個詞已經被用濫了(如今哪個好一點兒的詞沒有被用濫呢?),但是明眼人在匆忙做出“這又是個噱頭”這樣的結論之前會謹慎地去了解它背後的東西。

這篇文章的目的就是為程式員介紹區塊鍊的獨特技術,以及這些技術如何運用到項目或者産品的開發過程中。

即使你不想進入全新的區塊鍊應用開發大潮,你也會發現其底層技術對平日的應用開發有不少啟發和借鑒作用。

一個新技術的誕生有它順應時代的合理性(黑格爾語“存在就是合理的”)。作為程式員我們應該去了解它的合理性所在之處,取而用之。我們不一定非要用新技術去颠覆一個老應用,但可以用新技術去重塑一個老應用。

本篇主要讨論區塊鍊在三個方面的獨特性:去中心和去中介、隐私保護、時間戳。

去中心和去中介

1994年凱文 · 凱利(國内稱KK)出版了一本預言式的巨著《失控》,書中充滿了關于智慧生命及其社會進化機制的真知灼見。書中提到的很多概念,比如雲計算、物聯網、網絡社群等,在二十多年後的今天已經成為普遍事實。

“去中心化”是凱文 · 凱利在書中提出的“九律”中的一條。

一個去中心化的系統,沒有一個中央的、至上而下的控制主體,而完全是由大量互相聯結看似無組織的小個體構成,這些個體有一定的獨立性,可以互相作用,它們自發地形成一個整體以後,由量變引起質變,結果整體的能力、智慧、适應性和靈活性,都大大超過了個體的簡單相加。

這樣的去中心化系統生命力極強,遭到破壞可以自我修複,因而很難被完全摧毀。

網際網路就是一個典型去中心化的例子,極強的适應性和抗破壞性是網際網路的根本。不過如今的網際網路卻有了中心化的趨勢。

中心化的後果見仁見智,對崇尚多種選擇的人來說,中心化代表着選擇自由的喪失,服務品質的下降,活力的倒退和創新的萎縮。微網誌做為新一代網際網路媒體的翹楚,它的興起、沒落以及再次複興,從内容的産生和傳播來說,就是一個從一開始的去中心化,到由大V們控制的中心化,再到去中心化的曆程。

總之,隻有那些賦予其中每個個體充分發展的自由的系統,那些抗拒中心化趨勢的系統,才是生機勃勃、有創新力、能夠不斷進化的系統。

站在2016-2017年之交,智能機器時代似乎離我們不遠了。

晶片、存儲、網絡、移動、物聯網技術,都極大增強了各種網絡終端(edge)的能力,無論這些終端是人、手機、汽車、機器人,或是其他裝置。以前由于存儲、網絡或者計算能力等限制而選擇中心化的應用程式設計,現在的程式員則有更大的自由去選擇一種去中心化的設計。去中心化的系統更加靈活,更具适應性,更有活力。

另一方面,現實社會中的各種交易活動,由于交易雙方缺乏信任、資訊不對稱、搜尋成本、比對效率、交易費用等因素,需要有交易雙方共同信任的中介參與。

比如銀行間的跨境支付,中間需要通過SWIFT網絡和代理銀行,而不能直接進行點對點交易。

中介的産生源自于降低交易成本的目的,但是随着新技術的出現和普及,雙方直接交易成為可能,而且成本更低。在這樣的情況下中介變得多餘了,交易雙方通過去中介化來降低交易成本。

去中心和去中介有多種不同層次,可以展現在業務模式、業務資料的産生和傳播、應用系統的架構、應用系統的開發、運作、維護、更新等方面。比特币和區塊鍊是一種比較徹底的去中心和去中介應用,它包含以下幾種去中心和去中介技術:

1.    點對點網絡(P2P network)

點對點網絡并不是什麼新概念,網上的很多檔案共享和視訊直播服務就是用P2P網絡協定實作的。P2P是對等網絡,網絡中每個節點的地位相當,沒有任何節點處于中央控制的地位,也沒有任何節點扮演交易中介的角色;每個節點既是Server,又是Client;節點可以選擇随時加入,随時退出;節點可以選擇運作所有的功能(Full node),也可以選擇運作部分的功能;節點越多,整個系統的運算能力越強,資料安全性越高,抗破壞能力越強。

2.    去中心化資料庫

例如Bitcoin的分布式總帳。

3.    去中心化應用 (Decentralized App,簡稱 DApp)

例如在Ethereum上運作的智能合約應用。

4.    共識算法

無中心、無中介、無需互相信任的對等網絡的節點間需要協調一種共識算法,以便共同維護一個統一的分布式資料庫,以及協同工作以保障整個系統的安全性和适應性。有多種共識算法,包括:

PoW–Proof of Work工作量證明

PoS – Proof of Stake權益證明

DPoS–Delegated Proof of Stake授權權益證明

PBFT–Practical Byzantine FaultTolerance實用拜占庭容錯

PoET–Proof of Elapsed Time流逝時間量證明等。

作為一個程式員或者架構師,這些思路和技術有什麼幫助呢?你的應用需要去中心或者去中介嗎?你的下一個應用需要采用去中心化的架構嗎?設計去中心化的架構需要作哪些改變?需要哪些基礎設施?在時下這股區塊鍊的淘金熱裡,已經有很多創業公司準備颠覆傳統的中心化應用。幾乎所有的應用,都開始有相應的基于區塊鍊技術的去中心化版本。如果你認為目前沒有必要或者不可能去中心化,未雨綢缪總是不會錯的。

隐私保護

個人隐私資訊洩露在中國是一個非常嚴重的現象。

盜取、販賣個人資訊已經有完整的黑市産業鍊,部分網際網路征信和資料公司,從黑市上購買資料,甚至雇傭黑客盜取資料。網際網路使用者普遍意識到個人隐私資訊的重要,對隐私保護的要求會更高。程式員有責任從技術上加強個人隐私的保護。

在傳統的應用架構設計中,隐私保護或者安全性設計的優先級并不是很高,現在這種情況必須有所改變,架構師需要提升隐私保護設計的優先級。

區塊鍊應用領域采用了很多密碼學的技術,例如雜湊演算法、加密算法、公鑰密碼學、默克爾樹、和零身份證明。

Bitcoin在保護使用者身份方面,使用哈希過的公鑰作為個人賬号,這樣在交易時隐藏了個人資訊。另外,個人賬号可以設計成一次性的,每次交易都使用新賬号,這樣就很難通過追蹤某個賬号的交易來推測使用者身份。Bitcoin的總帳是公開的,上面每筆交易記錄包含付費賬号、收費賬号以及轉賬金額。

如果覺得這樣的隐私保護還不夠,另一個數字貨币Zcash在Bitcoin之上增加了一些協定,将付費賬号、收費賬号以及轉賬金額都隐藏了起來,采用的方法仍然是加密、哈希、默克爾樹和零知識證明。

盡管比特币出自于一群無政府主義者之手,但他們秉承的一些諸如保護個人隐私的信念,在這個資訊泛濫的網際網路時代還是非常可取的。

你的應用是否收集了超越應用需要的個人資訊?(保護隐私的最好辦法就是不收集它們)在處理交易時,是否可以傳遞盡可能少的個人身份資訊?或者使用一次性賬号?在日志中是否可以記錄盡可能少的個人身份資訊?或者完全不需記錄?緩存資料庫中的個人資訊是否安全?消息傳遞時不僅采用Session Key加密,是否還可以采用Message Key?如今,雜湊演算法、公鑰加密,默克爾樹,這些加密技術唾手可得。程式員應該養成新的習慣,在應用設計中采用各種加密技術保護個人隐私資訊,包括個人賬戶、交易、浏覽、日志資訊等。

時間戳

傳統關系型資料庫在設計表時一般會有一個或多個時間戳(timestamp)字段,用來标記一行記錄添加或修改時的時間。

基本上,這些時間戳是給應用内部使用的。當資料被共享給其他應用時,這些時間戳并沒有多大意義,因為時間戳可以僞造。

在資料黑市上,一個資料掮客可以将一份銀行VIP客戶資料進行注水,摻入一半的假資料。

一家保險公司為了攪亂市場上競争對手的視線,故意污染資料,将高淨值使用者放入騙保使用者黑名單,将騙保使用者放入高淨值使用者名單,然後讓污染後的資料故意洩露出去。

如果每條資料都帶有一個真實可信的時間戳(這條資料産生的真實時間點),這樣的造假行為就比較難奏效,因為假資料的時間戳一般都是最近的。

以前我們很少關心資料的時間戳,很少去了解時間戳對資料的意義,一個原因也許是我們不知道如何用技術去實作這樣的時間戳。

如果技術實作完全可行,那麼這個時間戳對我們來說就有了全新的意義。

首先,我們有了真正可以信任的曆史資料。

第二,這些資料因為可信變得更有價值,可以在應用之外被其他應用或者分析工具使用。

第三,我們可以基于這些可信的曆史記錄生成信用。

最後,我們真正進入一個信用社會。

想象一下,如果我們想在未來某天證明自己的資料是在今天産生的,可以在今天對今天的所有資料進行某種形式的哈希(比如默克爾樹),最終得到一個哈希值,然後在第二天的《參考消息》上登一個廣告,把哈希值釋出出去。明天的《參考消息》就成了我們的時間戳。

如果明天我們想做同樣的事,可以如法炮制,另外有一個關鍵點,那就是要記得把今天的哈希值也給哈希進去。這樣每天的哈希值就包含了以前所有資料的哈希資訊。

區塊鍊在P2P網絡上通過節點間的共識算法實作了一個分布式的時間戳服務。

區塊鍊是在時間上有序的、由記錄塊(區塊)組成的一根鍊條。一個區塊包含兩個部分:區塊頭(Block Header)和記錄部分。區塊中的所有記錄通過默克爾樹(Merkle Tree)組織起來,默克爾樹根(Root)的哈希值做為本區塊裡所有記錄的數字指紋被放入區塊頭。

區塊頭還包含以下字段:前一個區塊頭的哈希值(這是前一個區塊的數字指紋,也可以看做是指向前一個區塊的哈希指針),本區塊的時間戳、高度(Hight,即從第一個區塊開始數本區塊是第幾個塊),以及一些其他資訊。系統的共識算法保證了每過固定的一段時間(Bitcoin是大約10分鐘),參與整個系統記賬的節點會達成共識在區塊鍊上添加下一個新的區塊。

時間戳的這種設計,使得更改一條記錄的困難程度按時間的指數倍增加,越老的記錄越難更改。這是因為,如果改動某個區塊裡的一條記錄,意味着該區塊原來的默克爾樹根失效了,需要改動區塊頭,該區塊的數字指紋随之失效。又由于下一個區塊的區塊頭包含這個哈希指針,這就意味着下一個區塊也需要改動。如此直到最新的那個區塊。

可見要想改動一個區塊,必須同時改動該區塊後面的所有區塊。因為将一個區塊放入區塊鍊中需要消耗非常多的資源(資源種類依共識算法的不同而不同,可以是計算力,流逝的時間,擁有的權益等),随着後面添加的區塊越來越多,要想改動某個區塊幾乎是不可能的。

對一個普通應用來說,如何實作這樣一個時間戳服務呢?我們需要自己建立一個區塊鍊嗎?其實沒必要,Bitcoin就是一個很好的時間戳服務,我們可以把哈希值寫到Bitcoin的區塊鍊中。這是一種存在證明(Proof of Existence)。Factom也提供類似的服務,它收集所有的哈希,每隔10分鐘生成一個哈希值,寫到Bitcoin的區塊鍊中。

哪些資料需要有時間戳?必須是不能變更的資料,特别适合存檔檔案。需要現在就考慮實施時間戳嗎?這個跟你的資料戰略相關。在大資料時代,擁有高品質的資料就是擁有了價值。時間戳可以一定程度上保證資料的可信度,至少這些資料是經過“時間考驗”的。

總結

2009年1月Bitcoin釋出,2015年7月Ethereum釋出,到今年區塊鍊開始大熱。對于程式員和架構師來說,區塊鍊帶來了新的思維,新的程式設計範式,它所基于的技術也是一般程式員不太熟悉的。它号稱要颠覆傳統應用,要構造一個“價值網際網路”。

本文讨論了區塊鍊三個有意思的方面:去中心和去中介、隐私保護、時間戳。程式員有必要了解這些有益的思路和技術,審視自己的應用和産品,看看是否可以借鑒,是否可以提升使用者體驗,增加資料價值,降低營運成本,或者是否有新的業務場景,也許還可以開創一條全新的業務模式。

原文釋出時間為:2018年01月29日

本文作者:區塊鍊大學營

本文來源:

CSDN

,如需轉載請聯系原作者。

繼續閱讀