手把腳看看密碼學怎么學
咳咳,不可否認,有時候總會出現,請證明你爸是你爸的這種事情,所以會有了身份認證的密碼。但是這個密碼不是你們想的那個登錄密碼,銀行卡密碼,QQ密碼,IQ密碼,更不是達芬奇密碼,而是在交流或者說通信過程中用來加密信息的密碼。
最開始了解密碼是達芬奇密碼,但是特么的最后發現達芬奇密碼沒有密碼。圖靈機,圖靈測試,人工智能之父,這些都是 Alan Mathison Turing ,換另外一個名字你們可能比較熟悉,艾倫·麥席森·圖靈。
第一次密碼學的啟蒙是看模仿游戲這部電影。影片講述的是二戰期間,盟軍苦于德國的密碼系統“英格瑪”無法破譯,政府召集了一批數學家、邏輯學家進行秘密破解工作,艾倫·圖靈就是其中之一。破解計劃剛開始,圖靈遭到了以休·亞歷山大為首的組員和領導的排斥,幸而軍情六局局長斯圖爾特·孟席斯幫助他立項研究破譯密碼的機器,而圖靈則變成了負責人,并招收了新的成員瓊·克拉克開始艱難的工作。瓊很快就迷上了圖靈,由于她的幫助所有組員空前的團結,并于兩年后成功破解了德軍密碼。
在互聯網大盛的今天,因為各種渠道都是不安全的,比如紙、信鴿、郵局、快遞、藍牙、wifi、甚至是電纜、光纜都有可能被竊聽,甚至被篡改。那么如何子安不安全的信道上進行安全的通信呢?因此,密碼學變成了不可或缺的工具。
假設A要發送一個K給B,理想的情況應該是下面這樣的,什么事也沒有發生。
那么可能會發生四件事,竊聽、篡改、偽造,拒絕。
A ->->K->-> B
但是很遺憾,小C很壞,但也不是很壞,只是進行了竊聽,所以信息變成了下面這樣子。竊聽代表A跟B的信息被第三方知道了,但是并沒有實際的損失。
A ->->K->->C->->K->-> B
而小D比小C壞一點,對信息進行了篡改,原本要發送的K,被小D竊聽到了,而且小D還把消息改成了K1。所以信息變成了下面這樣子。這樣A跟B的通信完全亂套了。
A ->->K->->D->->K1->-> B
小E比小D更壞一些,進行了偽造,直接A給B發了偽造的K1的消息。
A E->->K1->-> B
小F則直接對A進行了拒絕服務,B永遠也接收不到來自A的信息,很是崩潰。
A ->->K->->F B
大家可能看起來沒什么感覺,我舉一個例子來說明不安全通信的慘痛教訓。
俄羅斯央行遭黑客攻擊 3100萬美元不翼而飛
12月,俄羅斯中央銀行官員瑟喬夫證實,該行電腦系統遭到了黑客入侵,犯罪分子從銀行的代理賬戶中竊走了20億盧布(約合3100萬美元)的資金。瑟喬夫透露,黑客是通過偽造一名用戶的證書進入的這些賬戶。緊接著,俄羅斯第二大銀行VTB再遭黑客攻擊,幸運的是,銀行方面的防御體系成功擊退了指向其業務系統的DDoS攻擊,未造成資金損失。
再想想,每天的你處在電話被監控,網絡支付很危險,郵件都不可信,短信都不可信,甚至連電話聲音都可以被偽造的環境中得是多么崩潰的一件事,所以發明了很多加密的方法,保證只有A跟B能知道確切信息的內容,其他人即使拿到了10101010的這些玩意,也不可能猜出來。
首先潑個冷水,一切密碼學都是可以被暴力破解的。那為什么還說現在有的加密手法很安全呢?因為雖然可以被暴力破解,但是有的算法正向加密很簡單,但是逆向解密無論算力有多強,依然可能需要幾百年幾千年甚至幾萬年,這對于人類來說是不可能實現的解密,所以傳統意義上來說這些算法就叫不可破譯的算法,我們接下來稍微說說一些類型的算法,我不會細講,如果有興趣我后面單獨開個系列說。
第零類,純混淆算法。
比如 MD5 ,能把任意字符串變成一個32位的16進制字符串。用這類算法你只是不想讓別人知道原始信息是什么,兩次比較都通過同一個MD5 后的值進行比較,如果相等則代表信息一致,通常用在密碼校驗或者文件檢查上。此類算法除了 MD5 還有 SHA 系列,如果你覺得還不夠安全,那你可以先用一個MD5,再用一個 SHA-128 , 再用一個 SHA-256 , 估計地球上沒人能猜出你最原始的東西是什么。
第一類,對稱加密算法。
這類算法的特點是,加密和解密所使用的key是一樣的,通過key可以進行加密和界面,而只有通信雙方都擁有同一個key,所以該方式一般來說是安全的,而且計算效率很高。
最簡單又最耳熟能詳的就是字母表替換了。比如 A->P , P->L ,E->A , L->B 這樣子的一個字母替換表。我們的文本是 APPLE ,經過字母表轉換我們得到了PLLBA ,即使拿到了這串玩意,你也不可能猜出我原本的是 APPLE ,所以我們通過最終把整段文本變成完全不可讀的文本。而接收方接收到 PLLBA 后,通過同一個替換表,就可以反向解密出原本的意思。
大部分的對稱加密算法原理大同小異,無非是把加密和解密過程復雜化,再加入一些鹽分,讓別人猜不出具體的算法和鹽分究竟是什么。
A->算法一(key1)->算法二(key2)->K->算法二(key2)->算法一(key1)->A
此類算法還有 AES、DES、3DES、TDEA、Blowfish、RC5、IDEA等算法。
第二類,非對稱秘鑰加密算法
相對于對稱加密算法只有一個密鑰。非對稱加密算法需要兩個密鑰:公開密鑰(publickey)和私有密鑰(privatekey)。公開密鑰與私有密鑰是一對,如果用公開密鑰對數據進行加密,只有用對應的私有密鑰才能解密;如果用私有密鑰對數據進行加密,那么只有用對應的公開密鑰才能解密。這類算法的加解密過程一般是這樣的。
A->算法一(key1)->K->算法二(key2)->A
此類算法有RSA、Elgamal、背包算法、Rabin、D-H、ECC。最最常用的是RSA。
第三類,密鑰保證。
那既然對稱和非對稱加密算法都那么牛逼了要CA證書干啥?大家再思考一個問題,如果連key本身都被泄密了,或者說非對稱算法中的公開密鑰本身就是假的,那該怎么辦?
對稱加密算法,已經有Diffie-Hellman密鑰交換算法可以實現產生雙方共同認可的相同密鑰了。
對于非對稱加密算法,只能通過一個第三方的有權威的中介,幫忙生成一個公鑰了,這類公鑰再加上身份信息進行簽證,稱為CA(Certification Authority)
,很多的密鑰中心基本都是頒發CA證書的角色。
當然無論多么牛逼的算法,總會有一個根密鑰,這個要怎么保證呢?所以就有了密碼機這種設備。這種設備的唯一作用是生成密碼,唯一的安全措施是保證根密鑰不會流出密碼機,從而保證整個密碼體系的安全性。