區塊鏈的密碼學基礎

效仿Unyielding_L的雜談分享,這些都是零碎的知識點。

目錄

1 hash加密

1.1 hash的定義

1.1 hash用於檢驗信息是否篡改

1.1 hash碰撞

1.2 hash的輸入取值要求

2 區塊鏈怎麼運用hash

2.1 hash只是用於簽名而不是用於加密貨幣


1 hash加密

1.1 hash的定義

hash加密就是指不同長度的明文,轉換成具有相同長度不可逆的密文,而加密則是把不同的長度的密文轉換成具有不同長度可逆的密文,通常是隨這內容長度的增長而增長。

1.1 hash用於檢驗信息是否篡改

假設此時Unyielding_L和我簽訂了一份合同,我可以把這一篇合同命名爲message,通過hash即H(message)則得到了一個字符串假設是‘ko$no$dio%da’然後過了一段時間,Unyielding_L偷偷把協議內容修改了,變成了message1,但是在H(message1),發現值變成了‘jooooooojo’當檢驗‘ko$no$dio%da’ 不等於‘jooooooojo’就知道我的合同被篡改了。

1.1 hash碰撞

collision resistance是指明文m1在H(m1)後和明文m2,H(m2)後兩者都是相等的hash值,就是指產生了hash衝突。假如我的密鑰是‘hello_Unyielding_L’hash後的密文是‘cavvb3aicwej89’假如Unyielding_L可以通過不斷嘗試不同的字符串,也得到了‘cavvb3aicwej89’那它對應的字符串就是我的明文‘hello_Unyielding_L’得到了我的密鑰。

但是現實中是幾乎不可能的,產生的機率很小基本上是不可能發生的。

1.2 hash的輸入取值要求

hash衝突產生主要是兩個方面決定,第一個方面是:以及是hash的輸入值。

輸入的值應該滿足一下兩個條件:

  • 輸入的取值分佈要離散:例如你的輸入是1111111111,取值都集中在數字1中,很容易就能破解。假如Unyielding_L銀行密碼是123456,那我嫁給他以後是不是可以天天收割他的私房錢?
  • 輸入的取值範圍要廣泛:全爲數字的密碼就0~9十種可能性,但是A~Za~z就有52種可能性, 可能的情況越多就越難猜測。

2 區塊鏈怎麼運用hash

在塊的頭部有一個H(block header)= H(m||nonce),其中nonce是一個隨機的字符串,nonce就是相當於合同的簽名,m則是合約的內容。我和Unyielding_L有一份合約此時我們的target目標的閾值,記錄者(挖礦的礦工)人爲地製造hash衝突,得到nonce的值,當H(block header2)<= target 的時候,則這條數據可以成功添加到鏈上,把nonce的值發佈出去,而其他的人想驗證這一條合同是不是符合規範只是需要驗證一次H(m||nonce)< target即可。因爲產生hash是小概率事件,所以製造hash衝突的礦工需要很強的算力,當然也會給礦工獎勵。

2.1 hash只是用於簽名而不是用於加密貨幣

鑑於上面的內容,加密貨幣不加密,每一筆交易都是公開的,我們的賬戶其實可以比喻成一對公鑰和私鑰,用私鑰進行簽名,然後發佈自己的公鑰,讓其他人驗證我的簽名。


審閱:@ Unyielding_L

以上是我的拙見,有什麼意見Thanks♪(・ω・)ノ

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章