密碼學-比特幣的數學基礎

買賣虛擬貨幣

一、密碼學的本質


很顯然,之所以要有密碼,是想對資訊保密,而之所以要保密,是出於政治、軍事、經濟以及個人的利益而著想。那麼可想而知,一旦密碼被破譯,將產生極為嚴重的後果。

所以,密碼學的思考方向總結來說有兩點:一個是要有一套加密解密的規則(或者數學演算法),二是研究如何在現有規則(演算法)的基礎上確保所傳遞資訊保安的策略。通俗點講,我們傳遞資訊時主要是要防備資訊的洩露。那麼我們首先想到的是防止訊息在傳輸過程中被第三方截獲,比如說話被偷聽、郵件被偷看、網路資料被竊取。而事實上,在現代技術極大透明的情況下,不被竊取是很難做到的,所以,我們要保證的是,即使資料被竊取了,竊取者也無法使用。而要做到這一點,只要雙方事先約定一套加密解密的方法,以密文的方式傳輸資訊,就可以有效地防止資訊洩露。

二、什麼是雜湊演算法


在早期,傳統加密方法是不能公開的,因為知道了加密方法,只需要反向計算就能解密。那麼,有沒有一種加密方法,使得即使知道了加密方法,也不能恢復出原文呢?隨著技術的進步,尤其是數學理論的擴充套件,密碼學也得以發展,現在我們只需要在加密過程中加入一些不可逆的運算就可以達到這個目的。我們來舉個例子,Bob想向Alice遞一些小秘密,但為了防止Bob說謊,我們可以這樣做:

1.Bob先設想一個數,並加上123456。

2.把結果平方,取第3~10位,組成一個8位數。

3.再用這個數除以456789求餘數,然後把這個結果告訴Alice。

4.Alice猜測Bob設想的是奇數還是偶數。

5.Bob告訴Alice原始數字,Alice按照上面的過程再計算一遍,看結果是否和Bob給的結果一致。

我們假設Bob設定的是1234,按照上面的過程依次得到:

1234+123456=124690

124690×124690=15547596100

54759610mod456789=401719(Mod表示除法求餘數)

Alice拿到的結果是401719,這樣既可以驗證Bob有沒有撒謊,同時Alice又很難根據401719反向算出123456。這樣也不能絕對保證Bob不作弊,但如果Bob想作弊,他就必須事先找到一奇一偶兩個數,它們按照上面的運算能得到一樣的結果。這個難度取決於上面演算法的難度。

而在密碼學中,這種會丟掉一部分資訊的加密方式被稱為“單向加密”,也叫作雜湊演算法。

一個可靠的雜湊演算法至少需要滿足下面幾個條件:

1.對於給定的資料M,很容易算出雜湊值X=F(M);

2.根據X很難算出M;

3.很難找到M和N令F(M)=F(N)。

目前在網際網路世界中,被認為安全且被廣泛使用的雜湊演算法包括MD5、SHA-256等。雜湊演算法的結果長度都是固定的,MD5的結果長度為32個字元,SHA-256則達到64個字元,所以SHA-256看起來更安全一些,更難找到能算出相同結果的M和N。比如“1234”使用MD5演算法計算的結果是81DC9BDB52D04DC20036DBD8313ED055”,而用SHA-256演算法計算出的結果是“03AC674216F3E15C761EE1A5E255F067953623C8B388B4459E13F978D7C846F4”。

然而,這種單向加密演算法並不能用來進行普通的資訊傳輸,更多是用來進行傳輸結果的準確性驗證。很多下載網站都提供了下載檔案的原始MD5值供校驗,以防止檔案被病毒修改。

三、非對稱加密


現在我們來看一下在真正要進行資訊傳輸的情況下應該怎麼辦。同樣假設Alice和Bob要透過網際網路傳輸一份絕密情報,那麼,如何阻止第三方在網路上截獲資訊呢?對於我們普通大眾來說,一般是使用如WinRAR等工具對檔案進行加密壓縮,然後透過電子郵件或者QQ把加密的檔案發過去,同時,透過發簡訊或者打電話把解壓密碼告訴對方。但是,若是重大的商業情報或者國家的絕密情報,這種做法很顯然非常容易被竊取並破解。那麼怎麼辦呢?這裡我們有兩種思路可以嘗試解決:

1.密碼學世界有一個柯克霍夫原則:即使密碼系統的任何細節已為人熟知,只要金鑰(key)未洩露,它也應是安全的。無論是在戰爭時期還是和平時期,都不能把保密的希望寄託於系統或演算法的秘密性。機械可以拆解,軟體可以反編譯。密碼系統的所有細節總會被有心人一一拆解。這個時候,如果系統符合柯克霍夫原則,那麼即使對手拆解了系統但不知道金鑰,他也沒有辦法破譯加密的資訊。滿足這種嚴苛條件的密碼系統才是安全的。

2.要是有一種加密系統,加密和解密使用不同的密碼,假設有2個密碼A和B,使用A對資料M進行加密得到加密資料X=F(A,M)。但是,知道A和X無法解密出M,必須用另一個密碼B使得資料還原M=F(B,X)。Alice只需公佈密碼A,Bob使用公開渠道拿到的A對情報進行加密,再透過任意方式發給Alice進行解密,這樣一來,即使所有的通訊被監聽,對手也不可能拿到情報。

如果使用我們設想的這些神奇加密演算法,似乎問題就可以迎刃而解了,但問題是,這樣的技術存在嗎?聽上去似乎並不可能,因為從直覺上判斷,知道了加密方法就一定知道解密方法,只需要反過來計算就可以了。加密方法和解密方法是否可能不對稱?有可能!

四、數學小魔術的秘密


我們來看一個小時候經常在《趣味數學》這類書裡看到的數學小魔術:讓對方任意想一個三位數,並把這個數和91相乘,然後說出乘積的最後三位數,就可以猜出對方想的是什麼數字。比如對方想的是123,那麼對方就計算出123×91=11193,並把結果的末三位193告訴我。看起來,這麼做似乎損失了不少資訊,我可能沒法反推出原來的數。不過,我仍然有辦法:只需要把對方告訴我的結果乘以11,乘積的末三位就是對方剛開始想的數字了。可以驗證一下,193×11=2123,末三位正是對方所想的秘密數字!其實道理很簡單,91乘以11等於1001,而任何一個三位數乘以1001後,末三位顯然都不變(例如123乘以1001就等於123123)。先讓對方用他所想的數字乘以91,假設乘積為X;我再在X的基礎上乘以11,其結果相當於我倆合作把原數乘以了1001,末三位自然就變了回去。X乘以11後的末三位是什麼只與X的末三位有關,因此,對方只需要告訴我X的末三位就行了,這並不會丟失資訊。知道原理後,我們可以構造一個定義域和值域更大的加密解密系統。比如,任意一個數字乘以400000001後,末八位都不變,而400000001=19801×20201,於是你乘以19801,我乘以20201,一個加密解密不對稱的系統就構造好了。我們甚至還可以構造一個更大的系統:4000000000000000000000000000001=1199481995446957×3334772856269093,這樣我們就成功構造了一個30位的加密系統。這是一件非常酷的事情,任何人都可以按照這個方法加密一個數字,但是隻有自己才知道怎麼把所得的密文變回去。

但如果僅僅按照上面的思路,如果對方知道原理,知道我要構造出帶很多0的數,根據19801和8位演算法這兩個條件其實可以比較容易地窮舉出400000001這個目標值。要解決這個問題,我們來看看真實世界是怎麼處理的。

五、RSA演算法與橢圓曲線演算法


直到1976年以前,所有的加密方法都是同一種模式:

1.甲方選擇某一種加密規則,對資訊進行加密;

2.乙方使用同一種規則,對資訊進行解密。

由於加密和解密使用同一種規則(簡稱“金鑰”),這被稱為“對稱加密演算法”。這種加密模式有一個最大的弱點:甲方必須把加密規則告訴乙方,否則無法解密。這樣一來,儲存和傳遞金鑰就成了最讓人頭疼的問題。尤其是人數多了之後,每兩個人都要互相商量一個金鑰,複雜性大大提高,而傳遞金鑰則帶來更高的安全風險。

直到1977年,李維斯特、沙米爾和艾德曼設計了一種演算法,可以實現非對稱加密。這種演算法用他們三個人的名字命名,叫作RSA演算法。直到現在,RSA演算法一直是應用最廣泛的非對稱加密演算法。毫不誇張地說,只要有計算機網路的地方,就有RSA演算法,其非對稱加密模式的流程如下:

1.乙方生成兩把金鑰(公鑰和私鑰)。公鑰是公開的,任何人都可以獲得,私鑰則是保密的。

2.甲方獲取乙方的公鑰,然後用它對資訊進行加密。

3.乙方得到加密的資訊後,用私鑰解密。

由於公鑰加密的資訊只有私鑰解得開,因此只要私鑰不洩露,通訊過程就是安全的。

RSA演算法為什麼更加安全呢?在數學世界裡,有一些公認的、需要消耗極大計算量才能得出結果的難題,比如大數因式分解問題、離散對數問題、橢圓曲線問題。RSA演算法正是用到了大數分解這一相當犀利的不對稱難題。比如對於我們上面構造過的30位加密系統:

4000000000000000000000000000001=1199481995446957×3334772856269093

反過來算乘積非常容易,但是要把4000000000000000000000000000001分解成後面兩個乘數,在沒有計算機的時代幾乎不可能成功!而一旦數字長達數百位,即使是超級計算機也需要耗費海量的時間來計算才有可能。

橢圓曲線演算法(ECC)則是另一種著名的非對稱演算法,在比特幣體系裡佔據重要地位,是比特幣錢包安全性的密碼學基石,也是比特幣被稱為密碼學貨幣(Cryptography)的原因。

ECC各方面的效能和RSA比起來幾乎完勝:

1.安全效能更高。比如160位ECC與1024位RSA有相等的安全強度。

2.計算量小,處理速度比RSA快得多。

3.儲存空間佔用小。金鑰尺寸和系統引數與RSA相比要小得多。

4.頻寬要求低。

ECC的這些特點使它逐漸取代RSA,成為通用的公鑰加密演算法。


我是彼得,一個有思考的價值號,助你成長和收穫!


【原創不易,日更唯艱,若覺得有點價值,

小夥伴的轉發就是對彼得最大的打賞!】


三非彼得公眾號:sf-btc

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;