效仿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♪(・ω・)ノ