密碼,已經(jīng)成為當(dāng)代互聯(lián)網(wǎng)人每天使用頻率最高的東西,它在默默地守護(hù)著我們的信息安全。而人們對密碼卻始終未給予足夠重視,以至于經(jīng)常會(huì)出現(xiàn)“123456”這種弱密碼。你可能會(huì)覺得好笑,但這個(gè)密碼常年穩(wěn)居最常見的密碼排行榜榜首,有250萬人在使用,在數(shù)據(jù)泄露方面的暴露次數(shù)超過2300萬次,黑客只需不到一秒鐘就可以成功破解。
好在我們的社會(huì)中,總有那么一群人在不斷研究著密碼學(xué),保護(hù)著我們的信息安全、系統(tǒng)安全。密碼學(xué)歷史悠久,其首要目的是隱藏信息的涵義,并不是隱藏信息的存在。密碼學(xué)也促進(jìn)了計(jì)算機(jī)科學(xué),特別是在于電腦與網(wǎng)絡(luò)安全所使用的技術(shù),如訪問控制與信息的機(jī)密性。密碼學(xué)已被應(yīng)用在日常生活:包括自動(dòng)柜員機(jī)的芯片卡、電腦使用者存取密碼、電子商務(wù)等等。
密碼學(xué)是一門浩瀚的學(xué)科,無數(shù)的學(xué)者和研究人員數(shù)十年鉆研往往也僅能取得非常微小的成績。下圖為筆者對密碼學(xué)框架的部分理解,足以見得密碼這門學(xué)科的博大精深。本文選取密碼學(xué)學(xué)科中的一小部分內(nèi)容進(jìn)行介紹和演示。
▲圖1 對密碼學(xué)學(xué)科框架的部分理解▲
對稱加密算法
加密的理論基礎(chǔ)是替代和換位。替代主要用于擾亂,使用不同的位、字符或字符分組來替換原來的位、字符或字符分組。換位主要用于擴(kuò)散,并不使用不同的文本來替換原來的文本,而是對原有的值進(jìn)行置換,即重新排列原來的位、字符或字符分組以隱藏其原有意義。
對稱加密是一種加密與解密采用相同密鑰的加密算法。其特點(diǎn)是速度快,效率高,所以被廣泛使用在很多加密協(xié)議的核心當(dāng)中,也是我們平時(shí)接觸得比較多的一種加密方式。
▲圖2 對稱加密算法加密解密過程▲
常見的對稱加密算法
常見的對稱加密算法主要有以下幾種:
數(shù)據(jù)加密標(biāo)準(zhǔn)(DES,Data Encryption Standard),使用64位密鑰,其中56位用于加密,8位用于奇偶校驗(yàn)。由于加密強(qiáng)度較弱,已不推薦使用;
三重DES,是DES的升級(jí)版。3DES并沒有直接使用“加密->加密->加密” 的方式,而是采用了“加密->解密->加密”的方式。這樣實(shí)現(xiàn)的好處主要是,當(dāng)三個(gè)密鑰均相同時(shí),前兩步加密解密結(jié)果相互抵消,整體結(jié)果相當(dāng)于僅實(shí)現(xiàn)了一次加密,因此可實(shí)現(xiàn)對普通DES加密算法的兼容。這也是為什么三重DES可以流行,而二重DES或者四重DES則消失了;
高級(jí)加密標(biāo)準(zhǔn)(AES,Advanced Encryption Standard),AES支持128、192和256位的密鑰,較于3DES速度更快、安全性更高;
國際數(shù)據(jù)加密算法(IDEA,International Data Encryption Algorithm),使用的密鑰長度為128位;
Blowfish算法,密鑰長度為32-448位。
密鑰分發(fā)
常見的密鑰分發(fā)方式
對稱加密需要雙方進(jìn)行加密通信前先協(xié)商分配好密鑰,一般來說密鑰分發(fā)可以是以下幾種方式:
Alice選擇一個(gè)密鑰后以物理的方式傳遞給Bob;
第三方Cindy選擇密鑰后物理地傳遞給Alice和Bob;
如果Alice和Bob之前已經(jīng)使用過一個(gè)密鑰,則一方可以將新密鑰用舊密鑰加密后發(fā)送給另一方;
如果Alice和Bob與第三方Cindy之間已有加密連接,則Cindy可以在加密連接上將密鑰發(fā)送給Alice和Bob。
更便捷的密鑰分發(fā)方式
受對稱加密算法自身的特點(diǎn)影響,當(dāng)多用戶之間使用對稱加密算法進(jìn)行通信時(shí),密鑰數(shù)量成指數(shù)增長,對密鑰的分發(fā)和管理帶來巨大的挑戰(zhàn)。當(dāng)用戶數(shù)量為n,密鑰數(shù)量最多為n*(n-1)/2。比如有100個(gè)用戶,則最多需要4950個(gè)密鑰。
隨著技術(shù)的發(fā)展,對稱加密的密鑰分發(fā)也出現(xiàn)了一些新的解決方法,如非對稱加密算法,Diffie–Hellman算法等。采用這類算法使得對稱加密密鑰的協(xié)商與管理變得更簡單和可靠。采用非對稱加密時(shí)n個(gè)用戶只需維護(hù)n個(gè)密鑰對,大大減小了密鑰規(guī)模。
Diffie-Hellman算法(簡稱DH算法)是Whitefield Diffie和Martin Hellman在1976年公布的一種秘鑰交換算法。它是一種建立秘鑰的方法,而不是加密方法。基于這種秘鑰交換技術(shù):通信雙方在完全沒有對方任何預(yù)先信息的條件下,可以通過不安全信道協(xié)商一個(gè)密鑰。這個(gè)密鑰一般作為對稱加密的密鑰應(yīng)用在雙方后續(xù)數(shù)據(jù)傳輸?shù)募用苌稀?/p>
和非對稱加密算法的理論基礎(chǔ)一樣,DH算法也是基于一個(gè)數(shù)學(xué)難題,即計(jì)算離散對數(shù)的難度。具體來說,假設(shè)Alice需要與Bob需要協(xié)商一個(gè)秘鑰,是這樣一個(gè)過程:
▲圖3 DH算法密鑰協(xié)商過程▲
首先Alice與Bob共享一個(gè)素?cái)?shù)p以及p的原根g,當(dāng)然這里有2≤g≤p-12≤g≤p-1。這兩個(gè)數(shù)是可以不經(jīng)過加密地由一方發(fā)送到另一方,至于誰發(fā)送給并不重要,其結(jié)果只要保證雙方都得知p和g即可。
然后Alice產(chǎn)生一個(gè)私有的隨機(jī)數(shù)A,滿足1≤A≤p-1,然后計(jì)算,將結(jié)果 通過公網(wǎng)發(fā)送給Bob。
Bob也產(chǎn)生一個(gè)私有的隨機(jī)數(shù)B,滿足1≤B≤p-1,計(jì)算 ,將結(jié)果 通過公網(wǎng)發(fā)送給Alice。
雙方計(jì)算密鑰。
Alice知道的信息有p,g,A,,,其中數(shù)字A是Alice私有的,只有她自己知道,別人不可能知道。p,g,A都是別人有可能知道的,是Bob發(fā)送給Alice的;
Bob知道的信息有p,g,B,,,其中數(shù)字B是Bob私有的,只有他自己知道,別人不可能知道。p,g,B是別人有可能知道的,是Alice發(fā)送給Bob的。
上面的過程中,Alice和Bob之間的秘鑰協(xié)商完成,密鑰具體計(jì)算方法如下:
Alice通過計(jì)算 得到秘鑰;
Bob通過計(jì)算 得到秘鑰。
通過計(jì)算可以得到,,即雙方協(xié)商結(jié)算出的密鑰相同,可以將該密鑰作為對稱加密密鑰使用:
由上證明過程可見,Alice和Bob生成秘鑰時(shí),其實(shí)是進(jìn)行了相同的運(yùn)算過程,因此必然有。這也是雙方能夠進(jìn)行秘鑰協(xié)商的根本原因。
利用DIFFIE-HELLMAN算法協(xié)商密鑰實(shí)例
首先Alice與Bob共享一個(gè)素?cái)?shù)37以及原根6(37的原根:3,6,11,12,13,15,17,21,22,23,24,26,27,29,可采用圖4的方法生成)。
然后Alice產(chǎn)生一個(gè)私有的隨機(jī)數(shù)10,然后計(jì)算 ,將36發(fā)送給Bob;
Bob也產(chǎn)生一個(gè)私有的隨機(jī)數(shù)11,計(jì)算 ,將結(jié)果31發(fā)送給Alice。
雙方計(jì)算密鑰:
經(jīng)計(jì)算,Alice與Bob本次協(xié)商的密鑰為36。
原根計(jì)算方法python實(shí)現(xiàn)如下圖所示:
▲圖4 原根計(jì)算方法python實(shí)現(xiàn)▲