Comunion 區塊鏈深度學習系列|哈希算法的應用

2020-12-13 澎湃新聞

本系列內容包含:

基本概念及原理、密碼學、共識算法、錢包及節點原理、挖礦原理及實現。

挖礦

以比特幣網絡為例,比特幣挖礦主要使用到的算法是SHA-256,其具體流程參見下圖。

我們從上往下進行分析:

第一層是:n Version(版本號);

第二層是:hash Preb Block(前一個區塊的哈希);

第三層是:hash Merkle Root(交易Merkle樹根),

第四層是:n Time(時間戳);

第五層是:n Bits(難度值);

第六層是:n Nonce(隨機數);

第七層是:Hash(哈希函數)。

裡面的n代表連續0的個數,該值要小於當前區塊難度目標值m,挖到塊的條件是前n個比特位全部為0,n越大,難度越大。假設最低難度對應最大目標值為M,則區塊難度為:M/m

看過前面課程的朋友應該會有印象,這些全部是區塊頭中的數據欄位。

再來看左邊,我們分析一下為什麼其中有些是固定而有些是可變的。

1.版本號和前一個區塊哈希是固定的,以比特幣為例,假設當前比特幣區塊高度為N,如果某人想挖接下來N+1區塊的話,那麼這個時候版本號必須是固定的,前一個區塊的哈希必須也是固定的。因為在不存在分叉的情況下,當前區塊包含上一個區塊的哈希值;

也就是N-1區塊的哈希值加上N區塊數據算出N區塊哈希值,然後將N區塊哈希值當成N+1區塊的的前一區塊哈希值。這裡有點繞,希望大家多理解一下;

2.交易Merkle根是可變的,為什麼說可變呢?因為在挖礦的時候,肯定會準備一個打包區塊,打包區塊形成的時候,礦工會根據自己的需求或根據利益算法,將交易打包進去,最後整理成一個Merkle根;

3.時間戳是可變的,挖礦有個時間範圍,在這個時間範圍內挖出的礦都為有效,所以在有效時間內的時間是可以任意調節的;

4.難度值在一定周期內是固定的,會隨著周期的改變而變化;

5.Nonce是可變的,這裡就不展開講了,忘記的朋友可以翻閱前面的講解。

在挖礦的時候,到Nonce的時候,由於時間戳和Merkle根都已經經過計算固定了,這時只需要改變Nonce就可以了。此時可以把這7個數據看成一個整體,前面6個數據是X,把X放在哈希函數裡面,會出來一個值,比如說Y值。

由於比特幣網絡裡使用的哈希算法是SHA-256,當Y值出來之後,就會得到一個256個由0和1組成的字符串。這個字符串出來之後,它會和X裡面的難度值比較大小。

每計算一次,也就是通過了一個Nonce,就會產生一個Y值,Y值會和難度值比較大小,如果Y值小於難度值,此時就找到了一個有效的Nonce,礦也就挖出來了。

生成地址

地址的生成中也用到了哈希算法。從下圖可以看到從公鑰到比特幣地址生成的流程。

第一層:生成公鑰(如何生成會在後續課程解答);

第二層:兩層哈希算法,SHA-265和RIPMD-160(常稱為雙哈希或Hash160);

第三層:然後雙層哈希計算,會產生公鑰哈希;

第四層:Base58Check編碼(在Base58編碼基礎上的改良);

第五層:經過編碼,得到一個編碼串,這個編碼串就是公鑰哈希即比特幣地址。

形成 Merkle tree 和交易Hash

在默克樹樹結構和形成交易哈希裡面也使用到了哈希算法。

上圖的默克樹中,最底層有4個葉子節點,最左邊H A下面有個Hash(TxA),意思是:Tx表示交易,A表示交易編號。

假設現在使用的哈希算法是SHA-256,那麼交易產生時,會對HA、HB分別進行哈希計算,會分別得到2個由256個0和1組成的字符串。同理,HC、HD也會得到相應的字符串,這樣四個交易會形成總的默克爾根。

區塊鏈(哈希鏈)

大家都知道在區塊鏈中,每個區塊都是一環套一環銜接上去的,就像一個鏈條一樣。我們通過下面的圖片,具體分析一下。

從圖中可以看出鏈的順序是從下往上增長的,最下面塊的高度是277314,這個區塊裡面包含上一個區塊的哈希值:0000…0bdf(紅框1),這裡的0000…0bdf是上一個區塊(277312)區塊頭的哈希值。

同理,277315區塊裡面包含的 上一區塊頭哈希值:0000…2249(紅框3),也是區塊277314的區塊頭哈希值,即:0000…2249(紅框2)。同理277316區塊也是這樣的情況,這也是我們第一節希望大家多理解的問題。

這樣的情況就保證了任何人可以從某一個區塊中,找到這個區塊裡面包含的 上一區塊的哈希值,也就是其父區塊。

現在我們討論的問題都是針對於區塊鏈沒有分叉的一個情況,到後面我們詳細分析區塊鏈分叉之後情況又是怎樣的。

通過這三個區塊我們能發現,從某種程度上來說區塊鏈就是一個哈希鏈。最新產生的區塊通過哈希值指向上一個區塊,上一個區塊在指向上上一個區塊……一直指向創世區塊。通過這個關係,這些區塊形成了鏈條,也就是我們常說的區塊鏈。

這是哈希算法在區塊鏈中常用到的具體應用,大家可以預先想一下,為什麼區塊鏈中會使用哈希算法,而不是其他算法呢?後面的課程我們會給大家進行解答。

下節預告:

什麼是哈希

相關焦點

  • 哈希算法是理解區塊鏈重要一環
    民間常言:「說唱有嘻哈,算法有哈希。」在了解比特幣投資和區塊鏈技術中,哈希算法作為「常客」時常出現。但大多數朋友對它知之甚少,為它晦澀難懂的內涵所頭疼。那麼今天我們就來簡單說說,什麼是「哈希算法」? 哈希音譯自「Hash」,又名為「散列」。本質上是一種電腦程式,可接收任意長度的信心輸入,然後通過哈希算法,創建小的數字「指紋」的方式。
  • 什麼是哈希算法?
    我們要講的哈希算法也是這樣,原始數據經過哈希算法加工以後得到的數據就叫作哈希值(Hash Value)。哈希算法並不是一個算法,而是一大類算法的統稱。由於哈希算法的技術細節已經超綱,我們在這裡不討論它的原理,只介紹這種算法的性質和應用。
  • 區塊鏈基礎-哈希(hash)是什麼
    如果你從事編程,或者對區塊鏈感興趣,那麼哈希這個詞肯定經常聽到,那麼哈希到底是什麼,今天就簡單聊一聊。首先我有一個算法,有一個輸入和一個輸出,換句話說當你輸入一個數據,我返回給你一個數據。我們假定一下我的算法是 +1,然後算法的輸入和輸出都是數字,當你輸入一個數字時,我返回給你一個數字,那麼根據我這個算法,我們就知道,當你輸入一個數字時,輸出的一定是另外一個數字,因為我輸出的數字是在你的基礎上加一,而且我們也知道沒有最大的數字(不考慮計算機能使用的最大數值),這樣就有一個明顯的特點:輸入的數據不同,輸出的數據一定不同。
  • Comunion 區塊鏈深度學習系列|錢包分類詳解
    本系列內容包含:基本概念及原理、密碼學、共識算法、錢包及節點原理、挖礦原理及實現。通俗來說,數字錢包是管理資產的容器。下面我們從搭載平臺、是否離線、籤名要求和數據存儲方面進行詳細的分析。
  • 區塊鏈核心知識丨Hash算法原理
    關注「區鏈數科」,讓你從入門到精通區塊鏈!上一篇文章我們講解了「要了解區塊鏈一定要清楚區塊鏈技術的幾點技術原理!」今天我們來講解區塊鏈中「Hash算法」的基本原理。Hash--百科哈希算法將任意長度的二進位值映射為較短的固定長度的二進位值,這個小的二進位值稱為哈希值。哈希值是一段數據唯一且極其緊湊的數值表示形式。如果散列一段明文而且哪怕只更改該段落的一個字母,隨後的哈希都將產生不同的值。
  • AITD小課堂第十二課:哈希算法是什麼?非對稱加密是什麼?
    哈希算法是什麼? 區塊鏈的四大核心技術分別是密碼學、分布式帳本、共識機制以及智能合約。而密碼學作為其中最重要的一部分,可以說是區塊鏈的基石,而其他技術是以密碼學為地基,才能搭建出區塊鏈這座高樓大廈。
  • 基於RSA加密算法的隨機區塊鏈
    在開發我們的遊戲過程中,我們需要解決一個問題,在分布式網絡中生成隨機數很複雜,現幾乎所有區塊鏈都面臨這個問題。 因此,在任何人都無法相互信任的網際網路之間,創建隨機數可以解決許多問題。在本文中,我們將講解我們是如何在我們的遊戲中解決這個問題的。 首當其衝的便是Waves Xmas Tree.
  • 區塊鏈的定義以及未來價值與應用接受
    區塊鏈是什麼 區塊鏈顧名思義是由區塊組成的鏈,在介紹區塊鏈的應用之前我想先花不多的篇幅介紹一下到底什麼是區塊鏈,如果讀者朋友已經非常熟悉區塊鏈的原理了,大可以跳過本節 說人話: 區塊鏈從本質上講是一個帳本,當一個商品、一個行為、一個交易開始的時候,可以產生一個區塊,它的整個流動的聲明周期被詳細的記錄下來,形成了一個鏈
  • 哈希算法、哈希值和哈希表
    Hash,是指把任意長度的輸入通過一定的算法變成固定長度的輸出的過程,這個輸出稱作Hash值,或者Hash碼,這個算法叫做Hash算法,或者Hash函數,這個過程我們一般就稱作Hash,或者計算Hash。Hash翻譯為中文有哈希、散列、雜湊等。
  • 機器學習時代的哈希算法,將如何更高效地索引數據
    哈希算法一直是索引中最為經典的方法,它們能高效地儲存與檢索數據。但在去年 12 月,Jeff Dean 與 MIT 等研究者將索引視為模型,探索了深度學習模型學習的索引優於傳統索引結構的條件。本文首先將介紹什麼是索引以及哈希算法,並描述在機器學習與深度學習時代中,如何將索引視為模型學習比哈希算法更高效的表徵。
  • 超全,最新區塊鏈面試匯總50題(附答案)
    什麼是區塊鏈中的區塊,如何識別?回答:區塊鏈中的區塊不過是數字保險箱,用於存儲數據並永久鎖定。添加在塊上的數據是不可變的,即,不能更改或刪除數據。可以通過塊的高度和塊頭哈希來識別塊。塊中的數據通過稱為哈希函數的計算機算法進行檢測。它不僅鎖定了區塊鏈參與者可以看到的數據,而且使數據不可變。每個塊都有其哈希函數。
  • 國內外能源區塊鏈典型應用分析
    區塊鏈技術以其可追溯、不可篡改等技術特性已在能源電力領域顯示出強大的應用潛力,目前國內外眾多能源企業已經利用能源區塊鏈進行了多種場景應用實踐。隨著技術逐漸成熟,能源區塊鏈將對電網企業乃至能源行業的發展形態和趨勢產生重要影響。
  • 一文看懂區塊鏈的那些事,從比特幣到各種去中心化應用
    區塊鏈區塊鏈顧名思義就是由許多數字資料區塊串連起來的一條鏈,我們可以把它視為一種數字資料的儲存方式,不同於過往大家熟悉的資料庫系統,這條鏈的神奇之處在於它以嚴謹的數學與密碼學算法,實現了保證歷史內容無法任意新增、竄改或刪除的特性,同時搭配P2P的運作模式達成去中心化、公開透明、永久保存的優勢。
  • 《圖說區塊鏈》:一本非常適合小白入門的區塊鏈啟蒙書
    嗯,簡單的給大家介紹一下這本書吧,它一共分了5個篇章,起源篇,原理篇,人物篇,應用篇,還有裝備篇,其中花了大量篇幅的是原理篇和應用篇。不過老實講,對於我個人來說,這本書收穫是沒有那麼大的,畢竟我在區塊鏈這個行業裡也混了一些時候,這些老生常談對我的幫助實在是極度有限。
  • 五位院士、多位學者出席 這場堪稱「區塊鏈殿堂級」的學術會議談了...
    「結果推遲可能更好,在基礎學習之後,又一輪的區塊鏈熱潮起來了。」梅宏坦言。這次論壇由中國科學院學部主辦,中國科學院學部學術與出版工作委員會、信息技術科學部、數學物理學部、鵬城實驗室、中國信息通信研究院、中國通信學會聯合支持。「在這種熱潮中間,我們更多需要一些冷靜的思考。」梅宏說。
  • 夸克區塊鏈的社會意義是什麼?
    區塊鏈技術為我們提供了一種思維實驗的可能。2. 避免失控:搭建可追溯的算法監管架構人工智慧的失控一直是科幻小說反覆討論的經典話題。首先,深度學習算法本身不完全可控。我們難以解釋深度學習模型為何犯錯。基於深度學習的算法可在訓練後識別不同事物,而命令行的集合體組成了技術黑箱。
  • 代碼、協同、口令,科學家談區塊鏈最前沿技術
    區塊鏈技術是可以降低社會系統運作的信任成本。它用軟體的方式解決了信任問題,前提是要保證軟體的可信度。同時軟體運行也需要高的性能,儘管目前的區塊鏈性能已經足夠支撐我們去做一些應用和探索,但還不能替代中心化系統。
  • 搜搜幣漫談區塊鏈(企業融資應用篇)
    幾年來區塊鏈發展從理論到實踐都越來越成熟,大家也更多談及區塊鏈落地應用,相比其他領域的區塊鏈化,金融領域的區塊鏈化承受的風險更多,搜搜幣一直都在研究,區塊鏈技術的應用可以透視企業供應鏈金融風險點與風險源。
  • 北大肖臻老師《區塊鏈技術與應用》系列課來襲
    肖臻老師是北京大學計算機研究員、博士生,肖臻老師在北大教授的《區塊鏈技術與應用》系列公開課獲得了廣泛好評,榮獲2018年「北京大學教學優秀獎」。《區塊鏈技術與應用》系列課程系統的介紹了區塊鏈的框架、區塊鏈的基本概念和實現原理等。通過這門課的學習,能夠掌握比特幣、以太坊等區塊鏈技術的設計思路並有效解決實際問題。
  • 火龍果財經:融媒體區塊鏈綜合業務系統功能解析
    (1)媒體內容追蹤溯源基於區塊鏈的可追溯、難以篡改的特徵,實現媒體內容的追蹤溯源。(2)版權確權區塊鏈通過對非對稱加密、哈希算法、數字籤名等技術的融合應用,讓信息 和內容在區塊鏈上變得獨一無二、難以篡改,這為縣級融媒體版權的確權和存證 提供了可信手段,為縣級融媒體進一步與其他版權管理單位合作奠定了基礎。