• <option id="cacee"><noscript id="cacee"></noscript></option>
  • <table id="cacee"><noscript id="cacee"></noscript></table>
  • <td id="cacee"></td>
  • <option id="cacee"></option>
  • <table id="cacee"></table>
  • <option id="cacee"><option id="cacee"></option></option>
  • <table id="cacee"><source id="cacee"></source></table><td id="cacee"><rt id="cacee"></rt></td>
    <option id="cacee"><option id="cacee"></option></option>
     找回密碼
     立即注冊

    掃一掃,登錄網站

    首頁 自媒體 查看內容
    • 4837
    • 0
    • 分享到

    區塊鏈防篡改的“哈希算法”!

    2018-5-13 22:54

    來源: cmd20132016

    哈希算法是區塊鏈中保證交易信息不被篡改的單向密碼機制。哈希算法接收一段明文后,會以一種不可逆的方式將其轉化為一段長度較短、位數固定的散列數據。


    它有兩個特點:


    加密過程不可逆,意味著我們無法通過輸出的散列數據倒推原本的明文是什么;


    輸入的明文與輸出的散列數據一一對應,任何一個輸入信息的變化,都必將導致最終輸出的散列數據的變化。


    在區塊鏈中,通常使用SHA-256(安全散列算法)進行區塊加密,這種算法的輸入長度為256位,輸出的是一串長度為32字節的隨機散列數據。


    區塊鏈通過哈希算法對一個交易區塊中的交易信息進行加密,并把信息壓縮成由一串數字和字母組成的散列字符串。區塊鏈的哈希值能夠唯一而準確地標識一個區塊,區塊鏈中任意節點通過簡單的哈希計算都可以獲得這個區塊的哈希值,計算出的哈希值沒有變化也就意味著區塊中的信息沒有被篡改。



    下面舉個例子詳細了解下


    ▌場景一、小星和阿呆在籃球場


    小星:阿呆,你是不是口渴了,你要不要去買水喝,順便幫我買一瓶哈。

    阿呆:呵呵,你的小心思我還不知道,你自己也口渴了吧,你去,我不去。

    小星:哎哎,咱們不扯這些沒用的,來拋硬幣,好不好,正面你去,反面我去,公平吧,如何?

    阿呆:好吧。

    ………


    ▌場景二、小星與阿呆即時聊天中


    阿呆:小星,今天來我家玩,來的路上,有一家披薩店,很好吃,順便帶一點哈。

    小星:哦,要不你來我家玩吧,你順便帶上披薩。

    阿呆:小星,你竟然都這么說了,看來只能拋硬幣解決了。

    小星:丫的,這個怎么拋,我怎么知道你有沒有搞鬼。

    阿呆:嗯,那到也是,要不這樣。


    1.考慮對結果加密


    阿呆:我心中想一個數,假設為A,然后A在乘以一個數B,得到結果C。A是我的密鑰,我把結果C告訴你。你來猜A是奇數還是偶數,猜中了,算你贏。


    小星:這不行,如果你告訴我C是12,我猜A是奇數,你可以說A是4,B是3。我猜A是偶數,你可以說A是3,B是4。要不你告訴我C是多少的時候,也告訴我B是多少。


    阿呆:那這不行,告訴你C和B,不等于告訴你A是多少了,還猜個屁。不行得換個方式。


    2.不可逆加密


    阿呆:小星,你看這樣可以不,我想一個A,經過下面的過程:


    1.A+123=B
    2.B^2=C
    3.取C中第2~4位數,組成一個3位數D
    4.D/12的結果求余數,得到E


    阿呆:我把E和上述計算方式都告訴你,你猜A是奇數還是偶數,然后我告訴你A是多少,你可以按上述的計算過程來驗證我是否有說謊。


    小星:嗯,我想想,假如阿呆你想的A為5,那么:


    5+123=128
    128^2=16384
    D=638 E=638mod12=53


    (mod表示除法的求余數)


    小星:咦,厲害了,一個A值對應一個唯一的E值,根據E還推算不出來A。你太賤了,好吧,這個算公平,誰撒謊都能被識別出來。


    小星:阿呆,你出題吧 ……


    這種丟掉一部分信息的加密方式稱為“單向加密”,也叫哈希算法。


    問題:阿呆有沒有可能事先找出一奇一偶,按上述加密運算得到一樣的結果呢?

    答案:有可能的,如何解決這個問題呢?增加上述算法的難度,以至于阿呆很難找到。


    3.哈希算法


    一個可靠的哈希算法,應該滿足:


    1.對于給定的數據M,很容易算出哈希值X=F(M);
    2.根據X很難反算出M;
    3.很難找到M和N使得F(N)=F(M)。


    密碼學中的哈希函數有3個重要的性質,即抗碰撞性、原像不可逆、難題友好性。碰撞性,就是指阿呆事先找出一奇一偶使得哈希結果一致,但這在計算上是不可行的。


    首先,把大空間的消息壓縮到小空間上,碰撞肯定是存在的。假設哈希值長度固定為256位,如果順序取1,2,…2^256+1, 這2^256+1個輸入值,逐一計算其哈希值,肯定能找到兩個輸入值使得其哈希值相同。但不要高興的太早,因為你得有時間把它算出來,才是你的。


    為什么這么說呢?


    根據生日悖論,如果隨機挑選其中的2^128+1輸入,則有99.8%的概率發現至少一對碰撞輸入。那么對于哈希值長度為256位的哈希函數,平均需要完成2^128次哈希計算,才能找到碰撞對。如果計算機每秒進行10000次哈希計算,需要約10^27年才能完成2^128次哈希計算。


    所以,不要想著阿呆作弊了,因為估計也活不了這么久。當然如果計算機運算能力大幅提升,就有可能,這也是為什么說量子計算機對區塊鏈有影響了。


    那這個有什么用途呢?


    用來驗證信息的完整性,因為如果信息在傳遞過程中被篡改,那么運行哈希計算得到的哈希值與原來的哈希值不一樣。在區塊鏈中,哈希函數的抗碰撞性用來做區塊和交易的完整性驗證,一有篡改就能被識別出來。


    部分文章來源:幣乎(玩火的猴子)

    版權申明:本內容來自于互聯網,屬第三方匯集推薦平臺。本文的版權歸原作者所有,文章言論不代表鏈門戶的觀點,鏈門戶不承擔任何法律責任。如有侵權請聯系QQ:3341927519進行反饋。
    相關新聞
    發表評論

    請先 注冊/登錄 后參與評論

      回頂部
    • <option id="cacee"><noscript id="cacee"></noscript></option>
    • <table id="cacee"><noscript id="cacee"></noscript></table>
    • <td id="cacee"></td>
    • <option id="cacee"></option>
    • <table id="cacee"></table>
    • <option id="cacee"><option id="cacee"></option></option>
    • <table id="cacee"><source id="cacee"></source></table><td id="cacee"><rt id="cacee"></rt></td>
      <option id="cacee"><option id="cacee"></option></option>
      妖精视频