Skip to content

Whitepaper_zh_tw

UdjinM6 edited this page May 25, 2016 · 2 revisions

達世幣 : 一個以私隱為中心的加密貨幣

Evan Duffield - evan@dash.org Daniel Diaz - daniel@dash.org

_摘要。一個以比特幣為基礎的加密貨幣,並在中本聰的作品上作出多種改進,例如一個兩層誘因網絡 : 稱為主節點網絡。其他的改進包括匿名發送,用於提高可替換性 和 即時到帳系統,允許在沒有一個中心化的機構下能夠即時確認交易。

1 引言

比特幣[1]是一種加密貨幣並已成為一個流行的交易媒介,它亦是首款數字貨幣並已經吸引了有相當數量的使用者[2]。自它由2009年成立以來,比特幣已經在主流應用和商業用途中迅速成長[3]。在銷售點 (POS)接受比特幣付款的主要問題就是需要時間等待網絡確認該交易是否有效,另外一個選擇是支付公司已經建立其他方法,讓廠商能夠接受零確認的交易,但這些解決方案需要一個值得信賴的交易對手去調解協議以外的事務。

比特幣提供了在公開總帳中與發送者和接收者之間,一對一關係的假名交易。這樣就為所有曾經發生在網絡上的交易提供了一個永久的記錄[5]。在學術界中比特幣所提供的隱私水平之低是廣為人知的,儘管有此限制許多人仍然信賴他們在區塊鏈上的財務歷史。

達世幣是首個以中本聰的作品為基礎,並以保護私隱為核心的加密貨幣。在本文中,我們提出了一系列在比特幣之上的改進,產生了去中心化的,匿名性更強的加密貨幣。並具有防篡改的即時交易和第二重誘因點對點(P2P)網絡向達世幣網絡提供服務。

2 主節點網絡

完整節點是一個P2P網絡上運行的服務器,它允許其他節點使用它們來接收有關網絡上的更新活動。這些節點需要使用相當的網絡流量及其他資源因此需要大量的成本。其結果是,在Bitcoin網絡上這些節點的數量已經有一段時間在穩步下降了[7],因此區塊傳播所需的時間上升為40秒以上[14]。已經提出了許多解決方案例如微軟研究[4]新的獎勵計劃和Bitnodes的激勵方案[6]。

Figure 1: Bitcoin Full nodes in the spring of 2014

圖 1: 比特幣在2014年春季的完整節點

這些節點對網絡的健康非常重要。他們為客戶端提供同步的能力和令信息能夠在整個網絡快速傳播。我們提出增加一個輔助網絡,被稱為達世幣主節點網絡。這些節點將具有高度的可用性和會因應主節點獎勵方案而提供網絡所需的服務。

2.1 主節點獎勵方案 - 成本和付款

比特幣網絡上完整節點數量的減少,很大部分原因是缺乏誘因去運作一個完整節點。隨著時間的推移運行一個完整節點的成本會隨著網絡被使用增加和需要更多的帶寬而上升。由於成本上升,運營者會轉為使用精簡客戶端,這是不利於網絡的。

主節點就像比特幣網絡中的完整節點,除了它們必須給網絡提供一定水平的服務外,亦需要有相關抵押品才能參與。抵押品並不會被沒收並且在主節點的運行過程中是安全的。這允許投資者給網絡提供服務,賺取他們的投資利息並降低貨幣的波動性。

要運行主節點,節點必須儲有 1,000DASH。當主節點活躍時,節點會為網絡上的客戶端提供服務,而節點則會收取利息作為回報。這允許用戶支付服務相關的費用和獲得投資回報。所有主節點都是由同一個的資金池中獲取報酬,約45%[註腳]的區塊報酬是專門用於支付為這個方案的。

由於主節點獎勵方案是一個固定的百份比,而主節點在網絡中的數量是會變動的,預計的主節點獎勵將根據目前活躍的主節點總數而有所不同。運行主節點每天的標準收入可以通過下面的公式計算:

(n/t)* rba

其中: n 是操作員所控制的主節點數量 t 是主節點的總數 r 是當前的區塊獎勵 (目前平均約5 DASH) b 是每天平衡的區塊數量。 達世幣網絡通常是576。 a 是平均主節點付款 (佔平均區塊報酬的45%)

運行主節點的投資回報可以按下式計算

((n/t)r * ba*365) / 1000

其中,變量是與上述相同。

運作主節點的相關成本在網絡上產生出軟限制和硬限制。目前有530萬的達世幣在外流通,最多只能有5,300個主節點在網絡上運作。而軟限制就是獲得主節點所需要的達世幣的成本及達世幣在交易所中為貨幣,而不是僅僅是一個投資的工具的有限流動性。

2.2 確定順序

擬定主節點的隨機排序是由一個一個特殊的確定性算法來建立的。通過使用從每個區塊的工作量認證的哈希值,這個功能的安全性將由採礦網絡所提供。

用於選擇主節點的擬定代碼:

For(mastenode in masternodes){

n = masternode.CalculateScore();

    if(n > best_score){

best_score = n; winning_node = masternode; } }

CMasterNode::CalculateScore(){

n1 = GetProofOfWorkHash(nBlockHeight); // get the hash of this block n2 = Hash(n1); //hash the POW hash to increase the entropy n3 = abs(n2 - masternode_vin);

return n3; }

該示例代碼還可以進一步擴展以提供主節點的排名,“第二”,“第三”,“第四”主節點給列表選擇。

2.3 無需信任的仲裁人

目前,達世幣網絡有〜2400活躍主節點 [8]。通過要求1,000DASH作抵押而成為一個活躍的主節點,我們創建了一個系統,其中沒有一個人能控制整個主節點網絡。例如,如果有人想控制主節點網絡的50%,他們將不得不從公開市場買入2,300,000 DASH。 這將大幅提高價格,它會變得無法獲得所需的DASH。

通過加入主節點和抵押品要​​求,我們可以利用這個輔助網絡,在無需信任的情況下執行高度敏感的工作,在這裡沒有單一實體能夠控制高度敏感工作的結果。通過從總池選擇N擬定隨機主節點來執行相同的任務,這些節點可以充當一個諭示,而整個網絡無需做該任務。

例如執行無需信任的仲裁 (見InstantSend[9]),它使用仲裁人批准交易並鎖定輸入或服務認證的實施[10]。

另一個無需信任的仲裁人的例子可以包括利用主節點網絡作為一個去中心化金融市場的預示,使得安全去中心化的合同成為可能。舉一個合約例子,假如果蘋果股價 (AAPL) 在2016年12月31日超過300美元支的話支付給公鑰A,否則付給公鑰B.

2.4 角色與服務認證

主節點可以給網絡提供任何數量的額外服務。作為一個概念的證明,我們的首先落實了匿名發送 (PrivateSend) 和即時到帳 (InstantSend)。通過使用我們所說的服務認證,我們可以要求這些節點處於聯機狀態,響應狀態,甚至是處於正確的區塊高度。

壞蛋也可以運行主節點,但不會提供任何網絡的其餘部分所需的優質服務。為了減少人們利用系統做些他們有利的事的可能性,節點必須ping該網絡的其餘部分,以確保它們保持活躍。這項工作是由主節點網絡,通過從每區塊選擇 2個仲裁人而完成的。仲裁人A檢查仲裁人B每一區塊的服務。仲裁人A是與當前塊哈希值最接近的節點,而仲裁人B距離當前塊哈希值最遠的節點。

主節點 A (1) 檢查 主節點 B (排名 2300) 主節點 A (2) 檢查 主節點 B (排名 2299) 主節點 A (3) 檢查 主節點 B (排名 2298)

所有證明節點是活躍的工作,是由主節點網絡本身完成的。每區塊時間內大約有1%的網絡將會被檢查。即是說整個網絡每天大約會被檢查六次。為了保持這個系統是無需信任的,我們通過仲裁系統隨機選擇節點,那麼我們也需要至少次6違規行為,以取消一個節點。

為了欺騙這個系統,攻擊者將需要連續被選中六次。否則,違規行為將被系統所抵消,因為其他節點是通過仲裁制度選擇的。

攻擊者控制的主節點 / 總主節點數目 需要連續被選擇的次數 成功概率 (n/t)r 所需的達世幣
1/2300 6 6.75e-21 1,000DASH
10/2300 6 6.75e-15 10,000DASH
100/2300 6 6.75e-09 100,000DASH
500/2300 6 0.01055% 500,000DASH
1000/2300 6 0.6755% 1,000,000DASH

表1. 因為主節點不能提供服務認證而因此能欺騙整個系統的概率表示

其中: n 是由攻擊者控制的主節點總數 t 是主節點網絡中的節點總數 r 是鏈的深度

主節點的選擇是基於仲裁人系統隨機擬定的

2.5 主節點協議

主節點網絡是使用了一系列的擴展協議,包括主節點通告消息和主節點Ping 信息來在網絡上傳播。只是需要這兩個信息,便能使網絡上的節點活躍,除了這些還有其他的消息執行驗證服務的請求,匿名發送和即時到帳。

主節點網絡最初是通過發送1,000DASH到一個錢包中的特定位址,然後將“激活”該節點使其能夠通過網絡傳播而形成的。第二個私鑰會建立並用於簽署所有其它的信息。第二個密鑰允許錢包可以在單機模式下運行時完全鎖定。

使用第二個私鑰在兩個獨立的機器上運作使冷模式成為可能。主要的“熱”客戶端簽署1,000DASH的輸入,當中包括第二個私鑰於信息中。當“冷”客戶端看到包括其第二個私鑰的信息並啟動成為主節點之後。這允許“熱”客戶端機被停用 (客戶端關機) 這令到攻擊者沒有可能通過訪問啟動後的主節點來取得1,000DASH。

一旦起動,一個主節點會發送“主節點通告”消息到網絡,當中包含:

消息: (1K DASH輸入,訪問的IP地址,簽名,簽名時間,1K DASH 公鑰,第二個公鑰,捐贈公鑰,捐贈百分比)

此後每隔15分鐘,會發送一個ping消息證明節點還活躍。

消息: (1K DASH輸入,簽署(使用第二個鑰),簽署時間,停止)

隨後的時間,不活躍的節點會從網絡中移除,這會使用該節點不會再被客戶端使用或得到報酬。節點也可以不斷ping網絡,但如果他們自己的端口沒有打開的話,他們最終會被標記為不活躍狀態也不會得到報酬。

2.6 傳播主節點列表

新的客戶端進入達世幣網絡必須知道當前網絡上活躍的主節點,以便能夠使用他們的服務。一旦他們加入網狀網絡,就會發送一個命令到他們的節點要求已知主節點名單。客戶端會使用緩存對象去記錄主節點及其當前狀態。因此當客戶端重新啟動時,他們會簡單地加載該文件,而不是要求主節點的完整列表。

2.7 透過挖礦的付款與實施

為了確保每個主節點能夠獲得區塊報酬的公平份額,網絡必須確保區塊支付給正確的主節點。如果一個礦工是不符合標準的話,其區塊必須被網絡拒絕,否則將鼓勵作弊。

我們提出了一個策略,其中主節點中的仲裁人選擇一個獲獎的主節點並廣播它的訊息。訊息被廣播到選擇同一目標收款人N次之後,共識就會形成,有關的區塊會被要求支付給該主節點。

當在網絡上挖礦時,礦池軟件 (合併個別礦工算力的網站) 會使用RPC API接口,以獲取有關生成區塊的信息。為了支付給主節點,這個接口必須通過添加第二個收款人GetBlockTemplate進行擴展。礦池之後宣佈成功開採的區塊,分別支付給自己和主節點。

3 匿名發送

我們認為,需要實施一個無需信任的標準去改善客戶端的私隱從而提供使用者更高的私隱程度。其他客戶端如electrum,Android和iPhone也將有相同的匿名層直接執行和利用擴展協議。這令使用者能夠有一個共同的體驗,利用充分理解的系統去匿名處理資金。

匿名發送是CoinJoin的改進和擴展版本。除了CoinJoin的核心理念,我們採用了一系列的改進,如去中心化,使用鏈接方法 (chaining approach),除名 (denominations)和提前的被動混合來加強匿名性。

改善加密貨幣的私密性和可替代性的最大挑戰就是要使用一個不會遮擋整個區塊鏈的方式來實現。以比特幣基礎加密的貨幣,一看就知道哪些輸出未用的,哪些是已用的,這個通常被稱為UTXO,它代表未用交易輸出。其結果是一個公開總帳,允許任何人可充當交易完整性的保證人。比特幣協議是設計來在沒有可信任的交易對手下都能運作的,在他們的缺席下,用戶能夠透過訪問區塊鏈來完成審計功能是至關重要的。我們的目標是提高私密性和可互換性,而同時不會失去我們認為使一個貨幣成功的這些關鍵要素。

通過一個在貨幣之內的去中心化的混合服務,我們能夠保持貨幣本身完全可替代性。可替代性是一個金錢的屬性,它決定了貨幣的各單位要保持相等。當您收到一種貨幣的資金,它不應該有從以前的用戶的貨幣或用戶的任何相關的歷史,或用戶應該有一個簡單的方法撇清所有資金的歷史關係,從而使所有的硬幣都相同。與此同時,任何用戶應該能夠作為一個審計員,以保證公共總帳的財務完整性而不影響他人的私隱。

為了提高可互換性和保持公共區塊鏈的完整性,我們建議使用提前的去中心化,並且無需信任的混合策略。要保持貨幣是可互換的,這個服務直接構建在貨幣之上,對於一般用戶更安全和易於使用。

3.1 透過金額來追踪CoinJoin

如果要在現有的比特幣基礎上實施CoinJoin,有一個簡單的方法,就是把交易合併在一起。透過跟蹤這些接合的資金,使用者的身份將暴露出來。 Figure 2: An example CoinJoin transaction with 2 users [11][12]

圖 2: 一個把2個用戶的交易接合的CoinJoin例子 [11][12]

在這個交易中,0.05BTC通過混合器發送的。要識別的資金來源的話,只需要把右邊的金額加起來直到它們與左側的值匹配就可以了。

分解交易:

  • 0.05 + 0.0499 + 0.0001(fee) = 0.10BTC.
  • 0.0499 + 0.05940182 + 0.0001(fee) = 0.10940182BTC.

隨著更多使用者的資金加入混合器中,以這個方法追蹤資金的難度將呈指數級地增加。然而這些交易會在未來被追溯到,並讓匿名性失效。

3.2 透過鏈接和轉發鏈接

在其他的CoinJoin提議實現方式中,使用者可以是先匿名處理他的資金,最後把找零金額發送到知道使用者身份的交易平台或其他個體。這樣就打破了匿名性使得個體能通過該用戶的交易追蹤使用者的身份。我們稱這種類型的攻擊為“轉發鏈接” :

Figure 3: Forward Change Linking

圖 3: 轉發找零鏈接

在本例中中,Alice匿名處理1.2BTC,分別以1BTC和0.2BTC對外輸出。然後她從1BTC的輸出中花了0.7BTC,並收到0.3BTC的找續。這0.3BTC然後去到一個可以識別的來源,確認了Alice在先前交易中花了0.7BTC。

為了確定匿名交易發送者的身份,要從“交換”的交易環節開始,通過區塊鏈往前追溯,直至找到“Alice匿名發送的0.7個BTC”。作為交易所,你知道你的用戶剛剛以匿名交易買了東西,從而徹底打破了匿名性。我們稱這種類型的攻擊為“通過找續鏈接”。

Figure 4: Through Change Linking

圖 4: 通過找續鏈接

在第二個例子中,Alice在coinbase處花費了1.2BTC,然後將這數額匿名化再以1BTC輸出。接著,她又花費1BTC,收到0.3BTC的找續後再結合之前的0.2BTC,組成為0.5BTC對外輸出。

通過將來自匿名交易 (0.3BTC) 與她從CoinJoin交易中收到的找續,您可以鏈接整個交易歷史,從而徹底打破了匿名性。

3.3 提高私隱和拒絕服務 (DOS) 的抵抗力

由於一個交易可以由多方組成,並發送到多個參與方,匿名發送就利用了這點令合併了的交易隨後不能被拆解。鑑於所有匿名發送的交易是設置成使用者自己付給自己,這個系統是極為安全以防止盜竊,而用戶的資金始終安全無虞。目前要使用匿名發送來混合資金的話需要至少三個參與者。

Figure 5: Three users submit denominated funds into a common transaction. Users pay themselves back in the form of new outputs, which are randomly ordered.

圖 5: 三個使用者提交已除名的資金到一個共同的交易。用戶在新的輸出中自已支付給自己,這些交易都是隨機排序的。

為了從整體上增強系統的私隱,我們提議使用0.1DASH,1DASH,10DASH與100DASH作為通用面額。在每輪的混合過程中,所有用戶都必須提交相同面額的輸入和輸出。除了面額外,交易手續費會從交易中移除,取而代之的是從獨立的,零星的不可鏈接交易中一次過收取。

為了應對可能的DOS攻擊,我們建議所有的用戶在加入時把交易以抵押的形式提交到資金池中。這個交易將會設定為輸出給用戶自己和付給礦工高昂的手續費。在當用戶向混合池提出混幣請求的情況下,他們必須在這個交易開始時提供抵押品。如果在之後的任何時候,任何用戶未能合作,例如拒絕簽署,抵押品交易會自動在網絡中廣播。這會令到持續攻擊匿名網絡變得非常昂貴。

3.4 被動的匿名處理資金與鏈接

匿名發送每次的匿名處理上限為1,000DASH,也就是說需要多次操作才能匿名處理相當數量的資金。為了讓用戶體驗更為輕鬆和使計時攻擊非常困難,匿名發送是以被動模式運行。在設定的時間中,使用者的客戶端將要求透過主節點加入其他客戶端。一旦進入主節點,使用者所需要匿名處理的面額會在整個網絡中依次廣播,但沒有信息可用來識別使用者。

每次的匿名發送可以被視作是增加用戶資金匿名性的獨立的事件。然而,每次只容許三個用戶參與,因此觀察者具有三分之一的機會能追蹤交易。為了提高提供匿名的質量,我們會採用鏈接的方法,資金會經過多個主節點陸續發送出去。

鏈的深度 可能的用戶 (n)r
2 9
4 81
8 6561
表2. 在N輪的混合過程中有多少用戶可能涉及其中。

3.5 安全性考慮

由於交易合併的關係,主節點有可能在資金經過的時候進行“窺探”。由於主節點都要求持有1,000DASH而且用戶是隨機選擇主節點來負責加入要求,所以這並不構成一個嚴重的影響。透過鏈接來追蹤交易的概率計算如下:

攻擊者控制的主節點 / 總主節點數 鏈的深度 成功概率 (n/t)r 所需的DASH
10/1010 2 9.80e-05 10,000DASH
10/1010 4 9.60e-09 10,000DASH
10/1010 8 9.51e-11 10,000DASH
100/1100 2 8.26e-03 100,000DASH
100/1100 4 6.83e-05 100,000DASH
100/1100 8 4.66e-09 100,000DASH
1000/2000 2 25% 1,000,000DASH
1000/2000 4 6.25% 1,000,000DASH
1000/2000 8 0.39% 1,000,000DASH
2000/3000 2 44.4% 2,000,000DASH
2000/3000 4 19.75% 2,000,000DASH
2000/3000 8 3.90% 2,000,000DASH

表3. 當攻擊者控制了N個節點時,能夠追蹤到網絡上匿名發送交易的概率

其中: n 是由攻擊者控制的主節點總數 t 是主節點網絡中的節點總數 r 是鏈的深度

主節點是隨機選擇的。

考慮達世幣的供應量有限 (在2015年4月撰寫本文時候,只有5.3百萬個) 和市場上的低流動性,要控制足夠的主節點來實現這樣的攻擊是不可能的。

通過遮蓋主節點上發生的交易來擴展系統,也會大大提高系統的安全性。

3.6 通過中繼系統來遮蓋主節點

在3.4章節中我們描述了經過多次匿名發送混合後能夠追蹤到一個交易的概率。我們能夠透過遮蓋主節點交易來進一步強化這個機制,令到它們無法看到哪個輸入/輸出屬於哪個用戶。要做到這一點,我們提出了一個簡單的中繼系統,用戶可以用它來保護自己的身份。

讓使用者從整個網絡中隨機選擇主節點然後要求它將輸入/輸出/的簽名中繼傳輸到目標主節點,而並非由用戶直接提交的輸入和輸出入到池中。這意味著,主節點將接收N次的輸入/輸出和N組簽名。每一組只屬於其中一個用戶,但主節點無法知道究竟是哪個用戶。

4 經即時到帳系統處理的即時交易

通過利用主節點仲裁人制度,用戶能夠即時發送和接收不可逆轉的交易。一旦仲裁人被選出,該交易的輸入會被鎖定以至它只能用於支付特定的交易,在目前的網絡上要鎖定一個交易大概需要四秒鐘。如果主節點網絡達成一個交易鎖定的共識的話,所有與它有衝突的交易或區塊將會隨後被拒絕,除非它們能與當時被鎖定的交易相對應的ID一致。

這使供應商能夠使用移動設備以取代傳統的POS系統,用戶可以在現實的商業環境中進行面對面的非商業交易就好像傳統的現金一樣。這個操作中沒有任可的中央機構。此功能的詳盡介紹可以在InstantSend的白皮書中找到[9]。

5 其他改進

5.1 x11 算法

X11是一種廣泛使用的哈希算法,它與其他算法不同,被稱為算法鏈接。X11由所有11 SHA3算法所組成[13],每個哈希值計算出來後,都將提交給算法鏈中的下一個算法。通過利用多個算法,可以減低在早期製造出對應這個加密貨幣的ASIC的可能性。

在比特幣的生命週期中,挖礦行為始於它的愛好者使用中央處理器 (CPU) 來開採這個貨幣,隨後使用圖形處理器 (GPU) 軟件來進行挖礦,因此取代了中央處理器。在GPU 的周期後,又製造出針對比特幣算法的ASIC或專用集成電路,這些機器迅速取代了GPU的地位。

考慮到專門為X11算法而設計的ASIC礦機的複雜性和機器製造的困難性,我們預計這將較比特幣需要更多的時間進行研發,這就允許愛好者有更長的時間參與挖礦。我們深信這對加密貨幣的良好分配和成長起著極其重要的作用。

另一個算法鏈接的好處是高端的CPU能夠獲得類似於GPU的平均回報。相對其他以採用Scrypt 算法的加密貨幣,所消耗的功率較為少,而GPU的溫度也相對之下低30-50%。

5.2 挖礦與供應

達世幣採用另一種做法來限制挖礦通脹,使用每年減少供應量的7%。以此來取代其他貨幣的減半發行量。除此以外,每區塊的獎勵取決於網絡上礦工的數量; 更多的礦工則導致較低的採礦獎勵。

達世幣的生產將於本世紀及下一個世紀持續進行,直到最後2150年左右,生產將停止。

Figure 6: Mining Reward Schedule

圖6 : 採礦獎勵安排

6 結論

本文介紹了各種概念來改進比特幣的設計從而提高了私隱與可替代性給一般用戶,更少的價格波動和在整個網絡中更快的信息傳播。 這一切都是通過利用兩層誘因模式,而不是其他現有的加密貨幣中的單層誘因模式來實現的。利用這種另類的網絡設計就有可能添加許多類型的服務,如去中心化的資金混合,即時交易和利用主節點仲裁人的去中心化預言。

參考

  1. A peer-to-peer electronic cash system (2008)
  2. http://eprints.qut.edu.au/69169/1/Boyen_accepted_draft.pdf
  3. https://www.cryptocoinsnews.com/3-solutions-instant-bitcoin-confirmations/
  4. http://research.microsoft.com/pubs/156072/bitcoin.pdf
  5. http://www0.cs.ucl.ac.uk/staff/s.meiklejohn/files/imc13.pdf
  6. https://getaddr.bitnodes.io/nodes/incentive/
  7. https://medium.com/zapchain-magazine/why-don-t-people-run-bitcoin-nodes-anymore-d4da0b45aae5
  8. https://dashninja.pl/
  9. https://www.dash.org/wp-content/uploads/2014/09/InstantTX.pdf
  10. https://github.com/dashpay/dash/blob/master/src/Masternode-pos.cpp
  11. https://blockchain.info/tx/4eb3b2f9fe597d0aef6e43b58bbaa7b8fb727e645fa89f922952f3e57ee6d603
  12. https://blockchain.info/tx/1694122b34c8543d01ad422ce600d59f8d8fde495ac9ddd894edc7139aed7617
  13. http://en.wikipedia.org/wiki/NIST_hash_function_competition#Finalists
  14. http://www.tik.ee.ethz.ch/file/49318d3f56c1d525aabf7fda78b23fc0/P2P2013_041.pdf