區(qū)塊鏈技術發(fā)展至今,除了比特幣這個應用落地之外龙优。似乎鮮有其他可以落地的應用事秀。最近這個概念也越來越弱。
在17年時有家公司打算把區(qū)塊鏈的技術落地到一個叫blockchain 的項目宰衙。他提出了一個完全和過去設計web架構不一樣的理念睹欲。
同時他自己主要是作為一個命名系統而存在。
這個應用是個探索者窘疮,未來的路可能前途無量考余,也可能不是一條正確的方向。但我還是很樂意看到這樣的想法和嘗試楚堤。
首先他提出了一個理念。在過去各家科技公司擁有了絕對的數據衅胀。所有用戶的數據都托管在他們使用的APP的服務端∷煮荩現在的APP基本都是這個模式。我們稱之為中心化的APP掸掏。
那么他提出了去中心化的APP。也就是讓用戶對自己的數據有絕對的控制權募闲≡复科技公司只提供處理數據的APP代碼邏輯。在這種架構下要出,APP和用戶在一起农渊,數據被放在另一側。數據不再和APP綁定腿时。用戶可以自由的切換APP而不用理會數據沒有的問題批糟。就拿博客來說,自己寫的文章的數據不再放在某個具體博客網站的數據庫里徽鼎。而是存在一個公有云上,必須有自己的私鑰才有權利去讀到自己的數據悄但。隨后你可以用這份數據去配上不同網站的APP代碼石抡,來在不同網站上呈現的你的文章。
他的亮點在于嚎京,數據是用戶的隐解,而不是屬于某個APP的。所以就可以防止某些公司去做出販賣或窺探數據的問題帕涌。
這種設計看上去十分美好,但是世界沒有向這個方向走亲澡,也是因為他存在很多問題辟躏。
相比于用戶寫的裸數據,不夠架構化。在寫應用代碼的時候會非常困難裹匙,相比較于直接把數據存進數據庫。
如果要讓用戶自己去負責把數據結構化籽御。又對用戶提出了很高的要求惰匙。
同時只有用戶自己對自己的數據有最終解釋權。那么他們可以篡改自己的數據哑梳,就違背了一些應用依賴于一個SOURCE OF TRUTH的情況绘盟。比如競價系統,如果最后得標價是1000元龄毡。用戶發(fā)現自己中標失敗后,篡改自己的數據為得標價格沦零。來HACK應用是很難避免的。因為應用只有代碼邏輯疾渴。數據完全來自用戶寻拂。
同時也給開發(fā)人員帶來很多的麻煩。
從目前來看瞄沙,現在的架構雖然有隱私上的問題。但是利大于弊距境。
- 易于編程
- 對軟件和數據的集中控制使更改(和調試)變得容易
- 性能,可靠性的良好解決方案
- 易于實施特定于應用程序的安全性
- 成功的收入模式(廣告)
Blockstack
blockstack立志于構建一個命名系統师幕。有了命名系統之后诬滩,可以做很多事情疼鸟。比如云盤是不可靠的,我們放在云盤上的數據必須是加密的空镜,那么我們就需要一個名字到PUBLIC KEY的映射。同時我這個名字OWN了哪些數據也是很重要的张抄。
這里的名字我覺得類似于一個域名或者你的手機號洼怔,他可以代表你的身份,需要搶注泽台,一旦一個名字被一人占用后矾缓,他就一直獨享,直到他把這個名字轉賣掉嗜闻。這里就和比特幣的思想很像蜕依。
所有人需要對這個名字的主人的所有權達成共識在P2P的環(huán)境下。
Zooko's triangle
Zooko Wilcox-O'Hearn曾推測琉雳,任何一種命名系統都無法同時滿足三種特性:可讀性(Human-meaningful)样眠,唯一性(Unique),和分散性(Decentralized)翠肘。也就是說檐束,任何一種命名系統都要至少像其中一種特性妥協。例如束倍,我們給小孩起名字被丧,可以滿足可讀性和分散性盟戏,但卻無法保證名字是唯一的;滿足可讀性和唯一性的傳統DNS甥桂,它是中心化的(不滿足分散性),同樣的例子還有EMAIL地址黄选;如果你用UUID來生成名字滿足安全性和分散性蝇摸,但域名確是隨機字符串(無法滿足可讀性)。類似的例子有你的公鑰办陷。
這里BLOCKSTACK利用區(qū)塊來存對名字的占有屬性锹雏。如果我能夠在一個區(qū)塊里寫下我擁有XXX的名字穆役,那么這個名字將屬于我害捕,并且全局唯一抛虏。其實這個名字雖然具備可讀性,但是你很難依靠他直接來區(qū)分某個人殃恒,因為任何一個人都可以對一個名字進行搶注。所以你還是要在線下和那個人取得聯系辱揭,得知屬于他的NAME离唐。這個類似于微信號的意義。
4層架構
BLOCK STACK 架構分為4層问窃。
首先用戶需要安裝一個客戶端亥鬓,里面含有一個瀏覽器,可以展示不同的APP域庇,以及用戶的私鑰也是保存在客戶端嵌戈。當瀏覽器去SERVER端拿到數據后,需要用戶的私鑰進行解密展示听皿。
緊接著與客戶端打交道的就是BNS熟呛, BLOCK NAMING SERVICE。 這里面會從區(qū)塊里面找到所有用戶注冊的NAME信息和對應的ZONE+PUBLIC KEY尉姨。當用戶需要去讀自己或是其他用戶的數據的時候庵朝,首先就是要向BNS去發(fā)送自己的NAME。然后BNS會在區(qū)塊中找到對應的pub key + zone hash. 然后把請求轉發(fā)給下一層又厉。
第三層是叫ATLAS SERVER.他的職責是存儲ZONE RECORD九府。因為ZONE RECORD過于龐大,如果直接存進區(qū)塊這樣對資源已經性能都有很大的不利覆致。所以我們只在區(qū)塊中存放ZONE的HASH侄旬。而其對應的ZONE RECORD會放在ALTAS SERVER上。ZONE RECORD 定義了數據在第四層的具體位置煌妈。是不可變的儡羔。
第四層是GAIA SERVER宣羊。 他是對所有存儲設備的一個抽象,即統一GET,PUT接口笔链。背后可以是Amazon S3, 或者是Dropbox段只。 上面存放的數據都是通過公鑰加密的,只有用戶自己的私鑰可以解密鉴扫。
這背后就牽涉到私鑰該如何保管赞枕,因為你的設備的APP里必須包含私鑰。如果你的手機不小心丟在咖啡店坪创,被他人使用就可以冒充你做一些事情炕婶。所以可能未來私鑰還需要結合指紋?這個我也不知道莱预。
另外在區(qū)塊中搶注一個NAMING 是需要消耗比特幣為代價的柠掂,也就是說你必須為你的數據存儲支付費用。因為如果不這么做依沮,就會有很多壞人搶注掉非常多的名字涯贞。
總結
這篇文章自己其實讀的不是非常深入。收獲如下
區(qū)塊鏈的核心是共識危喉,而里面完成共識的步驟本質上是挖礦宋渔。所以我們必須基于MINING來保持事件的順序性。
區(qū)塊是昂貴資源辜限,里面存的信息越精簡越好皇拣。這樣APP才可以有足夠的性能和存儲去使用。
分布式的存儲設計十分具有吸引力薄嫡。如果你只是在聊中心化的存儲氧急,現有的系統已經很強大了。
公鑰基礎設施如果能夠被非中心化的構建出來-此處的任何進展都將是巨大的毫深,從所有用戶到其公共密鑰的通用映射將非常有用吩坝。因為每個人都可以有自己的唯一簽名和加密方案。
BLOCKSTACK除了這一點還為我們提供了NAMING 的可讀性费什。
應用程序和數據分離钾恢,聽起來是個好主意; 但是前提必須是對開發(fā)人員需要足夠友好鸳址。另外存儲付費不知道用戶是否會為此買單瘩蚪。
對隱私數據進行端到端加密是一個好主意,但是私鑰管理既痛苦又脆弱稿黍, 同時加密使共享和訪問控制非常尷尬