最近做的項(xiàng)目涉及到一些加密算法的選擇,在這里順便也給大家做個(gè)總結(jié),一起加深對(duì)加密相關(guān)的認(rèn)識(shí)。
對(duì)于研發(fā)來(lái)說(shuō),數(shù)據(jù)安全是第一位,加密算法對(duì)維護(hù)軟件的數(shù)據(jù)安全起著舉足輕重的作用。目前比較常用的加密算法總結(jié)起來(lái)就是單向加密和雙向加密。
加密算法起源
早在古希臘時(shí)期,人類就發(fā)明了置換密碼。到1881年世界上的第一個(gè)電話保密專利出現(xiàn),二戰(zhàn)期間,德國(guó)軍方啟用“恩尼格瑪”密碼機(jī),密碼學(xué)在戰(zhàn)爭(zhēng)中起著非常重要的作用。
1997年,美國(guó)國(guó)家標(biāo)準(zhǔn)局公布實(shí)施了“美國(guó)數(shù)據(jù)加密標(biāo)準(zhǔn)(DES)”。民間力量開(kāi)始全面介入密碼學(xué)的研究和應(yīng)用中,采用的加密算法有DES、RSA、SHA等。隨著對(duì)加密強(qiáng)度需求的不斷提高,近期又出現(xiàn)了AES、ECC等。
好了,歷史講完了,該進(jìn)入正文了,先來(lái)看看使用加密算法對(duì)我們有啥好處。
使用密碼學(xué)可以達(dá)到以下目的:
保密性:防止用戶的標(biāo)識(shí)或數(shù)據(jù)被讀取。
數(shù)據(jù)完整性:防止數(shù)據(jù)被更改。
身份驗(yàn)證:確保數(shù)據(jù)發(fā)自特定的一方。
單向加密
單向加密,通俗來(lái)說(shuō),就是通過(guò)對(duì)數(shù)據(jù)進(jìn)行摘要計(jì)算生成密文,密文不可逆推還原。算法代表:MD5、SHA、HMAC等。
2.1 MD5
MD5——message-digest algorithm 5(信息-摘要算法)縮寫,廣泛用于加密和解密技術(shù),常用于文件校驗(yàn)。
不管文件多大,經(jīng)過(guò)MD5后都能生成唯一的MD5值。比如現(xiàn)在的ISO校驗(yàn),都是MD5校驗(yàn),把ISO經(jīng)過(guò)MD5后產(chǎn)生MD5的值。一般下載linux-ISO的朋友都見(jiàn)過(guò)下載鏈接旁邊放著MD5的串。就是用來(lái)驗(yàn)證文件是否一致的。
加密工具類如下:
2.2 SHA
SHA(Secure Hash Algorithm,安全散列算法)。數(shù)字簽名等密碼學(xué)應(yīng)用中重要的工具,被廣泛地應(yīng)用于電子商務(wù)等信息安全領(lǐng)域。雖然SHA與MD5通過(guò)碰撞法都被破解了,但是SHA仍然是公認(rèn)的安全加密算法,較之MD5更為安全。
加密工具類如下:
2.3 HMAC
HMAC(Hash Message Authentication Code,散列消息鑒別碼).基于密鑰的Hash算法的認(rèn)證協(xié)議。
消息鑒別碼實(shí)現(xiàn)鑒別的原理是:用公開(kāi)函數(shù)和密鑰產(chǎn)生一個(gè)固定長(zhǎng)度的值作為認(rèn)證標(biāo)識(shí),用這個(gè)標(biāo)識(shí)鑒別消息的完整性。使用一個(gè)密鑰生成一個(gè)固定大小的小數(shù)據(jù)塊,即MAC,并將其加入到消息中,然后傳輸。接收方利用與發(fā)送方共享的密鑰進(jìn)行鑒別認(rèn)證等。
加密工具類如下:
雙向加密
雙向加密又稱為可逆加密,即生成密文后,在需要的時(shí)候可以反解為明文。雙向加密分為對(duì)稱加密和非對(duì)稱加密。
3.1對(duì)稱加密算法
對(duì)稱加密算法是應(yīng)用較早的加密算法,技術(shù)成熟。
在對(duì)稱加密算法中,數(shù)據(jù)發(fā)信方將明文(原始數(shù)據(jù))和加密密鑰一起經(jīng)過(guò)特殊加密算法處理后,使其變成復(fù)雜的加密密文發(fā)送出去。在對(duì)稱加密算法中,使用的密鑰只有一個(gè),發(fā)收信雙方都使用這個(gè)密鑰對(duì)數(shù)據(jù)進(jìn)行加密和解密,這就要求解密方事先必須知道加密密鑰。
對(duì)稱加密算法的特點(diǎn)是8算法公開(kāi)、計(jì)算量小、加密速度快、加密效率高。不足之處是,交易雙方都使用同樣鑰匙,安全性得不到保證。對(duì)稱加密算法在分布式網(wǎng)絡(luò)系統(tǒng)上使用較為困難,主要是因?yàn)槊荑€管理困難,使用成本較高。
數(shù)據(jù)加密過(guò)程:在對(duì)稱加密算法中,數(shù)據(jù)發(fā)送方將明文(原始數(shù)據(jù))和加密密鑰一起經(jīng)過(guò)特殊加密處理,生成復(fù)雜的加密密文進(jìn)行發(fā)送。
數(shù)據(jù)解密過(guò)程:數(shù)據(jù)接收方收到密文后,若想讀取原數(shù)據(jù),則需要使用加密使用的密鑰及相同算法的逆算法對(duì)加密的密文進(jìn)行解密,才能使其恢復(fù)成可讀明文。
常用算法:DES、3DES、AES、TDEA、Blowfish、RC2、RC4、RC5、IDEA、Skipjack等。下面主要介紹常用的DES、3DES、AES加密算法。
DES加密算法
DES加密算法是一種分組密碼,以64位為分組對(duì)數(shù)據(jù)加密,它的密鑰長(zhǎng)度是56位,加密解密用同一算法。DES加密算法是對(duì)密鑰進(jìn)行保密,而公開(kāi)算法包括加密和解密算法。
這樣,只有掌握了和發(fā)送方相同密鑰的人才能解讀由DES加密算法加密的密文數(shù)據(jù)。因此,破譯DES加密算法實(shí)際上就是搜索密鑰的編碼。對(duì)于56位長(zhǎng)度的密鑰來(lái)說(shuō),如果用窮舉法來(lái)進(jìn)行搜索的話,其運(yùn)算次數(shù)為256。
隨著計(jì)算機(jī)系統(tǒng)能力的不斷發(fā)展,DES的安全性比它剛出現(xiàn)時(shí)會(huì)弱得多,然而從非關(guān)鍵性質(zhì)的實(shí)際出發(fā),仍可以認(rèn)為它是足夠的。不過(guò),DES現(xiàn)在僅用于舊系統(tǒng)的鑒定,而更多地選擇新的加密標(biāo)準(zhǔn)。
加密工具類如下:
3DES加密算法
3DES是三重?cái)?shù)據(jù)加密算法塊密碼的通稱。它相當(dāng)于是對(duì)每個(gè)數(shù)據(jù)塊應(yīng)用三次DES加密算法。由于計(jì)算機(jī)運(yùn)算能力的增強(qiáng),原版DES密碼的密鑰長(zhǎng)度變得容易被暴力破解;3DES即是設(shè)計(jì)用來(lái)提供一種相對(duì)簡(jiǎn)單的方法,即通過(guò)增加DES的密鑰長(zhǎng)度來(lái)避免類似的攻擊,而不是設(shè)計(jì)一種全新的塊密碼算法。
3DES是DES向AES過(guò)渡的加密算法,加密算法,其具體實(shí)現(xiàn)如下:設(shè)Ek()和Dk()代表DES算法的加密和解密過(guò)程,K代表DES算法使用的密鑰,M代表明文,C代表密文。加密過(guò)程為:C=Ek3(Dk2(Ek1(M)))
加密工具類如下:
AES加密算法
AES加密算法是密碼學(xué)中的高級(jí)加密標(biāo)準(zhǔn),該加密算法采用對(duì)稱分組密碼體制,密鑰長(zhǎng)度的最少支持為128、192、256,分組長(zhǎng)度128位,算法應(yīng)易于各種硬件和軟件實(shí)現(xiàn)。這種加密算法是美國(guó)聯(lián)邦政府采用的區(qū)塊加密標(biāo)準(zhǔn),這個(gè)標(biāo)準(zhǔn)用來(lái)替代原先的DES,已經(jīng)被多方分析且廣為全世界所使用。
AES加密算法被設(shè)計(jì)為支持128/192/256位(/32=nb)數(shù)據(jù)塊大?。捶纸M長(zhǎng)度);支持128/192/256位(/32=nk)密碼長(zhǎng)度,,在10進(jìn)制里,對(duì)應(yīng)34×1038、62×1057、1.1×1077個(gè)密鑰。
加密工具類如下:
對(duì)稱加密算法比較
3.2非對(duì)稱加密算法
不對(duì)稱加密算法使用兩把完全不同但又是完全匹配的一對(duì)鑰匙—公鑰和私鑰。在使用不對(duì)稱加密算法加密文件時(shí),只有使用匹配的一對(duì)公鑰和私鑰,才能完成對(duì)明文的加密和解密過(guò)程。采用不對(duì)稱加密算法,收發(fā)信雙方在通信之前,收信方必須將自己早已隨機(jī)生成的公鑰送給發(fā)信方,而自己保留私鑰。由于不對(duì)稱算法擁有兩個(gè)密鑰,因而特別適用于分布式系統(tǒng)中的數(shù)據(jù)加密。廣泛應(yīng)用的不對(duì)稱加密算法有RSA算法和美國(guó)國(guó)家標(biāo)準(zhǔn)局提出的DSA。以不對(duì)稱加密算法為基礎(chǔ)的加密技術(shù)應(yīng)用非常廣泛。
工作流程:
乙方生成一對(duì)密鑰(公鑰和私鑰)并將公鑰向其它方公開(kāi)。
得到該公鑰的甲方使用該密鑰對(duì)機(jī)密信息進(jìn)行加密后再發(fā)送給乙方。
乙方再用自己保存的另一把專用密鑰(私鑰)對(duì)加密后的信息進(jìn)行解密。乙方只能用其專用密鑰(私鑰)解密由對(duì)應(yīng)的公鑰加密后的信息。
在傳輸過(guò)程中,即使攻擊者截獲了傳輸?shù)拿芪?,并得到了乙的公鑰,也無(wú)法破解密文,因?yàn)橹挥幸业乃借€才能解密密文。
同樣,如果乙要回復(fù)加密信息給甲,那么需要甲先公布甲的公鑰給乙用于加密,甲自己保存甲的私鑰用于解密。
RSA加密算法
RSA加密算法是目前最有影響力的公鑰加密算法,并且被普遍認(rèn)為是目前最優(yōu)秀的公鑰方案之一。RSA是第一個(gè)能同時(shí)用于加密和數(shù)宇簽名的算法,它能夠抵抗到目前為止已知的所有密碼攻擊,已被ISO推薦為公鑰數(shù)據(jù)加密標(biāo)準(zhǔn)。
RSA加密算法基于一個(gè)十分簡(jiǎn)單的數(shù)論事實(shí):將兩個(gè)大素?cái)?shù)相乘十分容易,但那時(shí)想要,但那時(shí)想要對(duì)其乘積進(jìn)行因式分解卻極其困難,因此可以將乘積公開(kāi)作為加密密鑰。
加密工具類如下:
DSA加密算法
DSA是基于整數(shù)有限域離散對(duì)數(shù)難題的,其安全性與RSA相比差不多。DSA的一個(gè)重要特點(diǎn)是兩個(gè)素?cái)?shù)公開(kāi),這樣,當(dāng)使用別人的p和q時(shí),即使不知道私鑰,你也能確認(rèn)它們是否是隨機(jī)產(chǎn)生的,還是作了手腳。RSA算法卻做不到。DSA只是一種算法,和RSA不同之處在于它不能用作加密和解密,也不能進(jìn)行密鑰交換,只用于簽名,它比RSA要快很多.
加密流程如下:
ECC加密算法
橢圓加密算法(ECC)是一種公鑰加密體制,最初由Koblitz和Miller兩人于1985年提出,其數(shù)學(xué)基礎(chǔ)是利用橢圓曲線上的有理點(diǎn)構(gòu)成Abel加法群上橢圓離散對(duì)數(shù)的計(jì)算困難性。
公鑰密碼體制根據(jù)其所依據(jù)的難題一般分為三類:大整數(shù)分解問(wèn)題類、離散對(duì)數(shù)問(wèn)題類、橢圓曲線類。有時(shí)也把橢圓曲線類歸為離散對(duì)數(shù)類。橢圓曲線密碼體制是目前已知的公鑰體制中,對(duì)每比特所提供加密強(qiáng)度最高的一種體制。解橢圓曲線上的離散對(duì)數(shù)問(wèn)題的最好算法是Pollard rho方法,其時(shí)間復(fù)雜度為,是完全指數(shù)階的。
加密工具類如下:
非對(duì)稱加密算法比較
總結(jié)
4.1對(duì)稱加密和非對(duì)稱加密比較
實(shí)際應(yīng)用:
采用非對(duì)稱加密算法管理對(duì)稱算法的密鑰,用對(duì)稱加密算法加密數(shù)據(jù),即提高了加密速度,又實(shí)現(xiàn)了解密的安全
RSA建議采用1024位的數(shù)字,ECC建議采用160位,AES采用128位即可
4.2其它方面的比較:
在管理方面:公鑰密碼算法只需要較少的資源就可以實(shí)現(xiàn)目的,在密鑰的分配上,兩者之間相差一個(gè)指數(shù)級(jí)別(一個(gè)是n一個(gè)是n2)。所以公鑰密碼算法不適應(yīng)廣域網(wǎng)的使用,而且更重要的一點(diǎn)是它不支持?jǐn)?shù)字簽名。
在安全方面:由于公鑰密碼算法基于未解決的數(shù)學(xué)難題,在破解上幾乎不可能。對(duì)于私鑰密碼算法,到了AES雖說(shuō)從理論來(lái)說(shuō)是不可能破解的,但從計(jì)算機(jī)的發(fā)展角度來(lái)看。公鑰更具有優(yōu)越性。