當前位置:
首頁 > 最新 > 學習區塊鏈需要知道的密碼學基礎知識

學習區塊鏈需要知道的密碼學基礎知識

筆者在這裡不會說很深的密碼學,只是作為一個科普,用通俗易懂的語言來給大家講解區塊鏈中最基本的密碼學知識。

本書來自對《區塊鏈技術指南》的解讀、精鍊和擴展。

關鍵知識點:hash(哈希、散列)演算法,數字摘要,對稱加密,非對稱加密,數字簽名,Merkle樹,同態加密(Homomorphic Encryption),零知識證明。

hash演算法

簡單來說就是把任意數據(二進位)變為固定長度的二進位,小到一個數字「1」,大到一個視頻文件,只要是最終以二進位形式存儲的數據,就能通過hash演算法變為固定長度的一串數據。

一個優秀的hash演算法有一下四個特點:

正面快速:就是說加密的速度要在有限時間和有限資源內完成,且越快越好。

逆向困難:就是說給你一個加密後的hash值數據,要想逆向破解獲得加密前的明文是極其困難的。

輸入敏感:明文只要發生哪怕一點點改變,進行hash運算後的值都會產生很大的改變。

衝突避免:不同的明文,他們進行hash運算後的hash值基本不可能一樣。

衝突避免又叫做「抗碰撞性」,如果給你一個明文,得到hash值後,你無法找到另外一個明文的hash值與他一樣,那麼就叫做「抗弱碰撞性」。要是你自己隨便找兩個明文,讓他們的hash值一樣,如果做不到,那麼叫做「抗強碰撞性」,也就是說具有更強的「抗碰撞性」。

現在比較流行的就是MD5和SHA-1演算法。但是由於這兩種演算法不夠安全,也就是在「抗碰撞性」上做得不夠好,於是又有了SHA-224、SHA-256,SHA-512等演算法。

比特幣採用的SHA-256 hash演算法,共有256位,也就是2的256次方個結果(這個數字十分巨大),產生新區快時候,由於hash逆向困難,曠工就要用哪一個值去跟新區塊的hash的值碰撞,誰先猜對,就讓誰在新的區塊中寫入信息,並且獲得新區快中的獎勵btc。

筆者對「1」和「2」進行的hash演算法,下面有很多種:md5,sha1,sha256等。

數字摘要

其實就是運用hash演算法來對內容進行hash運算,由於前面說過了,一旦更改了原數據哪怕是一點點,hash值都會產生巨大的改變,所以這個數字摘要可以避免數據被篡改。

一個簡單的實例就是比如筆者要給你傳一個文件,為了避免別人在文件中加入木馬,筆者就對文件進行數字摘要的獲取,然後再單獨把摘要(hash值)給你,當你拿到文件後,你也對文件進行跟筆者一樣演算法的hash運算,如果得到的hash值跟筆者傳給你的一樣,那麼就證明文件沒問題,可以打開,否則就證明被篡改了。

不光是比特幣,數字簽名還有更多更廣泛的運用,比如之前筆者介紹過的INK墨鏈,就是把具有版權的數字化作品進行數字簽名,然後把簽名存儲在公有鏈上,既能防止被串改,還能對版權進行控制。

在比特幣交易中,當你要轉賬時候,需要把交易信息和一串數字簽名一起傳給礦工,礦工根據數字簽名對你的交易信息進行校驗,就如同上面說的一樣,防止交易信息被篡改。

數字簽名就是對信息的數字摘要進行了非對稱加密而來。

接下來要說說加密演算法中的對稱和非對稱加密。

加密演算法

我們在加密過程中,要用加密演算法和一個key來進行加密,舉個最簡單的例子,你要傳送一個信息數字「1」給小夥伴,但是不想被別人知道,你就跟小夥伴約定:「我先把信息加上一個值,你拿到後再減去一個值就能得到原文(加密演算法),這個值我每次跟你偷偷約定(key)」。比如這次約定的key是8,於是我就傳一個「9」給小夥伴,同時告訴他,「key的值是8」,他拿到「9」後,再減去8就得到了原文「1」。

根據加密和解密時候的key相同或者不同,加密演算法分為了對稱加密和非對稱加密。

對稱密鑰加密 (Symmetric Key Encryption)

特點:公鑰(加密使用)、私鑰(解密使用)相同。

優點:加密速度快,空間佔用小,保密強度高。

缺點:key需要多方持有且高度保密,如果有一人泄露,信息就全部泄露了。

代表演算法:DES、3DEA、AES、IDEA等。

適用場景:大量數據的加解密。

非對稱加密(asymmetric encryption)

特點:公鑰(加密使用)、私鑰(解密使用)不同。

優點:公私鑰分開,便於管理。

缺點:加密速度慢。

代表演算法:RSA、EIGamal、橢圓曲線系列演算法。

適用場景:簽名、密鑰協商場景。

實例:筆者可以把公鑰廣播出去,需要跟筆者通訊的人都可以用公鑰對信息進行加密,筆者拿到加密信息後,用自己獨有的私鑰進行解密,就能得到傳給筆者的信息了。

其實對稱和非對稱還可以組合適用,比如筆者先用非對稱加密把公鑰給你,你把一個對稱加密的臨時秘鑰加密了給筆者,筆者拿到這個對稱加密的key後再對大量數據進行加解密處理。這樣安全性和加解密速度都可以得到保障了。

數字簽名

筆者之前說了在比特幣中,要用到數字簽名校驗交易信息是否是你發出。你使用比特幣的時候都有一個私鑰,你先把自己的交易信息進行hash運算取得數字摘要,然後用私鑰對摘要進行非對稱加密,接著把交易信息和加密後的數字簽名一起發給曠工,礦工收到你的申請後,就用交易信息中的你的公鑰進行解密得到數字摘要,然後再對加以信息進行hash,保證兩個數字摘要一致,防止交易信息被篡改。這樣既能保證交易信息沒有被篡改,也能保證這筆交易確實是你發起的了。所以大家看出來了,保存好自己的私鑰是多麼重要的一件事。

Merkle樹

默克爾樹,又叫做哈希樹。是一種二叉樹。見下圖。

簡單說就是D0,D1,D2,D3。。。都是數據,他們兩兩內容進行hash後得到上面的節點N(i),最後得到總的節點Root。

特點就是:低層無論哪一個節點發生變動,都會向上傳導,最終導致根節點發生變化。

應用場景:

1.快速比較大量的數據:如果兩個默克爾樹的根相同,就證明兩個數據必然相同。

2.能夠快讀定位到變動的數據:比如D1有變化,就會影響N1,N4和Root,沿著Root - N4 - N1,可以快速定位到D1.

3.零知識證明:比如要證明數據中包含D0,但是又不想D0知道D1。。。D3的內容,這時就可以公布N0 - N4 節點,D0通過比對hash就能得到自己也在數據中,但是不知道其他內容。

同態加密

如果我們有明文A和明文B,我們分別對A、B進行加密得到密文C和D。我們把C和D進行相加,然後再用解密演算法進行解密,一般情況下我們得到的解密結果都是無意義的信息。

但是同態加密就是說:我們對C+D進行解密後,得到的結果就是A+B的結果。

如果滿足加減法就叫做加加法同態。

如果滿足乘除法就叫做加乘法同態。

如果滿足加減法又滿足乘除法就叫做加全同態。

目前的演算法例如:RSA滿足乘法同態,Paillier滿足加法同態,第一個全同態是09年才出現的Gentry演算法。

這樣的好處是:比如企業要用到雲計算,但是又不想把數據公開出去。就可以把同態加密演算法加密的密文發送到第三方雲平台,等第三方計算完成後,取回本地進行解密操作。

大家可以看到不光是區塊鏈,各行各業中密碼學都是應用廣泛,區塊鏈更是把密碼學運用到了的一個巔峰,要想好好了解區塊鏈技術,了解密碼學的一些基礎知識還真是必不可少!

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 全球大搜羅 的精彩文章:

謝謝你出現在我的生命里——陪伴是最長情的告白
我的大學—窮游時光

TAG:全球大搜羅 |