效仿Unyielding_L的雜談分享,這些都是零碎的知識點。
目錄
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♪(・ω・)ノ