位元幣系統為了保證其安全性,用到了很多演算法,包括各種加密演算法以及共識演算法,理解這些演算法對于理解位元幣的原理是至關重要的,首先理解一下位元幣與區塊鏈的關系,
1 位元幣與區塊鏈的關系
1.1 位元幣怎么來的?
2008年,中本聰發表論文《位元幣 :一種點對點的電子現金系統》,論文描述了
- 如何創建一套去中心化的電子交易體系
- 區塊鏈正是構建這種電子交易體 系的底層技術
用的技術就是區塊鏈,也就是說,位元幣是世界上第一種“去中心化”的數字貨幣,為了發明它,中本聰搞出了一種新技術,他把它命名為“區塊鏈”,因此,區塊鏈是伴隨著位元幣產生的一種新技術,
通俗地說,位元幣是產品,是一種具體的數字貨幣,而區塊鏈是相對通用的技術,
打個比方,瓦特發明了蒸汽機,他也發明了一整套相關的技術,但技術不是產品本身,別人用他的技術,也能做出相似的蒸汽機,
1.2 什么是區塊鏈?
區塊鏈是一種軟體技術,說得簡單點,就是“分散存盤”和“檔案全留”,也就是說,位元幣的所有交易資訊,在網上都有保留,而且是重復存盤在成千上萬臺計算機上,
比如,A把位元幣賣給了B,這條交易記錄不是存盤在一臺計算機上,而是存盤在網上盡量多的計算機上,至少幾百臺以上,而且,這些位元幣過去所有的交易記錄,也全都保留在網上,
這種分散存盤和資訊保留,讓人極難篡改,因為如果想篡改交易記錄,就得改成千上萬臺機器上的資料,這幾乎是不可能的,迄今為止,還沒有發生過篡改現象,因此,從實際應用角度來說,位元幣是不可篡改和不可偽造的,加上它本身具有一定的成本和稀缺性,因此具有一定的信用,因此,位元幣具有貨幣的特征,
2 位元幣的特點
總結以下,位元幣具有如下特點:
- 不依靠特定貨幣機構發行,基于特定的演算法,通 過大量的計算產生;
- 位元幣經濟使用P2P網路中的眾多節點構成的分 布式資料庫來確定并記錄所有的交易行為;
- P2P的去中心化特征與演算法本身可以確保無法通 過大量制造位元幣來人為操控幣值,
| 位元幣 | 傳統虛擬貨幣(如Q幣) | |
|---|---|---|
| 性質 | 去中心化 | 有一個服務商 |
| 公開交易度 | 匿名 | 交易公開,可追溯 |
| 存量 | 存量有限 | 無線增發 |
| 代碼屬性 | 開源 | 封閉 |
| 價值體現 | 可直接購買商品 | 可直接購買虛擬商品,個別例外可購買實物商品 |
| 使用范圍 | 沒有限定 | 范圍有限 |
| 兌換比率 | 浮動 | 固定 |
3 位元幣的密碼學原理
首先要明白位元幣是如何獲取的,獲取方式通常有以下3種:
- 挖礦生產——制造一個新的位元幣區塊獲得位元幣;
- 進行購買——通過類似于網上交易平臺(如火幣網)進行交易;
- 捐贈獲得——自由網、互聯網、檔案館、自由軟體基金會以及其他一些組織接收捐贈,
3.1 位元幣原理
位元幣是一個分布式的點對點網路系統
- 沒有中央服務器,也沒有中央發行機構
- 完全通過點對點技術實作的電子現金系統
- 可以不通過任何中間金融機構直接由一方發起并支付給另一方
- 礦工通過“挖礦”來完成對交易記錄的轉賬程序,維護網路的正常運行
- 驗證位元幣交易的同時參與競賽來解決一個數學問題
- 提供公開可見的記賬本
- 記錄發生過交易的歷史資訊,避免重放攻擊,即某個合法交易被多次重新發送造成攻擊,
3.2 位元幣地址
- 公鑰和私鑰是一對
- 公鑰就是所謂的位元幣地址
- 你擁有的位元幣數量=你擁有的所有的位元幣地址上的所有位元幣數量總和
- 花幣需要用對應位元幣地址的私鑰簽名
- 私鑰沒了,錢沒了,你擁有了別人的私鑰= 你擁有了別人的位元幣
- 你可以隨便生成公私鑰對,空間無限大
3.3 位元幣地址的生成程序
- 隨機選取32位元組的數作為私鑰
- 橢圓曲線加密演算法得到非壓縮公鑰
- 依次計算SHA-256、RIPEMD-160值
- 上一結果前加地址版本號(0x00)
- 計算兩次SHA-256
- 取前4個位元組加到第4步結果后面
- 進行base58編碼
- 獲得位元幣地址
由以上程序可以得到, 位元幣系統為了保證其安全性,用到了很多演算法,包括各種加密演算法以及共識演算法
3.4 位元幣的主要技術
- 密碼哈希:區塊鏈資料結構
- 分布式共識協議:區塊鏈驗證
- 數字簽名:可證明的價值交換
4 幾個主要演算法技術的介紹
4.1 Hash演算法
4.1.1 Hash的概念
Hash對于任何一個從事計算機軟體開發的同行應該是在熟悉不過了,Hash演算法是指將任意長度的一串明文映射為一段長度較短的(通常長度也是固定的)二進制串,并且對于不同的明文,很難映射得到相同的hash串,平時在開發程序中用的比較多的MD5來檢驗檔案就是hash的最常見的應用:用某種hash演算法對檔案生成hash值(數字摘要),一旦之后檔案發生了改變,重新計算將得到不同的摘要值,從而認為檔案發生了變化,
一個好的hash演算法需要具備的特點:
- 正向快速:對于給定的明文,能在有限的時間和資源內得到hash值;
- 逆向困難:對于給定的hash值,想逆向推匯出明文基本不可能;
- 輸入敏感:明文發生變化,新的hash值會有很大的不同;
- 抗碰撞性:很難找到兩段不同的明文能夠產生相同的hash值;
4.1.2 常見的hash演算法
常見的hash演算法:
- MD4:該演算法由Rivest于1990年設計,對于任意明文,能夠輸出128位的hash,MD4目前已經被證明為不安全的,
- MD5:MD4的改進版,作者也是Rivest,同樣輸出128位的hash,相比MD4更加安全,但是速度稍慢,
- SHA:SHA并非一個演算法,而是一個演算法族,由NIST(National Institute of Standards and Technology)于1993年發布了首個實作,該演算法族包含了SHA-1,SHA-224,SHA-256,SHA-384,SHA-512等,
目前MD5和SHA1已經被破解,通常推薦使用SHA-256或更安全的演算法,
4.2 加解密演算法
位元幣作為一種加密貨幣,其中少不了加解密演算法,
4.2.1 加解密的程序
加解密程序描述起來很簡單:加密就是將明文和秘鑰,通過加密演算法生成密文,
解密是加密的反程序:密文和秘鑰通過解密演算法,還原出明文,
根據加密和解密程序中是否使用相同的秘鑰,加密演算法又可以分為對稱加密和非對稱加密演算法:
- 對稱加密:加密和解密使用相同的秘鑰,
- 非對稱加密:加密和解密使用不同的秘鑰,
兩種加密方式各有有缺點,實踐中有時會將二者結合起來使用,
注意:理論上不存在絕對安全的演算法,所以在實際的專案中,如果對安全性要求較高,最好不要使用自己設計的加密演算法,很多情況下即使不公開加密演算法,系統也很容易被破解,明智的做法是使用已經經過長期驗證和論證的演算法,
4.2.2 對稱加密演算法
對稱加密演算法即加密和解密使用相同的秘鑰,其優點是效率和加密強度高,但缺點是參與方需要提前持有秘鑰,一旦有人將秘鑰泄漏,就會有安全風險,
從實作方式上,對稱加密演算法又可以分為分組密碼和序列密碼,
- 分組密碼:將明文以定長的資料塊為加密單位,應用最為廣泛,
- 序列密碼:每次只對一個位元組或字符加密,
分組密碼應用較為廣泛,有一些大家耳熟能詳的經典演算法:DES,3DES,AES,
- DES:經典的加密演算法,由美國聯邦資訊處理標準FIPS采用,將64位名為變為64位密文,秘鑰長度64位,該演算法目前已經可以被暴力破解,不再安全,
- 3DES:顧名思義,采用3重DES加密,強度高于DES,但是目前也被證明是不安全的,
- AES:由美國國家標準研究所采用,目前已取代了DES成為了對稱加密實作的標準,AES的分組長度為128位、192位和256位,目前還沒有有效的破解手段,
4.2.3 非對稱加密演算法
非對稱加密演算法是指加密和解密使用不同的秘鑰,分別稱為公鑰和私鑰,私鑰一般通過亂數演算法來生成,公鑰通常通過私鑰生成,公鑰誰都可以看到,私鑰不能泄露,只有自己持有,
非對稱加密的優點是公私鑰分開,缺點是效率低,強度也比對稱加密低,
安全性方面,非對稱加密的安全性需要數學問題來保障,常見的有大質數因子分解,橢圓曲線,離散對數等數學難題,
常見的非對稱加密演算法:
- RSA:經典的公鑰演算法,利用了對大數進行質因子分解困難的特性;
- Diffie-Hellman:秘鑰交換,基于離散對數不能快速求解;
- 橢圓曲線演算法(ECC):這是目前關注度比較高的演算法系列,也是位元幣中使用的演算法,基于對橢圓曲線上特定點進行特殊乘法逆運算難以計算的特性,ECC演算法目前被認為安全度高,但缺點是效率低,計算比較耗時,
一些非常重要的概念:
- 位元幣中使用ECDSA演算法的目的是為了證明某一筆位元幣只能被其所有人花費;
- 私鑰:需要保密,只有生成它的人才知道,私鑰是一串亂數,在位元幣中用32位整數保存;
- 公鑰:和私鑰對應的一串數字,公鑰可以由私鑰計算生成(但不強制),公鑰的作用是在不暴露私鑰的情況下驗證簽名的有效性;
- 簽名:簽名由私鑰加上需要被簽名的資料的hash(資料摘要)生成,通過公鑰加上某種數學演算法,就能在不暴露私鑰的情況下對簽名進行驗證,本部分參考原文鏈接
4.3 數字簽名
數字簽名(又稱公鑰數字簽名)是只有資訊的發送者才能產生的別人無法偽造的一段數字串,這段數字串同時也是對資訊的發送者發送資訊真實性的一個有效證明,它是一種類似寫在紙上的普通的物理簽名,但是使用公鑰加密領域的技術來實作的,用于鑒別數字資訊的方法,一套數字簽名通常定義兩種互補的運算,一個用于簽名,另一個用于驗證,數字簽名是非對稱與數字摘要技術的應用,本部分參考原文鏈接
4.4 共識演算法
區塊鏈是一種去中心化的分布式賬本系統,可以用于登記和發行數字化資產、產權憑證、積分等,并以點對點的方式進行轉賬、支付和交易,區塊鏈系統與傳統中心化系統相比,具有公開透明、不可篡改、防止多重支付等優點,并且不依賴于任何的可信第三方,
由于點對點網路下存在較高的網路延遲,各個節點所觀察到的事務先后順序不可能完全一致,因此,區塊鏈系統需要設計一種機制對在差不多時間內發生的事務的先后順序進行共識,這種對一個時間視窗內的事務的先后順序達成共識的演算法被稱為“共識機制”,
在區塊鏈這樣的分布式賬本系統中,保障整個系統的安全性和適應性十分重要,這也是共識演算法出現的根本原因,
那么,區塊鏈中常見的共識演算法都有哪些呢?
1、POW:Proof of Work,作業量證明
POW是位元幣在Block的生成程序中使用的一種共識演算法,也可以說是最原始的區塊鏈共識演算法了,POW作業量證明,簡單地理解就是,通過一份證明來確認做過一定量的作業,
在位元幣系統中,得到合理的Block Hash需要經過大量嘗試計算,當某個節點提供出一個合理的Block Hash值,說明該節點確實經過了大量的嘗試計算,
這種作業量證明的形式,在我們日常生活中也十分常見,比如駕照,能拿到駕照,說明你已經進行過為期幾個月甚至幾年的練車和考試;再比如現在很火的吃雞和王者榮耀游戲中的K/D(Kill/Death)和勝率,分值越高證明你越厲害,同時也說明你進行了大量的游戲練習和技巧學習,
2、POS:Proof of Stake,權益證明
由于POW機制存在消耗算力巨大、交易確認時間較長,挖礦活動集中容易形成中心化等缺點,便演進出了POS權益證明,POS簡單來說,就是一個根據持有數字貨幣數量和時間來分配相應利息的制度,類似平時我們在銀行中存款,
基于權益證明共識的區塊鏈系統中,參與者的角色是驗證者Validator,只需要投資系統的數字貨幣并在特定時間內驗證自己是否為下一區塊創造者,即可完成下一區塊的創建,下一區塊創造者是以某種確定的方式來選擇,驗證者被選中為下一區塊創造者的概率與其所擁有的系統中數字貨幣的數量成正比例,即擁有300個幣的驗證者被選中的概率是擁有100個幣驗證者的3倍,
在POS模式下,有一個名詞叫幣齡,每個幣每天產生1幣齡,比如你持有100個幣,總共持有了30天,那么,此時你的幣齡就為3000,這個時候,如果你驗證了一個POS區塊,你的幣齡就會被清空為0,同時從區塊中獲得相對應的數字貨幣利息,
這下就很有意思了,持幣有利息,并且由于POS是在一個有限的空間里完成,不是像POW那樣在無限空間里尋找,因此無需大量能源消耗,
3、DPOS:Delegated Proof of Stake,授權權益證明
DPOS最早出現在位元股中,又稱受托人機制,它的原理是讓每一個持有位元股的人進行投票,由此產生101位代表 ,我們可以將其理解為101個超級節點或者礦池,而這101個超級節點彼此的權利完全相等,
從某種角度來看,DPOS有點像是議會制度或人民代表大會制度,如果代表不能履行他們的職責(當輪到他們時,沒能生成區塊),他們會被除名,網路會選出新的超級節點來取代他們,DPOS的出現最主要還是因為礦機的產生,大量的算力在不了解也不關心數字貨幣的人身上,類似演唱會的黃牛,大量囤票而絲毫不關心演唱會的內容,
DPOS通過其選擇區塊生產者和驗證節點質量的演算法確保了安全性,同時消除了交易需要等待一定數量區塊被非信任節點驗證的時間消耗,通過減少確認的要求,DPOS演算法大大提高了交易的速度,通過信任少量的誠信節點,可以去除區塊簽名程序中不必要的步驟,
4、PBFT:Practical Byzantine FaultTolerance,實用拜占庭容錯
PBFT意為實用拜占庭容錯演算法,該演算法由Miguel Castro (卡斯特羅)和Barbara Liskov(利斯科夫)在1999年提出來,解決了原始拜占庭容錯演算法效率不高的問題,將演算法復雜度由指數級降低到多項式級,使得拜占庭容錯演算法在實際系統應用中變得可行,
PBFT是一種狀態機副本復制演算法,即服務作為狀態機進行建模,狀態機在分布式系統的不同節點進行副本復制,每個狀態機的副本都保存了服務的狀態,同時也實作了服務的操作,
將所有的副本組成的集合使用大寫字母R表示,使用0到|R|-1的整數表示每一個副本,為了描述方便,假設|R|=3f+1,這里f是有可能失效的副本的最大個數,盡管可以存在多于3f+1個副本,但是額外的副本除了降低性能之外不能提高可靠性,
5、RAFT,一致性共識演算法
RAFT演算法包含三種角色,分別是:跟隨者(follower),候選人(candidate)和領導者(leader),集群中的一個節點在某一時刻只能是這三種狀態的其中一種,這三種角色可以隨著時間和條件的變化而互相轉換,
RAFT演算法主要有兩個程序:一個程序是領導者選舉,另一個程序是日志復制,其中日志復制程序會分記錄日志和提交資料兩個階段,RAFT演算法支持最大的容錯故障節點是(N-1)/2,其中N為集群中總的節點數量,
上述是目前主要的區塊鏈共識演算法,當然還有其他演算法,比如POET:Proof of Elapsed Time流逝時間量證明,Ripple Consensus瑞波共識機制等,
每種演算法,各有千秋,在特定環境下和時間段上被采用都有各自的考慮和意義,對不同的區塊鏈應用場景而言,適合的演算法即為最好的演算法,??????原文鏈接
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/323123.html
標籤:區塊鏈
