導航:首頁 > 源碼編譯 > 非互動式交易驗證演算法

非互動式交易驗證演算法

發布時間:2023-05-21 01:14:42

① 虛擬貨幣和什麼演算法有關

Litecoin

Litecoin(LTC)發布於2011年10月7日,是目前市值最高的山寨幣,約為 BTC 市值的2%。目前單價為2.31美元,總幣值 3800 萬美元。

這同樣是一種分布式(去中心化)的數字貨幣。不同於比特幣使用的 SHA256 挖礦演算法,LTC 採用 scrypt 演算法。獨特的演算法也是從山寨幣中脫穎而出的關鍵,scrypt 演算法使用 SHA256 作為其子程序,而 scrypt 自身需要大量的內存,每個散列作為輸入的種子使用的,然後與需要大量的內存存儲另一種子偽隨機序列,共同生成序列的偽隨機點而輸出哈希值。在 BTC(Bitcoin)的開采依靠單純的顯卡挖礦已經力不從心(利用一般配置顯卡挖到一個 BTC 大概需要十幾到數十天),各種價格不菲挖礦機的出現提高了普通人通過挖礦獲得 BTC 的門檻,而 LTC 在使用 PC 顯卡挖礦上具有一定優勢。(本段來源於知乎。)

Litecoin 對比 BTC 在技術上做了一點的改進,如果現在 BTC 是金,那 LTC 暫時是銀。

Litecoin 的最大優點是能更快確認真偽,該虛擬貨幣由 Charles Lee 設計和維護。比特幣的交易需要驗證,驗證的時間平均在10分鍾以上,大多數交易網站驗證需要1個小時。Litecoin 交易確認平均為2.5分鍾,開發者聲稱縮短驗證增加了虛擬貨幣的實用性。定製機器和 AMD GPU 的比特幣采礦效率最高,令使用 CPU 采礦的礦工幾乎無利可圖。Litecoin 的采礦排除了 GPU 和定製處理器,因此不過於依賴少量專業礦工。

PPCoin

PPCoin(PPC) 發布於2012年8月19,在 BTC 原有技術上有所提升。使用 proof-of-stake,並加入 coin age 概念。

PPCoin 是 Bitcoin 的分叉項目,目標是實現能源效率,並盡可能保持原 Bitcoin 的最好性能。PPCoin 單價0.22美元,總幣值 400 萬美元。

PPCoin 沒有一個固定的貨幣供應量上限,但這並不意味著 PPCoin 比 Bitcoin 有明顯通脹。可以將 Bitcoin 比做黃金,黃金每年的通脹是1-3%左右,雖然黃金並沒有已知的貨幣供應量上限,但我們仍知道它是可靠的稀缺品。

PPCoin 的鑄造有兩種類型,工作證明及股權證明。工作證明的鑄幣率受摩爾定律影響,這取決於我們的工作證明能力的成倍增長。而大家都知道的是摩爾定律最終會結束,到那時通脹的 PPCoin 可能已經接近黃金的水平。而股權證明鑄造每年最多通脹 1%。與此同時,PPCoin 的交易費用被銷毀以抗衡通脹。所以整體來說, PPCoin 的鑄幣設計仍是未來一個非常低的通脹設計,可以達到和 Bitcoin 相媲美的程度。

PPCoin 的獎勵方式類似彩票,會根據礦工持有的 PPCoin 數量決定獲勝幾率,創始人之一的 Sunny King 說,他們的設計是基於長期能量效率的新概念。

Terracoin

Terracoin(TRC)發布於2012年10月26,總幣量 4200 萬。每塊速度為2分鍾,比 LTC 稍快一些。技術上沒有太多特別之處,類似 BTC 每4年產量減半。

不過運營團隊似乎有較強商業背景,可能會在流通上優於其他比特幣。虛擬貨幣現在的發展越來越得到重視,現在一些有商業背景的團隊進入,會加速虛擬貨幣的發展。

Namecoin

Namecoin 是一個基於比特幣技術的分布式域名系統,其原理和 Bitcoin 一樣, 這個開源軟體首次發布的日期是2011年4月18日。

Namecoin 產生於一個不同於 Bitcoin 主交易區塊的起源塊, 使用一個新的區塊鏈(blockchain),獨立於 Bitcoin 的區塊鏈之外,因為是基於 Bitcoin,域名的安全性, 分布性, 魯棒性, 加密性, 遷移都有數學保證。可以用挖 Bitcoin 的方式,同時挖 Namecoin。

② 內蒙古將禁止比特幣挖礦,這傳達了什麼信息

這可能會讓礦業的整體格局經歷某種形式的轉變。

在內蒙古禁止采礦活動應該不會對網路哈希率產生重大影響,因為礦工只會為他們的礦機找到”新家“——要麼在中國的另一個省份,要麼在歐盟或北美。

這也意味著,由於內蒙古的礦工主要使用煤炭,因此在中國將有較大比例的采礦業會使用可再生能源。隨著五月份雨季的開始,內蒙古的許多礦工都將在那個時候搬到四川。

礦工們在挖礦過程中會得到兩種類型的獎勵:創建新區塊的新幣獎勵,以及區塊中所含交易的交易費。為了得到這些獎勵,礦工們爭相完成一種基於加密哈希演算法的數學難題,也就是利用比特幣挖礦機進行哈希演算法的計算,這需要強大的計算能力,計算過程多少,計算結果好壞作為礦工的計算工作量的證明,被稱為“工作量證明”。該演算法的競爭機制以及獲勝者有權在區塊鏈上進行交易記錄的機宴衫拍制,這二者保障了比特幣的安全。

③ 區塊鏈論文精讀——Pixel: Multi-signatures for Consensus

論文主要提出了一種兆數茄針對共識機制PoS的多重簽名演算法Pixel。

所有基於PoS的區塊鏈以及允許的區塊鏈均具有通用結構,其中節點運行共識子協議,以就要添加到分類賬的下一個區塊達成共識。這樣的共識協議通常要求節點檢查阻止提議並通過對可接受提議進行數字簽名來表達其同意。當一個節點從特定塊上的其他節點看到足夠多的簽名時,會將其附加到其分類帳視圖中。

由於共識協議通常涉及成千上萬的節點,為了達成共識而共同努力,因此簽名方案的效率至關重要。此外,為了使局外人能夠有效地驗證鏈的有效性,簽名應緊湊以進行傳輸,並應快速進行驗證。已發現多重簽名對於此任務特別有用,因為它們使許多簽名者可以在公共消息上創建緊湊而有效的可驗證簽名。

補充知識: 多重簽名
是一種數字簽名。在數字簽名應用中,有時需要多個用戶對同一個文件進行簽名和認證。比如,一個公司發布的聲明中涉及財務部、開發部、銷售部、售後服務部等部門,需要得到這些部門簽名認可,那麼,就需要這些部門對這個聲明文件進行簽名。能夠實現多個用戶對同一文件進行簽名的數字簽名方案稱作多重數字簽名方案。
多重簽名是數字簽名的升級,它讓區塊鏈相關技術應用到各行各業成為可能。 在實際的操作過程中,一個多重簽名地址可以關聯n個私鑰,在需要轉賬等操作時,只要其中的m個私鑰簽名就可以把資金轉移了,其中m要小於等於n,也就是說m/n小於1,可以是2/3, 3/5等等,是要在建立這個多重簽名地址的時候確定好的。

本文提出了Pixel簽名方案,這是一種基於配對的前向安全多簽名方案,可用於基於PoS的區塊鏈,可大幅節省帶寬和存儲要求。為了支持總共T個時間段和一個大小為N的委員會,多重簽名僅包含兩個組元素,並且驗證僅需要三對配對,一個乘冪和N -1個乘法。像素簽名幾乎與BLS多重簽名一樣有效,而且還滿足前向安全性。此外,就像在BLS多簽名中一樣,任何人都可以非交互地將單個簽名聚合到一個多簽名中。

有益效果:
為了驗證Pixel的設計,將Pixel的Rust實施的性能與以前的基於樹的前向安全解決方案進行了比較。展示了如何將Pixel集成到任何PoS區塊鏈中。接下來,在Algorand區塊鏈上評估Pixel,表明它在存儲,帶寬和塊驗證時間方面產生了顯著的節省。我們的實驗結果表明,Pixel作為獨立的原語並在區塊鏈中使用是有效的。例如,與一組128位安全級別的N = 1500個基於樹的前向安全簽名(對於T = 232)相比,可以認證整個集合的單個Pixel簽名要畢型小2667倍,並且可以被驗證快40倍。像素簽名將1500次事務的Algorand塊的大小減少了約35%,並將塊驗證時間減少了約38%。

對比傳統BLS多重簽名方案最大的區別是BLS並不具備前向安全性。

對比基於樹的前向安全簽名,基於樹的前向安全簽名可滿足安全性,但是其構造的簽名太大,驗證速度有待提升。 本文設計減小了簽名大小、降低了驗證時間。

補充知識: 前向安全性
是密碼學中通訊協議的安全屬性,指的是長期使用的主密鑰泄漏不會導致過去的會話密鑰泄漏。前向安全能夠保護過去進行的通訊不受密碼或密鑰在未來暴露的威脅。如果系統具有前向安全性,就可以保證在主密鑰泄露時歷史通訊的安全,即使系統遭到主動攻擊也是如此。

構建基於分層身份的加密(HIBE)的前向安全簽名,並增加了在同一消息上安全地聚合簽名以及生成沒有可信集的公共參數的能力。以實現:
1、生成與更新密鑰
2、防止惡意密鑰攻擊的安全性
3、無效的信任設置

對於常見的後攻擊有兩種變體:
1、短程變體:對手試圖在共識協議達成之前破壞委員會成員。解決:通過假設攻擊延遲長於共識子協議的運行時間來應對短距離攻擊。
2、遠程變體:通過分叉選擇規則解決。
前向安全簽名為這兩種攻擊提供了一種干凈的解決方案,而無需分叉選擇規則或有關對手和客戶的其他假設。(說明前向安全簽名的優勢)。

應用於許可的區塊鏈共識協議(例如PBFT)也是許多許可鏈(例如Hyperledger)的核心,在這些區塊鏈中,只有經過批準的方可以加入族察網路。我們的簽名方案可以類似地應用於此設置, 以實現前向保密性,減少通信帶寬並生成緊湊的塊證書。

傳統Bellare-Miner 模型,消息空間M的前向安全簽名方案FS由以下演算法組成:
1、Setup
pp ←Setup(T), pp為各方都同意的公共參數,Setup(T)表示在T時間段內對於固定參數的分布設置。

2、Key generation
(pk,sk1) ←Kg
簽名者在輸入的最大時間段T上運行密鑰生成演算法,以為第一時間段生成公共驗證密鑰pk和初始秘密簽名密鑰sk1。

3、Key update
skt+1←Upd(skt) 簽名者使用密鑰更新演算法將時間段t的秘密密鑰skt更新為下一個周期的skt + 1。該方案還可以為任何t0> t提供 「快速轉發」更新演算法 skt0←$ Upd0(skt,t0),該演算法比重復應用Upd更有效。

4、Signing
σ ←Sign(skt,M),在輸入當前簽名密鑰skt消息m∈M時,簽名者使用此演算法來計算簽名σ。

5、Verification
b ← Vf(pk,t,M,σ)任何人都可以通過運行驗證演算法來驗證消息M在公共密鑰pk下的時間段t內的簽名M的簽名,該演算法返回1表示簽名有效,否則返回0。

1、依靠非對稱雙線性組來提高效率,我們的簽名位於G2×G1中而不是G2 ^2中。這樣,就足以給出公共參數到G1中(然後我們可以使用散列曲線實例化而無需信任設置),而不必生成「一致的」公共參數(hi,h0 i)=(gxi 1,gxi 2)∈G1× G2。

2、密鑰生成演算法,公鑰pk更小,參數設置提升安全性。

除了第3節中的前向安全簽名方案的演算法外,密鑰驗證模型中的前向安全多重簽名方案FMS還具有密鑰生成,該密鑰生成另外輸出了公鑰的證明π。
新增Key aggregation密鑰匯總、Signature aggregation簽名匯總、Aggregate verification匯總驗證。滿足前向安全的多重簽名功能的前提下也證明了其正確性和安全性。

1、PoS在後繼損壞中得到保護
後繼損壞:後驗證的節點對之前的共識驗證狀態進行攻擊破壞。
在許多用戶在同一條消息上傳播許多簽名(例如交易塊)的情況下,可以將Pixel應用於所有這些區塊鏈中,以防止遭受後繼攻擊並潛在地減少帶寬,存儲和計算成本。

2、Pixel整合
為了對區塊B進行投票,子協議的每個成員使用具有當前區塊編號的Pixel簽署B。當我們看到N個委員會成員在同一塊B上簽名的集合時,就達成了共識,其中N是某個固定閾值。最後,我們將這N個簽名聚合為單個多重簽名Σ,而對(B,Σ)構成所謂的 區塊證書 ,並將區塊B附加到區塊鏈上。

3、注冊公共密鑰
希望參與共識的每個用戶都需要注冊一個參與簽名密鑰。用戶首先採樣Pixel密鑰對並生成相應的PoP。然後,用戶發出特殊交易(在她的消費密鑰下簽名), 注冊新的參與密鑰 。交易包括PoP。選擇在第r輪達成協議的PoS驗證者,檢查(a)特殊交易的有效性和(b)PoP的有效性。如果兩項檢查均通過,則 使用新的參與密鑰更新用戶的帳戶 。從這一點來看,如果選中,則用戶將使用Pixel登錄塊。
即不斷更換自己的參與密鑰,實現前向安全性。

4、傳播和聚集簽名
各個委員會的簽名將通過網路傳播,直到在同一塊B上看到N個委員會成員的簽名為止。請注意,Pixel支持非互動式和增量聚合:前者意味著簽名可以在廣播後由任何一方聚合,而無需與原始簽名者,而後者意味著我們可以將新簽名添加到多重簽名中以獲得新的多重簽名。實際上,這意味著傳播的節點可以對任意數量的委員會簽名執行中間聚合並傳播結果,直到形成塊證書為止。或者,節點可以在將塊寫入磁碟之前聚合所有簽名。也就是說,在收到足夠的區塊證明票後,節點可以將N個委員會成員的簽名聚集到一個多重簽名中,然後將區塊和證書寫入磁碟。

5、密鑰更新
在區塊鏈中使用Pixel時,時間對應於共識協議中的區塊編號或子步驟。將時間與區塊編號相關聯時,意味著所有符合條件的委員會成員都應在每次形成新區塊並更新輪回編號時更新其Pixel密鑰。

在Algorand 項目上進行實驗評估,與Algorand項目自帶的防止後腐敗攻擊的解決方案BM-Ed25519以及BLS多簽名解決方案做對比。

存儲空間上:

節省帶寬:
Algorand使用基於中繼的傳播模型,其中用戶的節點連接到中繼網路(具有更多資源的節點)。如果在傳播過程中沒有聚合,則中繼和常規節點的帶寬像素節省來自較小的簽名大小。每個中繼可以服務數十個或數百個節點,這取決於它提供的資源。

節省驗證時間

④ CBOF非互動式隨機數生成演算法是指什麼

非互動式隨機數生成演算法枯脊是指無需用戶提供額外自定義信息參與隨機數種子生沒山滲成的演算法。這在分布式存儲應用各種可以起到隱私保護和公平唯衡的作用。

⑤ 知鏈區塊鏈金融應用實踐平台成績怎麼算

1. 工作量證明(PoW)
中本聰在2009年提出的比特幣(Bitcoin)是區塊鏈技術最早的應用,其採用PoW作為共識演算法,其核心思想是節點間通過哈希算力的競爭來獲取記賬權和比特幣獎勵。PoW中,不同節點根據特定信息競爭計算一個數學問題的解,這個數學問題很難求解,但卻容易對結果進行驗證,最先解決這個數學問題的節點可以創建下一個區塊並獲得一定數量的幣獎勵。中本聰在比特幣中採用了HashCash[4]機制設計這一數學問題。本節將以比特幣採用的PoW演算法為例進行說明,PoW的共識步驟如下:
節點收集上一個區塊產生後全網待確認的交易,將符合條件的交易記入交易內存池,然後更新並計算內存池中交易的Merkle根的值,並將其寫入區塊頭部;
在區塊頭部填寫如表1.1所示的區塊版本號、前一區塊的哈希值、時間戳、當前目標哈希值和隨機數等信息;
表1.1 區塊頭部信息
隨機數nonce在0到232之間取值,對區塊頭部信息進行哈希計算,當哈希值小於或等於目標值時,打包並廣播該區塊,待其他節點驗證後完成記賬;
一定時間內如果無法計算出符合要求的哈希值,則重復步驟2。如果計算過程中有其他節點完成了計算,則從步驟1重新開始。
比特幣產生區塊的平均時間為10分鍾,想要維持這一速度,就需要根據當前全網的計算能力對目標值(難度)進行調整[5]。難度是對計算產生符合要求的區塊困難程度的描述,在計算同一高度區塊時,所有節點的難度都是相同的,這也保證了挖礦的公平性。難度與目標值的關系為:
難度值=最大目標值/當前目標值 (1.1)
其中最大目標值和當前目標值都是256位長度,最大目標值是難度為1時的目標值,即2224。假設當前難度為,算力為,當前目標值為,發現新區塊的平均計算時間為,則
根據比特幣的設計,每產生2016個區塊後(約2周)系統會調整一次當前目標值。節點根據前2016個區塊的實際生產時間,由公式(1.4)計算出調整後的難度值,如果實際時間生產小於2周,增大難度值;如果實際時間生產大於2周,則減小難度值。根據最長鏈原則,在不需要節點同步難度信息的情況下,所有節點在一定時間後會得到相同的難度值。
在使用PoW的區塊鏈中,因為網路延遲等原因,當同一高度的兩個區塊產生的時間接近時,可能會產生分叉。即不同的礦工都計算出了符合要求的某一高度的區塊,並得到與其相近節點的確認,全網節點會根據收到區塊的時間,在先收到的區塊基礎上繼續挖礦。這種情況下,哪個區塊的後續區塊先出現,其長度會變得更長,這個區塊就被包括進主鏈,在非主鏈上挖礦的節點會切換到主鏈繼續挖礦。
PoW共識演算法以算力作為競爭記賬權的基礎,以工作量作為安全性的保障,所有礦工都遵循最長鏈原則。新產生的區塊包含前一個區塊的哈希值,現存的所有區塊的形成了一條鏈,鏈的長度與工作量成正比,所有的節點均信任最長的區塊鏈。如果當某一組織掌握了足夠的算力,就可以針對比特幣網路發起攻擊。當攻擊者擁有足夠的算力時,能夠最先計算出最新的區塊,從而掌握最長鏈。此時比特幣主鏈上的區塊大部分由其生成,他可以故意拒絕某些交易的確認和進行雙花攻擊,這會對比特幣網路的可信性造成影響,但歷派這一行為同樣會給攻擊者帶來損失。通過求解一維隨機遊走問題,可以獲得惡意節點攻擊成功的概率和算力之間的關系:
圖1.1 攻擊者算力與攻擊成功概率
2. 權益證明(PoS)
隨著參與比特幣挖礦的人越來越多,PoW的許多問題逐漸顯現,例如隨著算力競爭迅速加劇,獲取代幣需要消耗的能源大量增加,記賬權也逐漸向聚集了大量算力的「礦池」集中[6-9]。為此,研究者嘗試採用新的機製取代工作量證明。PoS的概念在最早的比特幣項目中曾被提及,但由於穩健性等原因沒被使用。PoS最早的應用是點點幣(肢肢賀PPCoin),PoS提出了幣齡的概念,幣齡是持有的代幣與持有時間乘積的累加,計算如公式(1.4)所示。利用幣齡競爭取代算力競爭,使區塊鏈的證明不再僅僅依靠工作量,有效地解決了PoW的資源浪費問題。
其中持有時間為某個幣距離最近一次在網路上交易的時間,每個節點持有的幣齡越長,則其在網路中權益越多,同時幣的持有人還會根據幣齡來獲得一定的收益。點點幣的設計中,沒有完全脫離工作量證明,PoS機制的記賬權的獲得同樣需要進行簡單的哈希計算:
其中proofhash是由權重因子、未飢逗消費的產出值和當前時間的模糊和得到的哈希值,同時對每個節點的算力進行了限制,可見幣齡與計算的難度成反比。在PoS中,區塊鏈的安全性隨著區塊鏈的價值增加而增加,對區塊鏈的攻擊需要攻擊者積攢大量的幣齡,也就是需要對大量數字貨幣持有足夠長的時間,這也大大增加了攻擊的難度。與PoW相比,採用PoS的區塊鏈系統可能會面對長程攻擊(Long Range Attack)和無利害攻擊(Nothing at Stake)。
除了點點幣,有許多幣也使用了PoS,但在記賬權的分配上有著不同的方法。例如,未來幣(Nxt)和黑幣(BlackCion)結合節點所擁有的權益,使用隨機演算法分配記賬權。以太坊也在逐步採用PoS代替PoW。
3. 委託權益證明(DPoS)
比特幣設計之初,希望所有挖礦的參與者使用CPU進行計算,算力與節點匹配,每一個節點都有足夠的機會參與到區塊鏈的決策當中。隨著技術的發展,使用GPU、FPGA、ASIC等技術的礦機大量出現,算力集中於擁有大量礦機的參與者手中,而普通礦工參與的機會大大減小。
採用DPoS的區塊鏈中,每一個節點都可以根據其擁有的股份權益投票選取代表,整個網路中參與競選並獲得選票最多的n個節點獲得記賬權,按照預先決定的順序依次生產區塊並因此獲得一定的獎勵。競選成功的代表節點需要繳納一定數量的保證金,而且必須保證在線的時間,如果某時刻應該產生區塊的節點沒有履行職責,他將會被取消代表資格,系統將繼續投票選出一個新的代表來取代他。
DPoS中的所有節點都可以自主選擇投票的對象,選舉產生的代表按順序記賬,與PoW及PoS相比節省了計算資源,而且共識節點只有確定的有限個,效率也得到了提升。而且每個參與節點都擁有投票的權利,當網路中的節點足夠多時,DPoS的安全性和去中心化也得到了保證。
4. 實用拜占庭容錯演算法(PBFT)
在PBFT演算法中,所有節點都在相同的配置下運行,且有一個主節點,其他節點作為備份節點。主節點負責對客戶端的請求進行排序,按順序發送給備份節點。存在視圖(View)的概念,在每個視圖中,所有節點正常按照處理消息。但當備份節點檢查到主節點出現異常,就會觸發視圖變換(View Change)機制更換下一編號的節點為主節點,進入新的視圖。PBFT中客戶端發出請求到收到答復的主要流程如圖4.1所示[10] [11],伺服器之間交換信息3次,整個過程包含以下五個階段:
圖4.1 PBFT執行流程
目前以PBFT為代表的拜占庭容錯演算法被許多區塊鏈項目所使用。在聯盟鏈中,PBFT演算法最早是被Hyper ledger Fabric項目採用。Hyperledger Fabric在0.6版本中採用了PBFT共識演算法,授權和背書的功能集成到了共識節點之中,所有節點都是共識節點,這樣的設計導致了節點的負擔過於沉重,對TPS和擴展性有很大的影響。1.0之後的版本都對節點的功能進行了分離,節點分成了三個背書節點(Endorser)、排序節點(Orderer)和出塊節點(Committer),對節點的功能進行了分離,一定程度上提高了共識的效率。
Cosmos項目使用的Tendermint[12]演算法結合了PBFT和PoS演算法,通過代幣抵押的方式選出部分共識節點進行BFT的共識,其減弱了非同步假設並在PBFT的基礎上融入了鎖的概念,在部分同步的網路中共識節點能夠通過兩階段通信達成共識。系統能夠容忍1/3的故障節點,且不會產生分叉。在Tendermint的基礎上,Hotstuff[13]將區塊鏈的塊鏈式結構和BFT的每一階段融合,每階段節點間對前一區塊簽名確認與新區塊的構建同時進行,使演算法在實現上更為簡單,Hotstuff還使用了門限簽名[14]降低演算法的消息復雜度。
5. Paxos與Raft
共識演算法是為了保障所存儲信息的准確性與一致性而設計的一套機制。在傳統的分布式系統中,最常使用的共識演算法是基於Paxos的演算法。在拜占庭將軍問題[3]提出後,Lamport在1990年提出了Paxos演算法用於解決特定條件下的系統一致性問題,Lamport於1998年重新整理並發表Paxos的論文[15]並於2001對Paxos進行了重新簡述[16]。隨後Paxos在一致性演算法領域占據統治地位並被許多公司所採用,例如騰訊的Phxpaxos、阿里巴巴的X-Paxos、亞馬遜的AWS的DynamoDB和谷歌MegaStore[17]等。這一類演算法能夠在節點數量有限且相對可信任的情況下,快速完成分布式系統的數據同步,同時能夠容忍宕機錯誤(Crash Fault)。即在傳統分布式系統不需要考慮參與節點惡意篡改數據等行為,只需要能夠容忍部分節點發生宕機錯誤即可。但Paxos演算法過於理論化,在理解和工程實現上都有著很大的難度。Ongaro等人在2013年發表論文提出Raft演算法[18],Raft與Paxos同樣的效果並且更便於工程實現。
Raft中領導者占據絕對主導地位,必須保證伺服器節點的絕對安全性,領導者一旦被惡意控制將造成巨大損失。而且交易量受到節點最大吞吐量的限制。目前許多聯盟鏈在不考慮拜占庭容錯的情況下,會使用Raft演算法來提高共識效率。
6. 結合VRF的共識演算法
在現有聯盟鏈共識演算法中,如果參與共識的節點數量增加,節點間的通信也會增加,系統的性能也會受到影響。如果從眾多候選節點中選取部分節點組成共識組進行共識,減少共識節點的數量,則可以提高系統的性能。但這會降低安全性,而且候選節點中惡意節點的比例越高,選出來的共識組無法正常運行的概率也越高。為了實現從候選節點選出能夠正常運行的共識組,並保證系統的高可用性,一方面需要設計合適的隨機選舉演算法,保證選擇的隨機性,防止惡意節點對系統的攻擊。另一方面需要提高候選節點中的誠實節點的比例,增加誠實節點被選進共識組的概率。
當前在公有鏈往往基於PoS類演算法,抵押代幣增加共識節點的准入門檻,通過經濟學博弈增加惡意節點的作惡成本,然後再在部分通過篩選的節點中通過隨機選舉演算法,從符合條件的候選節點中隨機選舉部分節點進行共識。
Dodis等人於1999年提出了可驗證隨機函數(Verifiable Random Functions,VRF)[19]。可驗證隨機函數是零知識證明的一種應用,即在公私鑰體系中,持有私鑰的人可以使用私鑰和一條已知信息按照特定的規則生成一個隨機數,在不泄露私鑰的前提下,持有私鑰的人能夠向其他人證明隨機數生成的正確性。VRF可以使用RSA或者橢圓曲線構建,Dodis等人在2002年又提出了基於Diffie-Hellman 困難性問題的可驗證隨機函數構造方法[20],目前可驗證隨機函數在密鑰傳輸領域和區塊鏈領域都有了應用[21]。可驗證隨機函數的具體流程如下:
在公有鏈中,VRF已經在一些項目中得到應用,其中VRF多與PoS演算法結合,所有想要參與共識的節點質押一定的代幣成為候選節點,然後通過VRF從眾多候選節點中隨機選出部分共識節點。Zilliqa網路的新節點都必須先執行PoW,網路中的現有節點驗證新節點的PoW並授權其加入網路。區塊鏈項目Ontology設計的共識演算法VBFT將VRF、PoS和BFT演算法相結合,通過VRF在眾多候選節點中隨機選出共識節點並確定共識節點的排列順序,可以降低惡意分叉對區塊鏈系統的影響,保障了演算法的公平性和隨機性。圖靈獎獲得者Micali等人提出的Algorand[22]將PoS和VRF結合,節點可以採用代幣質押的方式成為候選節點,然後通過非互動式的VRF演算法選擇部分節點組成共識委員會,然後由這部分節點執行類似PBFT共識演算法,負責交易的快速驗證,Algorand可以在節點為誠實節點的情況下保證系統正常運行。Kiayias等人提出的Ouroboros[23]在第二個版本Praos[24]引入了VRF代替偽隨機數,進行分片中主節點的選擇。以Algorand等演算法使用的VRF演算法為例,主要的流程如下:
公有鏈中設計使用的VRF中,節點被選為記賬節點的概率往往和其持有的代幣正相關。公有鏈的共識節點范圍是無法預先確定的,所有滿足代幣持有條件的節點都可能成為共識節點,系統需要在數量和參與度都隨機的節點中選擇部分節點進行共識。而與公有鏈相比,聯盟鏈參與共識的節點數量有限、節點已知,這種情況下聯盟鏈節點之間可以通過已知的節點列表進行交互,這能有效防止公有鏈VRF設計時可能遇到的女巫攻擊問題。
7. 結合分片技術的公式演算法
分片技術是資料庫中的一種技術,是將資料庫中的數據切成多個部分,然後分別存儲在多個伺服器中。通過數據的分布式存儲,提高伺服器的搜索性能。區塊鏈中,分片技術是將交易分配到多個由節點子集組成的共識組中進行確認,最後再將所有結果匯總確認的機制。分片技術在區塊鏈中已經有一些應用,許多區塊鏈設計了自己的分片方案。
Luu等人於2017年提出了Elastico協議,最先將分片技術應用於區塊鏈中[25]。Elastico首先通過PoW演算法競爭成為網路中的記賬節點。然後按照預先確定的規則,這些節點被分配到不同的分片委員會中。每個分片委員會內部執行PBFT等傳統拜占庭容錯的共識演算法,打包生成交易集合。在超過的節點對該交易集合進行了簽名之後,交易集合被提交給共識委員會,共識委員會在驗證簽名後,最終將所有的交易集合打包成區塊並記錄在區塊鏈上。
Elastico驗證了分片技術在區塊鏈中的可用性。在一定規模內,分片技術可以近乎線性地拓展吞吐量。但Elastico使用了PoW用於選舉共識節點,這也導致隨機數產生過程及PoW競爭共識節點的時間過長,使得交易延遲很高。而且每個分片內部採用的PBFT演算法通訊復雜度較高。當單個分片中節點數量較多時,延遲也很高。
在Elastico的基礎上,Kokoris-Kogias等人提出OmniLedger[26],用加密抽簽協議替代了PoW選擇驗證者分組,然後通過RandHound協議[27]將驗證者歸入不同分片。OmniLedger。OmniLedger在分片中仍然採用基於PBFT的共識演算法作為分片中的共識演算法[28],並引入了Atomix協議處理跨分片的交易,共識過程中節點之間通信復雜度較高。當分片中節點數量增多、跨分片交易增多時,系統TPS會顯著下降。
Wang等人在2019年提出了Monoxide[29]。在PoW區塊鏈系統中引入了分片技術,提出了連弩挖礦演算法(Chu ko-nu mining algorithm),解決了分片造成的算力分散分散問題,使得每個礦工可以同時在不同的分片進行分片,在不降低安全性的情況下提高了PoW的TPS。

⑥ 數字簽名機制 - Schnorr 機制

Schnorr機制是一種基於離散對數難題的知識證明機制,由德國數學家和密碼學家Claus-Peter Schnorr在1990年提出。這種知識證明機制具有實現簡單,驗證速度較快等優點。最開始是為Smart Card這樣的資源受限設備而設計。

經過這些年的發展,在原始的Schnorr機制上實現了多種多樣的改進與功能,實現了高性能的數字簽名,以及包括環簽名,門限簽名等復雜簽名機制。

在這里參考Schnorr的論文與其他的參考資料,分析Schnorr機制的原始機制與實現。並分析現在主流的EdDSA的實現ED25519,以及如何在Schnorr機制上建立的復雜簽名機制。

原始的Schnorr機制是一個互動式的機制。允許在任何擁有相同生成元(指在離散對數問題中)的協議參與者雙方,證明某一方擁有私鑰 而不需要直接交換它。其中雙方都擁有的生成元設為 ,證明者擁有私鑰 。驗證者從證明者處取得 ,其中 , 即公鑰。

Original Schnorr Signature的協議流程如下:

因為離散對數問題是困難的,因此驗證者不會知道 的值,驗證者僅知道由 計算得到的 。但是驗證者可以通過以下計算來驗證 是正確的:

其中 是生成元,雙方都可知, 驗證者都知道,所以驗證者可以輕松驗證化簡過的讓汪公式。

這個過程是零知識的,因為驗證者並不能得到私鑰 的值,卻可以通過計算與通訊的方式驗證證明者確實擁有私鑰 。

然而這樣互動式的過程,會導致驗證者通過"fork"的方式獲得私鑰 。驗證者只需要簡單的提供兩個不同的隨機值 ,並要求證明者計算 ,即可計算出 。這樣一來,這個過程便無法公開的驗證,因為一旦兩個驗證者相互串通,交換自己得到的值,便可以推出私鑰 。

為了解決這個問題,後大滑春續將會通過對現有的協議進行Fiat–Shamir變換,使用Random oracles改造這個演算法來使Schnorr原始的Schnorr Scheme變成可公開驗證的非互動式演算法。

上述原始Schnorr Scheme中存在的私鑰泄露問題使得演算法無法在公開的環境下使用。通過將原始的互動式協議轉變為非互動式協議可以解決這個問題。

Fiat–Shamir變換是一種利用互動式零知識證明方案創建數字簽名的方式。根據Fiat–Shamir變換,我們可以將原始方案中的證明者採用隨機數預言機(Random oracle)來代替,利用這樣的方式構造數字簽名。

隨機數預言機,即隨機數函數,是一種針對任意輸入得到的輸出之間是項目獨立切均勻分布的函數。理想的隨機數預言機並不存在,在實現中,經常採用密碼學哈希函數作為隨機數預言機。

原本的設計中,Schnorr簽滾耐名是一種互動式協議,需要一個實際存在的驗證者與參與者,而根據Fiat-Shamir轉換,可以將具體的驗證者採用隨機數預言機來代替。將驗證者替換為隨機數預言機後,外部的驗證者便無法通過交換 來推出私鑰 ,原本的 採用隨機數預言機產生的隨機數來表示。

⑦ HTTPS執行流程解析

使用來自wiki的解釋:

超文本傳輸安全協議 (英語: H yper T ext T ransfer P rotocol S ecure,縮寫: HTTPS ;常稱為HTTP over TLS、HTTP over SSL或HTTP Secure)是一種通過計算機網路進行安全通信的傳輸協議。HTTPS經由HTTP進行通信,但利用SSL/TLS來加密數據包。HTTPS開發的主要目的,是提供對網站伺服器的身份認證,保護交換資料的隱私與完整性。這個協議由網景公司(Netscape)在1994年首次提出,隨後擴展到互聯網上。

歷史上,HTTPS連接經常用於萬維網上的交易支付和企業信息系統中敏感信息的傳輸。在2000年代末至2010年代初,HTTPS開始廣泛使用,以確保各類型的網頁真實,保護賬戶和保持用戶通信,身份和網路瀏覽的私密性。

另外,還有一種安全超文本傳輸協議(S-HTTP)的HTTP安全傳輸實現,但是HTTPS的廣泛應用而成為事實上的HTTP安全傳輸實現,S-HTTP並沒有得到廣泛支持。

ps:翻閱資料發現,S-HTTP的原理是對於每次數據的交互都進行 RSA非對稱加密,對比HTTPS來說,S-HTTP加密單次事務的交互,而HTTPS則是對通信層進行加密,我想 效率和普適性 可能也是決定市場採用HTTPS而不是S-HTTP的一大因素。

傳輸層安全性協議 (英語: T ransport L ayer S ecurity,縮寫: TLS )及其前身 安全套接層 (英語: S ecure S ockets L ayer,縮寫: SSL )是一種安全協議,目的是為互聯網通信提供安全及數據完整性保障。網景公司(Netscape)在1994年推出首版網頁瀏覽器-網景導航者時,推出HTTPS協議,以SSL進行加密,這是SSL的起源。IETF將SSL進行標准化,1999年公布TLS 1.0標准文件(RFC 2246)。隨後又公布TLS 1.1(RFC 4346,2006年)、TLS 1.2(RFC 5246,2008年)和TLS 1.3(RFC 8446,2018年)。在瀏覽器、電子郵昌頃件、即時通信、VoIP、網路傳真等應用程序中,廣泛使用這個協議。許多網站,如Google、Facebook、Wikipedia等也以這個協議來創建安全連線,發送資料。目前已成為互聯網上保密通信的工業標准。

SSL包含記錄層(Record Layer)和傳輸層,記錄層協議確定傳輸層數據的封裝格式。傳輸層安全協議使用X.509認證,之後利用非對稱加密演算來對通信方做身份認證,之後交換對稱密鑰作為會談密鑰(Session key)。這個會談密鑰是用來將通信兩方交換的資料做加密,保證兩個應用間通信的保密性和可靠性,使客戶與伺服器應用之間的通信不被攻擊者竊聽。

是用於公開密鑰基礎建設的電子文件,用來證明公開密鑰擁有者的身份。此文件包含了公鑰信息、擁有者身份信息(主體)、以及數字證書認證機構(發行者)對這份文件的數字簽名,以保證這個文件的整體內容正確無誤。擁有者憑著此文件,可向電腦耐中陸系統或其他用戶表明身份,從而培襲對方獲得信任並授權訪問或使用某些敏感的電腦服務。電腦系統或其他用戶可以透過一定的程序核實證書上的內容,包括證書有否過期、數字簽名是否有效,如果你信任簽發的機構,就可以信任證書上的密鑰,憑公鑰加密與擁有者進行可靠的通信。

簡而言之,認證機構用自己的私鑰對需要認證的人(或組織機構)的公鑰施加數字簽名並生成證書,即證書的本質就是對公鑰施加數字簽名。

人們透過信任數字證書認證機構的根證書、及其使用公開密鑰加密作數字簽名核發的公開密鑰認證,形成信任鏈架構,已在TLS實現並在萬維網的HTTPS、在電子郵件的SMTPS和STARTTLS廣泛應用。業界現行的標準是國際電信聯盟電信標准化部門制定的X.509[2],並由IETF發行的RFC 5280詳細述明。

X.509 是密碼學里公鑰證書的格式標准。X.509證書已應用在包括TLS/SSL在內的眾多網路協議里,同時它也用在很多非在線應用場景里,比如電子簽名服務。X.509證書里含有公鑰、身份信息(比如網路主機名,組織的名稱或個體名稱等)和簽名信息(可以是證書簽發機構CA的簽名,也可以是自簽名)。對於一份經由可信的證書簽發機構簽名或者可以通過其它方式驗證的證書,證書的擁有者就可以用證書及相應的私鑰來創建安全的通信,對文檔進行數字簽名。

除了證書本身功能,X.509還附帶了證書吊銷列表和用於從最終對證書進行簽名的證書簽發機構直到最終可信點為止的證書合法性驗證演算法。

X.509是ITU-T標准化部門基於他們之前的ASN.1定義的一套證書標准。

Hash,一般翻譯做散列、雜湊,或音譯為哈希,是把任意長度的輸入(又叫做預映射pre-image)通過散列演算法變換成固定長度的輸出,該輸出就是散列值。

Hash演算法也被稱為散列演算法,Hash演算法雖然被稱為演算法,但實際上它更像是一種思想。Hash演算法沒有一個固定的公式,只要符合散列思想的演算法都可以被稱為是Hash演算法。

特點: 無法反向破解,可以用來校驗唯一性.

採用單鑰密碼系統的加密方法,同一個密鑰可以同時用作信息的加密和解密,這種加密方法稱為對稱加密

常見: AES DES 3DES 特點: 效率高

一對密鑰,公鑰和私鑰,公鑰加密的數據只能通過私鑰來解密,私鑰加密的數據只能通過公鑰解密. 保證非對稱加密的安全性是極大整數的因數分解(數學實現基於互質,歐拉函數,歐拉定理,模反,具體不詳細解釋),wiki是這么說的:

常見: RSA 特點: 效率低,耗時長

使用http交互信息存在以下隱患:

個人來看,由於HTTP的不安全性,急需一個安全的協議做補充,而HTTPS就是在HTTP協議的基礎上,添加了 傳輸層安全性協議(TLS/SSL) ,TLS/SSL是一個協議標准,而x.509則是這個協議標準的一個 實現 .而x.509就用到了加密相關的hash演算法,對稱加密演算法,非對稱加密演算法.

1.ClientHello 首先https請求是基於http的,也就是基於tcp的,所以先得建立tcp三次握手,這個就不說了,然後tcp握手後是SSL層的握手,也就是圖中的ClientHello消息,client發送本地最新的TLS版本、演算法組合的一個集合和其他很多輔助的信息,並且生成一個隨機數A。具體的內容可以看下圖:

可以看到隨機數( Random )是一個GMT UNIX時間加上一串隨機位元組,演算法組合( Cipher Suite )有26種。

2.ServerHello Server收到這些信息後比對自己的TLS版本,選擇其中低的一個作為返回,並且從演算法組合的集合中選出一種合適的組合,然後同樣也生成一個隨機數B,一起打包到ServerHello中傳回給Client。內容如圖:

這里選出了一種CipherSuite演算法組合。

3.Certificatie,ServerHelloDone 服務端在選出溝通策略之後將自己的證書信息告訴Client端( Certificate ),通知Client關於秘鑰更新的信息( ServerkeyExchange ),接下去就看你的了,並且表示該發的都發給你了,我的Hello結束了( ServerHelloDone )。

4. Client收到2,3步的信息後先驗證證書是不是合法的,包括它的頒發機構,域名匹配,有限期限等,這個具體的過程就不探究了,只要知道這些步驟就行了。

5. 證書驗證通過之後,生成隨機數C1,然後用證書內容中的公鑰通過伺服器選擇的非對稱加密演算法加密,得出為C2。

6. 由之前的三個隨機數A、B、C1通過一個偽隨機函數再生成一個D, 注意!這個是最終http真正使用的加密秘鑰!!!

7. 由D再次通過偽隨機函數生成一個秘鑰組,包含6個秘鑰,假設為P1,P2,P3,P4,P5,P6。

8. ClientKeyExchange。通知Server秘鑰相關的信息,發送第5步中算出的C2給Server端。

9. Client端發送ClientKeyExchange之後,計算之前所有與Server端交互消息的hash值,假設為client_hash1,用步驟7中得到的其中一個P1進行加密,結果為E。

10. Server端收到C2後用私鑰結合非對稱演算法解密C2,得到C1。

11. 同樣的Server端也根據A、B、C1由偽隨機函數生成D( 最終的加密秘鑰!!! ),再由D得出秘組鑰(P1-P6),因為這里涉及到的演算法都是一樣的,所以得出的秘鑰也是一樣的。

12. Server端計算之前所有和Client端交互消息的hash值,假設為server_hash2,大家可能發現了,11、12跟Client端的6、7、9過程一致,只是少了9中的P1加密過程。

13. 這個時候Client端會發送ChangeCipherSpec消息和EncryptedHandshakeMessage消息,通知Server端接下去使用選定的加密策略來通信了,並且將第9步中的E傳給了Server。(這里幾個步驟的順序只是為了好理解一點而這樣排列,實際兩條線是獨立在處理信息的,所以先後順序不能保證)

14. 這個時候Client會再次計算之前握手消息的hash值,得出結果client_hash2。

15. Server在收到EncryptedHandshakeMessage消息帶過來的E之後,利用步驟11中的P1解密E,由於加密演算法和P1都是相同的,所以這里還原出了client_hash1,然後與步驟12中的server_hash2比對,如果一樣說明之前的幾條協商秘鑰的消息都被對方正確無誤的理解了。

16. Server端再次對之前的消息做hash值,得出server_hash2,用P2進行加密結果為F,然後通過ChangeCipherSpec-EncryptedHandshakeMessage消息傳給Client端。

17. Client收到Server的消息後根據P2解密F還原得出server_hash2,與client_hash2比對如果一致,則認為之前的交互過程都是正確無誤且被對方理解的。至此,整個握手過程就結束了,之後的http數據報就會被之前確定的加密策略和加密秘鑰D進行加密傳輸了。

總結:其實最終我們發現整個握手過程中並沒有直接傳輸最終的加密秘鑰D,而且交換了一些演算法策略和生成D的一些參數,這樣相對來說會更安全一點,直接傳D的話這個過程就由Client端完成了,中間如果出什麼差錯Server會無感知無條件的信任Client傳過來的D,就有可能出現問題了,所以採用只傳策略和參數,並且由雙方共同參與,這樣安全性和正確性就會提高很多。貼一張整個過程的抓包圖:

主要是為了防止 重放攻擊(回放攻擊) ,重放攻擊是指攻擊者發送一個目的主機已接收過的包,來達到欺騙系統的目的,主要用於身份認證過程,破壞認證的正確性。

瀏覽器客戶端訪問同一個https伺服器,可以不必每次都進行完整的TLS Handshake,因為完整的TLS Handshake,涉及到 認證伺服器的身份 (數字證書),需要做大量的非對稱加密/解密運算,此外還需要做 偽隨機函數PRF ,通過「 Pre-Master Key」、「Server Nonce」、「Client Nonce 」共同推導出 session key 非對稱加密演算法RSA/DSA非常耗費CPU資源。

為了克服這個困難,伺服器維護一個以 session ID 為索引的結構體,用於臨時存放session key,並在 TLS handshake 階段分享給瀏覽器

當瀏覽器重新連接https 伺服器時,TLS handshake 階段,出示自己的session ID, 伺服器獲得session ID,以此為索引,可以獲得和該瀏覽器共同擁有的session key,使用session key可以直接對用戶流量做加密/解密動作。

這樣避免了大量的冪、指數計算。

當然,如果伺服器沒有查找到session ID,雙方的TLS安全參數協商按照正常流程走。

使用 charles 抓包進行分析 Session ID 的使用情況。假設有一次請求,服務端允許使用 Session ID,那麼會有下面的流程:

1.客戶端向伺服器發起HTTPS請求

2.Charles攔截客戶端的請求,偽裝成客戶端向伺服器進行請求

3.伺服器向「客戶端」(實際上是Charles)返回伺服器的CA證書

4.Charles攔截伺服器的響應,獲取伺服器證書公鑰,然後自己製作一張證書,將伺服器證書替換後發送給客戶端。(這一步,Charles拿到了伺服器證書的公鑰)

5.客戶端接收到「伺服器」(實際上是Charles)的證書後,生成一個對稱密鑰,用Charles的公鑰加密,發送給「伺服器」(Charles)

6.Charles攔截客戶端的響應,用自己的私鑰解密對稱密鑰,然後用伺服器證書公鑰加密,發送給伺服器。(這一步,Charles拿到了對稱密鑰

7.伺服器用自己的私鑰解密對稱密鑰,向「客戶端」(Charles)發送響應

8.Charles攔截伺服器的響應,替換成自己的證書後發送給客戶端

至此,連接建立,Charles拿到了 伺服器證書的公鑰 和 客戶端與伺服器協商的對稱密鑰,之後就可以解密或者修改加密的報文了。

(核心點:Charles生成了自己一套公鑰,私鑰,和自己的證書,因為自己的證書無法通過校驗,所以需要客戶端主動授權,客戶端授權後,charles就可以完全代替客戶端與服務端交互,與服務端交互用的是服務端的公鑰加密,與客戶端交互用的是charles自己的私鑰解密)

⑧ 高中信息學奧賽主要搞些什麼

信息學奧林匹克競賽的考核方式是採用封閉式(連續3~4小時)上機編程解題的形式,不限編程語言,競賽題量通常較大。程序完成後要通過嚴格的數據測試,這就對同學們編程能力有更高的要求:不但要能編程,編好的程序能運行,而且所設計的程序還要能通過在各種邊界條件下和各種環境下設置的測試數據。

這種嚴格的數據測試方法,對於培養同學們的分析問題和解決問題的能力,無疑是很有幫助的。

參賽名額分配:

參賽名額分為基本名額和獎勵名額,獎勵名額與基本名額比例約為1:2。

1、基本名額:根據上一年競賽成績,分別定出各市參加決賽名額的基數。獲團體總分前三名的市(A類市)6人,獲團體總分第四至八名的市(B類市)4人,其餘的市(C類市)1~2人(去年有參賽的市2人,去年無參賽的市1人)。

2、獎勵名額:上一年競賽每獲一個高中或初中一等獎、女同學前三名、參賽隊員全部獲一、二等獎的市均給該市增加1個名額,C類市中成績最好的2個市各增加1個名額。並規定獲校團體前三名的學校各獎勵1個名額給原學校。

3、根據91年國際信息學奧林匹克提出的「開展一個鼓勵女孩參加信息學競賽活動」的精神,全國賽從92年開始規定每個省隊至少有1個女同學參加。

因此,我們在條例中也規定了A、B類市基本名額中包含有1個女同學名額,如不派女同學參加,則該名額取消。為了鼓勵女同學多參賽,條例中也作了「女同學的獎勵名額必須派女同學參加,否則該獎勵名額無效」的規定。

4、為既保證各市組隊的自主性而又保證尖子培養後繼有人。條例作了「分配給各市名額,其高初中人數自定,但其差額不得大於1」的規定。

⑨ FileCoin: 有用的工作量證明

有用的工作量證明(Proof of Useful Work)是由著名的去中心化存儲項目 FileCoin 在它的白皮書里提出來的一個概念。工作量證明,Proof of Work,POW 是實現區塊鏈的一個重要共識方式,FileCoin 要實現一個基於區塊鏈的存儲平台。所以它也要做共識,它選擇的就是工作量證明共識。

首先我們來解釋一下常規的工作量證明。它是區塊鏈實現共識的一種方式。是比特幣採用的方式,所以,工作量證明就是俗稱的「挖礦」。比特幣做為一個去中心化的點對點交易系統,要在不同的節點上維護一個共同的完全相同的帳本,來記錄所有的交易,而且確保交易不會重復,不會一筆錢多花,就需要一個維護這個賬本一致性的規則。大家一起遵守這個規則,就是共識。區塊鏈常用的方法是,把這個賬本分成很多頁,每個頁就是一個區塊。每個區塊由一個節點來記賬,然後分發給其他節點復制,這樣所有節點上的賬本都是一樣的。但是每個區塊都由哪個節點來記錄,就需要一個大家都能遵守的規則。比特幣採用的方法,是讓所有的節點做一道簡單的數學題,題目很簡單,但是計算量很大,一般要10分鍾左右才能做出答案來。得到答案雖然很費時間,但是驗證答案是否正確很容易。然後所有的節點同時做題,第一個做出來的節點,就得到下一個區塊的記賬權。因為每個區塊都只有唯一一個最早做出題的節點,所以,每個區塊的記賬權是唯一的,而且也是很容易被其他節點驗證的。節點一旦驗證到其他節點得到了區塊記賬權,就必須復制區塊,加到本地區塊鏈中,同時開始下一個區塊記賬權的競爭。通過這種方式,比特幣就能確保所有節點的區塊鏈是一致的。

節點通過大量計算競爭區塊記賬權的的過程,就是工作量證明。所以,工作量證明系統(或者說協議、函數),是一種應對拒絕服務攻擊和其他服務濫用的經濟對策。它要求發起者進行一定量的運算,也就意味著需要消耗計算機一定的時間。這個概念由 Cynthia Dwork 和 Moni Naor 1993 年在學術論文中首次提出。而工作量證明(POW)這個名詞,則是在 1999 年 Markus Jakobsson 和 Ari Juels 的文章中才被真正提出。

實現區塊鏈共識的方式還有很多,如POS,DPOS,POA,PBFT等等,但是工作量證明是唯一被時間驗證過(11年)的在公鏈上運行的區塊鏈共識機制。

工作量證明存在一個什麼樣的問題呢?還是用比特幣為例。比特幣節點為了獲取出塊權做得那個數學題,叫哈希運算。計算量非常大,每一台參與比特幣挖礦的礦機都要時刻進行這個計算,耗費大量的電力。這個計算不像其他的如大數據處理的計算,可以產生一些價值,它的唯一目的,就是競爭出一個節點,成為下一區塊的出塊者。目前比特幣每年消耗電量約25.5億瓦,這相當於全球電量的0.5%,是愛爾蘭一年的耗電量。反對POW的人紛紛指責挖礦將電力資源浪費在虛無縹緲的數字貨幣上,還稱之為自由主義的「泔水」。

但是,認為POW是浪費的電的人不知道,正是能源和算力打造了比特幣安全不可攻破的體系。

一張100元的現金不只是你我認為他值100,而是整個社會群體都認為他值100,價值就是來自於共識。比特幣是社區行為,來自不同國家的人聚集到社區,用互聯網來建立秩序,它的意義也是來自於群體共識,只要大家都相信比特幣有價值,只共識存在,那麼他就有價值,和法幣一模一樣。所以產生價值認同並不一定需要國家來驅動,比特幣改革了一種傳遞信任的載體和媒介,千百年來,人類社會通過多少流血戰爭建立的政權和共識,現在兵不血刃,只是耗費些電力就實現,豈不是更先進。

總結而言,要想設計一個去中心化而且安全的數字貨幣,能源和算力是必要的代價。工作量證明是以去中心化形式構建安全產權認證系統的唯一方案。所以認為POW是浪費的電的人不知道,正是能源和算力打造了比特幣安全不可攻破的體系。現在比特幣全網算力已經達到一個非常恐怖的地步,任何人想要發動51%算力攻擊已經是不可能的事情了,POW演算法使比特幣系統牢不可破。

為締造價值而產生的消耗不叫浪費。

但是,如此多的算力,是否可以用來創造更多的價值呢?用 FileCoin 的話說,工作量證明,還有沒有其他用途呢?

FileCoin 是分布式存儲行業的明星項目。他的開發團隊 Protocol Lab 就是開發 IPFS 協議的團隊,以至於很多人都分不清FileCoin 和 IPFS 的區別。可以說是2017年 FileCoin 的1CO,把這個行業推向巔峰,也引出了一系列的同類型項目。本文無意於贊譽或者貶低這個項目,只想結合自己從事這個行業的經驗,表達一些自己的觀點,盡量做到客觀公正。希望對從事這個行業的人有一些啟發。

FileCoin 在白皮書中提出要實現一個有用的工作量證明,實際上就是認可了,要打造一個安全不可攻破的區塊鏈,就必須消耗工作量。但是,他們不希望為這個工作量做出的計算完全被浪費,所以想把這個工作量利用起來。所以,他們想到的方法是,在工作量證明裡加入存儲空間的使用率。這樣,所有的節點為了形成共識,就必須提供存儲空間來存文件。這個存儲空間就可以存用戶數據,就是有用的。

那我們來看一下FileCoin是怎樣實現這種有用的工作量證明共識的。

Filecoin採用的共識機制並不是簡單的工作量證明,而是一種叫做預期共識(Expected Consensus,簡稱 EC)的機制。和其他主流共識機制目標一樣,讓礦工爭奪某一個高度唯一的出塊權而獲得獎勵。這個獲得出塊權的礦工叫做 Leader。在每一輪的出塊爭奪中,為了保證賬本的可靠性,都有一個唯一的 leader 來進行記賬。

也就是說,共識的核心就是選擇誰來當 Leader。選 Leader 的方式一般有兩種,互動式或者非互動式。互動式是要礦工之間互相投票的。比如 PBFT 就是互動式的,幾個參與選舉的人通過互發信息,得到多數票( 超過 2/3 )的人就是 Leader。預期共識採用了非互動式的方式來選舉 Leader。參與的各方根本不給彼此發消息,而是每個節點各自獨立私下進行運算。最後某個節點說,我贏得了選舉,然後提供一個證明,其他人可以很容易就驗證,他確實贏得了選舉。這個驗證方法就是零知識證明。

預期共識機制會為區塊鏈網路預設一個出塊的期望值。比如每1個紀元(epoch)生成1個區塊(block),但也有一個紀元可能出現空塊或多個區塊的情況。所以在 Filecoin 中,每個高度不是一個區塊,而是一個區塊集,叫做 TipSet,這個 TipSet 中可能包含了多個區塊。所以實際上 Filecoin 是 TipSet 鏈。預期共識無法保證每一輪只選舉出一個 Leader,所以會出現一輪中有多個 Leader 的可能,這樣鏈式結構就變成了DAG的網狀結構。所以 FileCoin 還會對 block 賦權重,實現有效收斂。

FileCoin 採用的 EC 共識有一個好處。對於傳統的 POS 共識機制來說,有一個重大問題就是無法控制分叉。也就是說,由於挖礦成本低,參與者可以同時挖多個鏈獲取利益。而預期共識對這一點做了設計,那就是通過權重和抵押機制來促使礦工選擇一條最好的鏈,對同時挖多個鏈的礦工進行懲罰,這樣可以非常快速地促進收斂。這說明 POW 和 POS 共同使用會是一種好的方式。

每一個礦工獲得出塊的可能與其當前有效存儲量佔全網總存儲量正相關。這種期望共識機制其實是更像是 POS 權益證明,只是它將POS里邊的權益(Staking)換成了有效存儲佔比。但是礦工的有效存儲從何而來呢?是通過存儲用戶數據得來。如何證明礦工存儲了用戶的數據,FileCoin 創造出一個新的證明機制叫 POST 時空復制證明。這個 POST 就是 FileCoin 的工作量了。把耗電的算力換成存儲有用數據的存儲空間,無意義的軍備競爭變成了存儲服務市場競爭。這確實是 FileCoin 的進步之處。只不過,為了成功的出塊,礦工通過預期共識被選為出塊節點後,必須在一個塊的時間里(現在是45秒)做個 POST 證明,成功提交,才能出塊。否則就失去機會。所以,為了確保礦工能在指定時間內出塊,最終官方還是決定要使用 GPU。雖然這 GPU 不是像工作量證明那樣一直不停的工作,但是在整個實現共識的過程中還是出現了跟有用的工作量證明思想相違背的耗能計算。

還有,談到預期共識的時候,我們說到每一個紀元出塊都不是一個塊,而是一組塊,那麼紀元這個概念就很重要了。怎麼控制紀元呢?每個礦工在參與選舉前,需要先生成一個 Ticket,這個 Ticket 實際上是一個隨機數,他需要走一個 VDF 和 VRF 的流程,這個 VDF 全稱 Verifiable Delay Function,可驗證的延時函數。他的計算流程是串列的,需要花費一定的時間,並且這個時間無法通過多核並行的方式進行縮減。這保證了每個礦工產生 Ticket 時必須要消耗的時間,沒有人可以通過優化硬體的方式來獲得加速。聽上去這函數很完美,可是,這個 VDF 根本還不存在!現在 FileCoin 測試網直接使用了一個等待函數 sleep,這是 UDF,Unverifiable Delay Function。現在最接近的 VDF 解決方案,也是需要消耗大量計算資源的。說白了,還是要耗電,還是不環保。

所以,有用的工作量證明,依然只是一個美好的願望,理想很豐滿,但現實很骨感。被譽為下一個比特幣的 FIL,還要繼續為實現這個顛覆性的共識而努力。

總結一下FileCoin存儲礦工獲取激勵的流程:用戶存儲數據,支付FIL費用 -> 礦工存儲數據 -> 生成復制證明 -> 完成時空證明 -> 經過EC共識,選出出塊Leader -> 獲取打包權 -> 礦工獲取FIL獎勵

在這個流程圖上,可以看到,礦工可以在兩個地方獲取獎勵。一個是存儲用戶文件的時候可以得到用戶的FIL獎勵。一個是在獲取區塊打包權後獲得FIL。而得到區塊打包權的一個前提就是存有足夠多的用戶數據。所以,在存儲需求不夠大的情況下,礦工會從用戶那裡收取很低廉的費用。在用戶不夠的情況下,甚至會倒貼錢自己付FIL存數據,只為能夠存足夠多的數據,在 EC 共識中被選成 Leader 得到打包獎勵。這樣產生的效果是,FileCoin 對用戶非常友好,存儲費用非常低。所以,一定會吸引很多的應用來這個平台上做開發。但是缺點也很明顯,如果存儲量不夠大,礦工根本沒法跟其他人爭奪出塊權,所以得不到獎勵。最後整個平台會朝著大礦工,大礦池的方向發展,這跟 FileCoin 想把所有閑散伺服器利用起來實現分布式存儲的初衷是違背的。或者說,一定要等到這個行業具有一定規模,技術更成熟,才有小礦機挖礦的機會。

我們先來簡單的講一講中心化存儲和去中心化存儲各自的利弊。中心化存儲設備統一管理,可靠性好,性能高,去中心化存儲數據天然分散,易於流通,容災性好,但是可靠性低。從經濟角度來說,中心化存儲是重資產投入,成本高。去中心化存儲通過區塊鏈激勵層,用戶自行加入,輕資產,可降低存儲總成本。未來應用數據的存儲和處理還會是以中心化存儲為主,而去中心化存儲因為是分布式網路,主要可用於熱門數據流量分發。同時,因為沒有中心化所有權,可以成為去中心化應用的首選。

市場上有一種說法是,去中心化網路適合冷數據的備份,其實這並不是去中心化存儲的優點,實在是因為把熱數據放到去中心化網路上太不可靠,處理性能也跟不上。所以,如果去中心化存儲能實現一定的規模效應,大大降低存儲成本,把冷數據備份當作核心業務,並把目標定位在今天因為成本太高沒被企業存儲的冷數據,會是一個很好的發展方向。

如此說來,從技術上講,去中心化存儲並不一定比中心化存儲有優勢。如果能推行一種新的模式,把去中心化的經濟激勵和中心化的存儲合在一起,就能吸收兩者的長處。真正實現有用的工作量。FileCoin 未來可能促成的大礦場模式的數據中心,可能更有市場。

在11年後的今天,比特幣並沒有實現它成為一個點對點的電子支付貨幣的初衷,但阻止不了人類前赴後繼的去買它,擁有它。同樣,我相信 FileCoin 已經得到足夠大的社群,礦工和開發者的支持,即使在可預見的未來,它不會促成分布式存儲應用的全面落地(也許這從來不是 FileCoin 的目標),但我還是相信會有很多人會因為它的共識去購買它,持有它。上升到哲學層面,人類在為真理買單。

那麼在實際生活中,何為有用,或者說,我們到底是在用存儲做共識還是用共識做存儲?FileCoin 是前者。FileCoin 想要基於存儲工作量實現的去中心化的共識,理論上是完美的,追求完美,人類是要付出代價的。這也是為什麼在這個項目上我們等待了這么長的時間。但是一旦實現,它可能會為人類帶來巨大價值,對市場帶來無窮大的號召力。

只不過去中心化不是萬物的靈葯。中心化的一個最大優勢是它的效率非常高。像dPOS或者聯盟鏈這樣的弱中心化共識兼顧兩者優勢,能更快速的把應用推向市場,提前啟動分布式存儲行業,推進分布式存儲應用落地。所以,我們既追求用存儲做共識,也追求用共識做存儲,根據實際需求來做出我們的選擇。在這個過程中,相信區塊鏈也會進一步發展,逐步優化,變得越來越有用。

閱讀全文

與非互動式交易驗證演算法相關的資料

熱點內容
伺服器軟路由怎麼做 瀏覽:287
冰箱壓縮機出口 瀏覽:225
OPT最佳頁面置換演算法 瀏覽:640
網盤忘記解壓碼怎麼辦 瀏覽:852
文件加密看不到裡面的內容 瀏覽:651
程序員腦子里都想什麼 瀏覽:430
oppp手機信任app在哪裡設置 瀏覽:185
java地址重定向 瀏覽:268
一年級下冊摘蘋果的演算法是怎樣的 瀏覽:448
程序員出軌電視劇 瀏覽:88
伺服器系統地址怎麼查 瀏覽:54
解壓游戲發行官 瀏覽:601
國外小伙解壓實驗 瀏覽:336
頂級大學開設加密貨幣 瀏覽:437
java重載與多態 瀏覽:528
騰訊應屆程序員 瀏覽:942
一鍵編譯程序 瀏覽:129
語音加密包哪個好 瀏覽:341
有什麼學習高中語文的app 瀏覽:283
安卓手機的表格里怎麼打勾 瀏覽:411