課程:《密碼與安全新技術專題》算法
班級: 1892數據庫
姓名: 王子榛編程
學號:20189206安全
上課教師:張健毅服務器
上課日期:2019年4月23日網絡
比特幣(Bitcoin)的概念最初由中本聰在2008年11月1日提出,並於2009年1月3日正式誕生。根據中本聰的思路設計發佈的開源軟件以及建構其上的P2P網絡。比特幣是一種P2P形式的虛擬的加密數字貨幣。點對點的傳輸意味着一個去中心化的支付系統。數據結構
與全部的貨幣不一樣,比特幣不依靠特訂貨幣機構發行,它依據特定算法,經過大量的計算產生,比特幣經濟使用整個P2P網絡中衆多節點構成的分佈式數據庫來確認並記錄全部的交易行爲,並使用密碼學的設計來確保貨幣流通各個環節安全性。P2P的去中心化特性與算法自己能夠確保沒法經過大量製造比特幣來人爲操控幣值。基於密碼學的設計可使比特幣只能被真實的擁有者轉移或支付。這一樣確保了貨幣全部權與流通交易的匿名性。比特幣與其餘虛擬貨幣最大的不一樣,是其總數量很是有限,具備極強的稀缺性。該貨幣系統曾在4年內只有不超過1050萬個,以後的總數量將被永久限制在約2100萬個。oracle
每一位全部者(A)利用他的私鑰對前一次交易T1和下一位全部者(B)的公鑰(俗稱:地址)簽署一個隨機散列的數字簽名, A將此數據簽名製做爲交易單T2並將其(交易單T2)廣播全網,電子貨幣就發送給了下一位全部者。
【注意】前一次交易是指 這裏比特幣是如何到達如今這位用戶手中的,前一份表單。框架
特色:dom
驗證交易:
上面的交易單即展現了比特幣交易的方式,每一個交易單記錄一筆交易的具體信息,好比付款人(交易發起方的公鑰)、收款人(交易接收方的公鑰)、付款金額(上一筆交易信息)、付款人簽名(加密後的Hash值)等。
比特幣網絡中,數據以文件的形式被永久記錄,被稱之爲區塊(Block)。
get:一直覺得比特幣這種電子貨幣也會擁有特定的數據結構來表示貨幣,可是,本質上比特幣的存在體如今交易單。交易單相似於銀行的帳單,經過記錄貨幣的去留來證實你有多少貨幣,而不是提供給你具體的貨幣單元。
區塊鏈是分佈式數據存儲、點對點傳輸、共識機制、加密算法等計算機技術的新型應用模式。區塊鏈(Blockchain),是比特幣的一個重要概念,它本質上是一個去中心化的數據庫,同時做爲比特幣的底層技術,是一串使用密碼學方法相關聯產生的數據塊,每個數據塊中包含了一批次比特幣網絡交易的信息,用於驗證其信息的有效性(防僞)和生成下一個區塊。
比特幣白皮書英文原版 其實並未出現blockchain一詞,而是使用的chain of blocks。最先的比特幣白皮書中文翻譯版中,將chain of block翻譯成了區塊鏈。這是「區塊鏈」這一中文詞最先的出現時間。
許多的區塊構成了區塊鏈,Block之間以雙向鏈表的方式連接起來,而且每一個Block都會保存其上一個Block的Hash值,只有一個Block沒有上一個節點,即創世Block。Block有不少份, 每一個Block只記錄比特幣全網10分鐘內的交易信息,每約10分鐘產生一個新的Block。產生Block的過程,也被稱爲「挖礦」。
get:能夠看到,不是每一份帳單就構成一個區塊,一個區塊包含了多筆交易,許多區塊連成雙向鏈表。
跟傳統的分佈式存儲有所不一樣,區塊鏈的分佈式存儲的獨特性主要體如今兩個方面:一是區塊鏈每一個節點都按照塊鏈式結構存儲完整的數據,傳統分佈式存儲通常是將數據按照必定的規則分紅多份進行存儲。二是區塊鏈每一個節點存儲都是獨立的、地位等同的,依靠共識機制保證存儲的一致性,而傳統分佈式存儲通常是經過中心節點往其餘備份節點同步數據。
每一筆交易發生後,並不算完成,交易數據必須寫入數據庫,纔算成立,對方纔能真正收到錢。首先,全部的交易數據都會傳送到礦工那裏。礦工負責把這些交易寫入區塊鏈。計算哈希的過程叫挖礦,計算哈希的機器就叫作礦機,操做礦機的人就叫作礦工。根據比特幣協議,一個區塊的大小最大是 1MB,而一筆交易大概是500字節左右,所以一個區塊最多能夠包含2000多筆交易。礦工負責把這2000多筆交易打包在一塊兒,組成一個區塊,而後計算這個區塊的哈希(Hash)。
中本聰故意讓添加新區塊,變得很困難。他的設計是,平均每10分鐘,全網才能生成一個新區塊,一小時也就六個。因爲人爲設置了大量的計算及難度係數,須要大量算力才能獲得當前區塊的有效哈希,進而新區塊添加到區塊鏈。礦工之間也在競爭,誰先算出來了,誰就能第一個添加新區塊進入區塊鏈,從而享受這個區塊的所有收益。其它礦工只能過來把那一頁抄寫一份,貼在本身帳本的最後面,而後又開始新的記帳過程。周而復始,生生不息,帳本一頁一頁的增長,帳本愈來愈厚。
全網每十分鐘(算法動態調節至約十分鐘產生一個)產生一個新的Block,每一個新的Block含有的必定數額的比特幣歸建立者全部,此規則稱爲「激勵」。
比特幣體系的設計要求:
Block應由那些最誠實最勤勞的節點產生,於是引入工做量證實(Proof Of Work,POW)機制。比特幣體系傾向於認爲:一個節點在提供信息以前付出了巨大的工做量,那麼他多是誠實的機率比較高(他提供的Block中數據最有可能沒有問題,固然不管如何其餘節點也是會對其進行檢查的)。
挖礦過程實際上就是反覆去嘗試尋找一個隨機數(又稱「幸運數」),使得將最後一個Block的hash值、當前世界中還沒有被加入到任何Block的交易單、隨機數三部分組織起來送入SHA256算法計算出散列值X(256位),若是X知足必定條件(好比前20位均爲0),那麼該節點初步得到建立Block的權利。
工做量證實系統主要特徵是客戶端須要作必定難度的工做得出一個結果,驗證方卻很容易經過結果來檢查出客戶端是否是作了相應的工做。這種方案的一個核心特徵是不對稱性:工做對於請求方是適中的,對於驗證方則是易於驗證的。它與驗證碼不一樣,驗證碼的設計出發點是易於被人類解決而不易被計算機解決。
下圖表示的是工做量證實的流程:
某一節點若收到多個針對同一前續Block的後續臨時Block,則該節點會在本地Block鏈上創建分支,多個臨時Block對應多個分支。從block hash算法咱們知道,合理的block並非惟一的,同一高度存在多個block的可能性。那麼,當同一個高度出現多個時,主鏈即出現分叉(Fork)。遇到分叉時,網絡會根據下列原則選舉出Best Chain。
不一樣高度的分支,老是接受最高(即最長)的那條分支相同高度的,接受難度最大的高度相同且難度一致的,接受時間最先的若全部均相同,則按照從網絡接受的順序等待Block Chain高度增一,則從新選擇Best Chain。
去中心化(英語:decentralization)是互聯網發展過程當中造成的社會關係形態和內容產生形態,是相對於「中心化」而言的新型網絡內容生產過程。
相對於早期的互聯網(Web 1.0)時代,Web 2.0內容再也不是由專業網站或特定人羣所產生,而是由權級平等的全體網民共同參與、共同創造的結果。任何人均可以在網絡上表達本身的觀點或創造原創的內容,共同生產信息。
隨着網絡服務形態的多元化,去中心化網絡模型愈來愈清晰,也愈來愈成爲可能。Web 2.0興起後,Wikipedia、Flickr、Blogger等網絡服務商所提供的服務都是去中心化的,任何參與者都可提交內容,網民共同進行內容協同創做或貢獻。
【注意】去中心化,不是不要中心,而是由節點來自由選擇中心、自由決定中心。簡單地說,中心化的意思,是中心決定節點。節點必須依賴中心,節點離開了中心就沒法生存。在去中心化系統中,任何人都是一個節點,任何人也均可以成爲一箇中心。任何中心都不是永久的,而是階段性的,任何中心對節點都不具備強制性。
上圖爲一個「區塊」,其包含了區塊信息和交易信息
交易信息
問題3:什麼是ICO衆籌?
ICO (inital Coin Offering)的縮寫,譯爲首次幣發行,院子股票市場的首次公開發行IPO概念,是區塊鏈首次發行代幣,募集比特幣、以太坊等通用數字貨幣的行爲。
ICO是一種區塊鏈行業術語,是一種爲加密數字貨幣/區塊鏈項目籌措資金的經常使用方式,早期參與者能夠從中得到初始產生的加密數字貨幣做爲回報。因爲代幣具備市場價值,能夠兌換成法幣,從而支持項目的開發成本。ICO所發行的代幣,能夠基於不一樣的區塊鏈。常見的是基於以太坊(ETH)和比特股(BTS)區塊鏈發行,由區塊鏈提供記帳服務和價值共識,實現全球發行和流通。
發展歷史:
個人理解來看,ICO衆籌就是發行一種新的加密貨幣,能夠利用以太坊的網絡進行轉帳,錢包地址可以使用以太坊的地址,錢包祕鑰也能夠是以太坊的錢包祕鑰,區塊鏈使用以太坊的區塊鏈。我看了一篇介紹如何發佈一個所謂「加密貨幣」進行ICO衆籌的文章,見最後參考資料的第一篇。
區塊鏈是伴隨着比特幣而產生的新概念,可是區塊鏈的概念範圍十分寬廣,不會僅僅侷限於比特幣的交易。下面是我找到的區塊鏈能夠應用的場景
還有許多行業,好比保險行業、金融行業、房地產行業、開發行業等等。
張老師上課生動有趣地爲咱們從比特幣的運做方式介紹了區塊鏈的相關技術,也爲咱們打開了另外一道財富之門,然而,我可能並不會利用比特幣發財,感受比特幣掙錢是一個須要謀劃與策略,還須要很好的電腦配置(不止一臺很好的電腦配置。。。)因此,我最感興趣的仍是區塊鏈技術,利用全新的分佈式計算方法,區塊鏈的去中心化、共識機制等都是我歷來沒有了解過的全新領域,以爲很神奇,可以擺脫控制,由你們共同操做,就像比特幣不受任何組織或國家的控制,經過其自身機制,吸引了成千上萬的「曠工」,共同維護這個系統。區塊鏈也不只僅侷限於比特幣或是以太坊,區塊鏈所能發揮做用的領域遠遠不止這些,咱們在學習理解區塊鏈技術後,可以將區塊鏈技術應用於更多領域。
本文介紹了一種新型的基於可信任硬件的區塊鏈挖掘框架:節約型挖掘(REM)
大多數區塊鏈中所使用的工做量證實(proof-of-work, PoW)很容易就會被認爲是能源浪費證實。除了選擇鏈中的下一個區塊以外,全部的散列並無任何用處。綜合的能源浪費實際上至關驚人:
你們一致認爲,PoW毫無用處,只會產生巨大的金錢和環境成本。今天,比特幣網絡使用的電力比核反應堆生產的還要多,預計到2020年,它的電力消耗將遇上整個丹麥所消耗的。
所以,專家們研究了其餘的共識方案,包括基於BFT的和權益證實( Proof of Stake),但這些「要麼限制了共識分享,要麼有明顯的安全限制」。在這篇文章中,做者提供了另一種方法。咱們將再也不使用「工做量證實」,而使用「有用工做量證實」(PoUW)。
在PoUW系統中,CPU在承擔原來的工做以外,還能夠同時承擔區塊鏈的工做。在PoUW方案下工做的CPU開銷是原來運行開銷的5-15%左右。
REM(Resource-Efficient Mining,節約型挖掘)的核心依賴於英特爾的SGX(Software Guard Extensions,軟件防禦擴展指令)技術,但正如咱們將看到的,須要多個組件協做工做才能使總體方案發揮做用。
圖中有區塊鏈代理(Agent)、REM礦工(Miner),以及一個或多個有用的工做客戶端(Useful Work client)。代理用於收集事務並生成區塊模板,該模板是在缺乏PoUW的狀況下的候選區塊。礦工以PoUW任務的形式獲取區塊模板,並從一個有用的工做客戶端中獲取有用的工做負載。
PoUW包括兩個部分:挖掘成功時候的有用工做程序認證,以及合法檢查員的認證。
實驗顯示對示例基準測試的性能影響最小(5-15%)。
這篇論文中,做者介紹了一個全新的算法叫作「Thunderella」。與通常狀態機的共識原理不一樣(狀態機至關於一個共識機制的抽象,對分佈式網絡中大量節點的請求進行確認),Thunderella使得狀態機能夠在實現快速異步處理的同時,在異常時還能夠啓動回滾機制。如此一來,狀態機的相應速度與同步協議無異,在不出現「拜占庭將軍問題」(及大多數人都是誠實的)的狀況下,能夠作到對交易的瞬間響應。
在分佈式系統中有一種叫作狀態機複製的技術,在這項技術中,每一組服務器同步一個增加而且線性的日誌,而這必須知足兩點屬性:
基於區塊鏈中存在的大量不可信節點,對於大規模設置的兩大協議
Thunderella:
從DC-nets開始,提出了幾種對等匿名通訊協議,儘管這些協議具備強大的匿名保證,但幾乎沒有進行過實踐的檢驗。所以大多數協議沒法同時解決時隙衝突和惡意對等方中斷的關鍵問題,而其他協議沒法處理帶有的惡意對等方通信輪次。做者將P2P匿名通訊協議概念化爲P2P混合,提出一種新穎的P2P混合協議DiceMix,在最佳狀況下僅須要四次通訊輪次,在最壞狀況下須要4 + 2f輪次與惡意對等。因爲每一個單獨的惡意對等體均可以經過簡單地省略他的消息來強制重啓P2P混合協議,咱們發現DiceMix具備O(f)輪的最壞狀況複雜度,是最佳的P2P混合解決方案。
在應用程序方面,使用DiceMix來提升比特幣等加密貨幣的匿名性。經過公開可用的分佈式帳本(或區塊鏈)進行的假名交易的公開可驗證性使得這些系統極易受到各類可連接性和去匿名攻擊的攻擊。同時使用DiceMix來定義CoinShuffle++,這是一種硬幣混合協議,容許假名對等方執行不可連接的交易。方式與當前的比特幣系統徹底兼容。下圖是DiceMix執行的示例。
最後對P2P混合協議進行了去匿名攻擊,以保證在存在破壞性對等體的狀況下終止。DiceMix經過要求新的輸入消息(例如以前從未使用過的加密密鑰)來抵抗這種攻擊。
上圖是P2P混合協議遭到去匿名攻擊,而DiceMix躲避攻擊的方式是:
爲了不消息集的交集,DiceMix在每次運行中繪製新的消息。 此外,每當某個誠實的對等體p排除沒法訪問的誠實對等體p0(並犧牲p0的匿名性)時,正確的確認屬性將確保當前運行不會成功終止對等體p0,由於p0和p將具備不一樣的視圖。 當前未設置的同伴的P組。 所以,當前運行不須要匿名,而且能夠平等地處理惡意和脫機對等。
試圖經過「空間證實」(Proof of Space)來保證比特幣及其餘加密貨幣的安全。「空間證實」是Bram Cohen以前提出的一種取代PoW的工做證實方式。
工做量證實(Proof Of Work,簡稱POW)
簡單理解就是一份證實,用來確認你作過必定量的工做。工做量證實系統主要特徵是客戶端須要作必定難度的工做得出一個結果,驗證方卻很容易經過結果來檢查出客戶端是否是作了相應的工做。這種方案的一個核心特徵是不對稱性:工做對於請求方是適中的,對於驗證方則是易於驗證的。
「空間證實(proof-of-space)」
依賴於磁盤空間而不是計算力做爲挖礦的主要資源,建立了一種聲稱可以比PoW更加生態友好且經濟的替代選擇。這份標題爲《以空間證實的應用超越赫爾曼的時間記憶折中》概述了經過使用空間證實(proof-of-space)創建一種對能源需求更少的挖礦流程——比特幣的能源集約型挖礦模式一直遭受不少人的批評,被不少人認爲是一種資源浪費。因爲能源要求的下降,以及對現有硬件的依賴,這種方式旨在是任何擁有一臺計算機的人都可以進行挖礦。在空間證實體系下,礦工能夠將未使用的磁盤空間分配到網絡中,而成功挖到區塊的機率將與礦工分配的磁盤空間與網絡的總能力成比例。
Publicly verifiable proofs of sequential work---公開可驗證的公做證實
隨機預言機(random oracle,簡稱RO)。在密碼學裏面,隨機預言是一個預言(簡單說像是理論的黑箱),對任何輸入都回傳一個真正均勻隨機的輸出(請參考離散型均勻分佈),不過對相同的輸入,該預言每次都會回傳如出一轍的輸出。由於預言機實際上起到的是一個黑匣子的做用,中間是存在一個固定的算法的,這個算法至關複雜且是保密的,所以相同的輸入值在通過了這個算法的運算以後輸出的是相同的輸出值,就像數學上一個肯定的函數,相同的數值代入運算幾回都會獲得一樣的結果同樣。預言機存在的目的是爲了讓你沒法知道本身的輸入能獲得什麼樣的結果,若是你給出兩個輸入,預言機同時給定兩個輸出的話,你不會知道這兩個輸出分別對應的是哪一個輸入。
一個Merkle DAG,一個無迴路有向圖,對象之間的links都是hash加密嵌入在源目標中。這是Git數據結構的一種推廣。
本論文講述了一種SMARTPOOL,一個分散的挖掘池的新協議設計。該協議展現瞭如何利用智能合同,自治的區塊鏈程序,來分散加密貨幣的挖掘。SMARTPOOL將交易選擇控制權返還給礦商,同時提供低價格的收購。SMARTPOOL的規模比集中的礦池要低,並被設計成規模擴大到危言聳聽的礦工。而且在Ethereum和Ethereum的經典網絡上實現了一個健壯的SMARTPOOL實現。
文章提出了POW所面臨的的困難,在本文中,將重點放在有關採礦池的屬性列表中。 像比特幣和以太坊這樣的加密貨幣獎勵網絡參與者(或礦工)新的加密硬幣,用於解決計算難度大的難題(或工做證實謎題)。
解決方案:
文章針對分散式集中採礦的解決方案利用以太坊智能合約,這些合同是在區塊鏈上運行的分散式自主代理。非合約賬戶在以太網中具備地址和餘額,以太幣是以太坊的本地貨幣。此外,智能合約還具備代碼和私有持久存儲(即變量和值之間的映射)。智能合約代碼相似於能夠操縱存儲變量的普通程序。爲了在地址addr處調用合同(即執行其代碼),用戶向addr發送具備適當有效載荷的事務,即支付執行(在Ether中)和/或用於調用的輸入數據。只要大多數以太坊礦工忠實地遵循以太坊協議,合同代碼就會在區塊鏈上正確執行。
在較高的層面上,SMARTPOOL用智能合約取代了採礦池運營商。智能合約經過存儲礦工提交的全部股票,充當游泳池的無信任簿記員。提交新股份時,合同將驗證共享的有效性,並檢查否
之前的共享記錄存在,而後更新相應的礦工記錄。咱們容許礦工在本地生成池的塊模板(在3.3節中詳細討論)。若是礦工找到一個有效塊的共享,它會將該塊廣播到加密貨幣網絡,獎勵將當即記入SMARTPOOL。而後,SMARTPOOL公平地向池中的全部礦工發放區塊獎勵。
區塊鏈這幾年逐漸走入研究人員的視野,區塊鏈這幾年逐漸被應用到多種不一樣的領域,人們的研究方向仍是集中在解決區塊鏈的工做量證實以及相關算法的改進中,但願可以獲得更加高效地算法解決區塊鏈現存的安全等問題。