轉自:老雅痞
美國總統候選人米特·羅姆尼提醒我們,公司是由個人組成的。無論你是否同意他主張,這句話肯定包含大量事實。畢竟,為什麼叫做公司,而不是一群在特定規則下一起工作的人?當一家公司擁有財產時,法律合同規定該財產只能在董事會的控制下。如果一家公司做某事,那是因為它的董事會已經同意應該這樣做。如果公司僱用員工,這意味著員工同意根據一套特定的規則向公司的客戶提供服務,特別是涉及付款的時候。當一家公司承擔有限責任時,這意味著特定的人被授予了額外的行動特權,從而減少了對政府法律起訴的恐懼——一群人比普通人單獨行動擁有更多權利,但最終還是個人。無論如何,無非就是人和合同一路往下。
然而,這裡出現了一個非常有趣的問題:我們真的需要人嗎?一方面,答案是肯定的:儘管在某些後奇點未來,機器將能夠獨自生存,但在可預見的未來,人類行為與物理世界的互動是必需的。然而,另一方面,在過去的200 年裡,這個問題的答案越來越是否定的。工業革命第一次讓我們開始大規模地用機器代替人工,現在我們擁有先進的數字化工廠和機械臂,可以自行生產汽車等複雜商品。但這只是基礎底部的自動化。消除對普通體力勞動者的需求,並用少數專業人員來維護機器人,而公司的管理層則保持不變。真正的問題是,我們是否可以從另一個方向來解決這個問題?即使我們仍然需要人類來執行某些專門的任務,我們是否可以將管理從等式中移除?
大多數公司都有某種使命宣言;通常是為股東賺錢;在其他時候,包括一些與產品有關的道德義務,以及其他目標,例如幫助社區有時參與其中,至少在理論上是這樣。目前,該使命宣言僅在董事會以及最終股東對其進行解釋的情況下才存在。但是,如果借助現代信息技術的力量,我們可以將使命宣言編碼成代碼呢?也就是說,創建一個不可侵犯的合約,它可以產生收入,付錢讓人們執行某些功能,並為自己找到運行的硬件,這一切都不需要自上而下的人工指導?
正如Let’s Talk Bitcoin 的Daniel Larmier在他自己對這個概念的探索中指出的那樣,從某種意義上說,比特幣本身可以被認為是這種事物的早期原型。比特幣有2100 萬股,這些股份歸比特幣股東所有。它有員工,並且有一個支付他們的協議:大約每十分鐘向一名隨機員工支付25 比特幣。它甚至有自己的營銷部門,很大程度上是由股東自己組成的。但是,它也非常有限,它對世界幾乎一無所知,除了難度之外,它無法改變其功能的任何方面,而且它本身實際上並沒有任何東西;它只是存在,並留給世界去識別它。問題是:我們能做得更好嗎?
計算
第一個挑戰很明顯:這樣的公司實際上將如何做出任何決定?編寫代碼很容易,在給定的可預測環境下,接受給定的輸入併計算出需要採取的行動。但是誰來運行代碼呢?如果代碼只是作為計算機程序存在於某台特定機器上,那麼是什麼阻止該機器的所有者關閉整個設備,甚至修改代碼將所有資金都發送給自己?對於這個問題,只有一個有效的答案:分佈式計算。
但是,我們在這裡尋找的分佈式計算與SETI@home 和Folding@home 等項目中的分佈式計算不同;在這些情況下,仍然有一個中央服務器從分佈式節點收集數據並發送請求。相反,我們需要比特幣中所見的那種分佈式計算:一組去中心化地、自我驗證的計算的規則。在比特幣中,這是通過簡單的多數投票來完成的:如果你沒有幫助計算具有多數網絡能力的區塊鏈,你的區塊將被丟棄,你將不會獲得任何區塊獎勵。理論是沒有一個攻擊者有足夠的計算能力來破壞這種機制,因此,唯一可行的策略是“順其自然”並誠實行事以幫助支持網絡並獲得一個人的區塊獎勵。
那麼我們可以簡單地將這種機制應用於去中心化計算嗎?也就是說,我們是否可以簡單地要求網絡中的每台計算機評估一個程序,然後只獎勵那些答案與多數票匹配的人?不幸的是,答案是否定的。比特幣是一個特例,因為比特幣很簡單:它只是一種貨幣,不攜帶自己的財產或私人數據。另一方面,虛擬公司可能需要將私鑰存儲到其比特幣錢包中——該數據應該可以完整地用於沒有人,也不是像比特幣交易那樣對所有人都有效。但是,當然,私鑰必須仍然可用。因此,我們需要一些能夠以去中心化方式計算的交易簽名系統,甚至生成比特幣地址。幸運的是,比特幣讓我們能夠做到這一點。
第一個立即想到的解決方案是多重簽名地址。給定一千台計算機,這些計算機可能會繼續支持這些公司,讓它們中的每一個都創建一個私鑰,並在它們之間生成一個501-of-1000 的多重簽名地址。要花費這些資金,只需使用來自任何501 個節點的簽名構建一個交易並將其廣播到區塊鏈中。這裡的問題很明顯:交易量太大。每個簽名包含大約70 個字節,因此其中501 個將進行35 KB 的交易——這很難被網絡接受,因為bitcoind 默認拒絕任何超過10,000 字節的腳本的交易. 其次,解決方案是針對比特幣的;如果公司想為非財務目的存儲私人數據,多重簽名腳本是無用的。
多重簽名地址之所以有效,是因為有一個比特幣網絡對其進行評估,並根據評估是否成功將交易放入區塊鏈。在私有數據的情況下,類似的解決方案基本上需要一些去中心化的權限來存儲數據,並僅在請求具有1000 個簽名中的501 個時才根據需要將其發送出去——又回到開始的地方。
但是,另一種解決方案仍有希望;密碼學家給它的通用名稱是“安全多方計算”。在安全多方計算中,程序的輸入(或者更準確地說,模擬“電路”的輸入,因為安全多方計算無法處理“if”語句和條件循環)使用稱為Shamir 的秘密共享的算法進行拆分,並且將一條信息提供給每個參與者。 Shamir 的秘密共享可用於將任何數據拆分為N 個片段,這樣其中的任何K 個(但沒有K-1 個)足以恢復原始數據- 你在運行算法時選擇K 和N 是多少。 2-of-3、5-of-10 和501-of-1000 都是可能的。然後可以以分散的方式對數據片段進行評估,以便在計算結束時每個人都擁有計算結果的片段,但在計算過程中任何一個人都不會得到哪怕是最輕微的一瞥正在發生的事情。
最後,將各個部分放在一起以顯示結果。算法的運行時間為O(n3),這意味著評估計算所需的計算步驟數大致與參與者數量的立方成正比;在10 個節點,1000 個計算步驟,在1000 個節點,10 億步。在我自己的筆記本電腦上,一個簡單的C++ 十億步循環大約需要20 秒,而服務器可以在幾分之一秒內完成,因此1000 個節點目前大致處於計算實用性的極限。
事實證明,安全多方計算可用於生成比特幣地址和簽署交易。對於地址生成,協議很簡單:
-
每個人都會生成一個隨機數作為私鑰。
-
每個人都計算出私鑰對應的公鑰。
-
每個人都公開他們的公鑰,並使用Shamir 的秘密共享算法計算出一個可以從公開的一千個公鑰中的任何501 個中重建的公鑰。
-
從該公鑰生成地址。
因為公鑰可以加減,乘以甚至除以整數,令人驚訝的是,這個算法的工作原理完全符合你的預期。如果每個人都以相同的方式將501-of-1000 的私鑰放在一起,那麼該私鑰將能夠將發送到通過將501-of-1000 算法應用於相應的公鑰而生成的地址的錢花掉。之所以可行,是因為Shamir 的秘密共享實際上只是一個代數公式——也就是說,它只使用加法、減法、乘法和除法,並且可以像使用地址一樣輕鬆地“通過”公鑰計算這個公式;因此,私鑰到公鑰的轉換是在代數之前還是之後完成都沒有關係。簽署交易可以以類似的方式完成,儘管過程稍微複雜一些。
安全多方計算的美妙之處在於它不僅限於比特幣;它可以很容易地用於運行公司賴以運行的人工智能算法。所謂的“機器學習”是一組算法的通用名稱,這些算法檢測現實世界數據中的模式並允許計算機在沒有人為乾預的情況下對其進行建模,並在垃圾郵件過濾器和自動駕駛汽車等領域大量使用。 “只是代數”,也可以在安全的多方計算中實現。實際上,任何計算都可以,如果該計算被分解為輸入的各個位上的電路。可能的複雜性自然有一些限制。將復雜的算法轉換為電路通常會引入額外的複雜性,並且如上所述,Shamir’s Secret Sharing 本身就會變得昂貴。因此,它應該只真正用於實現算法的“核心”;更複雜的高級思考任務最好由外部承包商解決。
作者維塔利克·布特林2013 年9 月19 日