天天看點

面試:對稱加密算法及對稱加密算法

對稱加密:雙方使用的同一個密鑰,既可以加密又可以解密,這種加密方法稱為對稱加密,也稱為單密鑰加密。

優點:速度快,對稱性加密通常在消息發送方需要加密大量資料時使用,算法公開、計算量小、加密速度快、加密效率高。

缺點:在資料傳送前,發送方和接收方必須商定好秘鑰,然後 使雙方都能儲存好秘鑰。其次如果一方的秘鑰被洩露,那麼加密資訊也就不安全了。另外,每對使用者每次使用對稱加密算法時,都需要使用其他人不知道的唯一秘 鑰,這會使得收、發雙方所擁有的鑰匙數量巨大,密鑰管理成為雙方的負擔。

在對稱加密算法中常用的算法有:DES、AES等。

AES:密鑰的長度可以為128、192和256位,也就是16個位元組、24個位元組和32個位元組

DES:密鑰的長度64位,8個位元組。

非對稱加密:一對密鑰由公鑰和私鑰組成(可以使用很多對密鑰)。私鑰解密公鑰加密資料,公鑰解密私鑰加密資料(私鑰公鑰可以互相加密解密)。

私鑰隻能由一方保管,不能外洩。公鑰可以交給任何請求方。

在非對稱加密算法中常用的算法有: 

RSA、Elgamal、背包算法、Rabin、Diffie-Hellman、ECC(橢圓曲線加密算法)。

使用最廣泛的是RSA算法,Elgamal是另一種常用的非對稱加密算法。

缺點:速度較慢

優點:安全

1.分類

加密算法首先分為兩種:單向加密、雙向加密。

單向加密是不可逆的,也就是隻能加密,不能解密。通常用來傳輸類似使用者名和密碼,直接将加密後的資料送出到背景,因為背景不需要知道使用者名和密碼,可以直接将收到的加密後的資料存儲到資料庫。

雙向加密算法通常分為對稱性加密算法和非對稱性加密算法,對于對稱性加密算法,資訊接收雙方都需事先知道密匙和加解密算法且其密匙是相同的,之後便是對資料進行 加解密了。非對稱算法與之不同,發送雙方A,B事先均生成一堆密匙,然後A将自己的公有密匙發送給B,B将自己的公有密匙發送給A,如果A要給B發送消 息,則先需要用B的公有密匙進行消息加密,然後發送給B端,此時B端再用自己的私有密匙進行消息解密,B向A發送消息時為同樣的道理。

2.常用算法

幾種對稱性加密算法:AES,DES,3DES

DES是一種分組資料加密技術(先将資料分成固定長度的小資料塊,之後進行加密),速度較快,适用于大量資料加密,而3DES是一種基于DES的加密算法,使用3個不同密匙對同一個分組資料塊進行3次加密,如此以使得密文強度更高。

相較于DES和3DES算法而言,AES算法有着更高的速度和資源使用效率,安全級别也較之更高了,被稱為下一代加密标準。

幾種非對稱性加密算法:RSA,DSA,ECC

RSA和DSA的安全性及其它各方面性能都差不多,而ECC較之則有着很多的性能優越,包括處理速度,帶寬要求,存儲空間等等。

幾種線性雜湊演算法(簽名算法):MD5,SHA1,HMAC

這幾種算法隻生成一串不可逆的密文,經常用其效驗資料傳輸過程中是否經過修改,因為相同的生成算法對于同一明文隻會生成唯一的密文,若相同算法生成的密文不同,則證明傳輸資料進行過了修改。通常在資料傳說過程前,使用MD5和SHA1算法均需要發送和接收資料雙方在資料傳送之前就知道密匙生成算法,而HMAC與之不同的是需要生成一個密匙,發送方用此密匙對資料進行摘要處理(生成密文),接收方再利用此密匙對接收到的資料進行摘要處理,再判斷生成的密文是否相同。

3.加密算法選用

對于各種加密算法的選用:

由于對稱加密算法的密鑰管理是一個複雜的過程,密鑰的管理直接決定着他的安全性,是以當資料量很小時,我們可以考慮采用非對稱加密算法。

在實際的操作過程中,我們通常采用的方式是:采用非對稱加密算法管理對稱算法的密鑰,然後用對稱加密算法加密資料,這樣我們就內建了兩類加密算法的優點,既實作了加密速度快的優點,又實作了安全友善管理密鑰的優點。

如果在標明了加密算法後,那采用多少位的密鑰呢?一般來說,密鑰越長,運作的速度就越慢,應該根據的我們實際需要的安全級别來選擇,一般來說,RSA建議采用1024位的數字,ECC建議采用160位,AES采用128為即可。

對于幾種加密算法的内部實作原理,有興趣的可以細細研究。而對于其實作而言,網上有很多開源版本,比較經典的是PorlaSSL(官網:http://en.wikipedia.org/wiki/PolarSSL )。其它語言如JAVA,OBJC也都有相應的類庫可以使用。

常見加密算法 :

DES(Data Encryption Standard):資料加密标準,速度較快,适用于加密大量資料的場合; 

3DES(Triple DES):是基于DES,對一塊資料用三個不同的密鑰進行三次加密,強度更高;

RC2和 RC4:用變長密鑰對大量資料進行加密,比 DES 快;

IDEA(International Data Encryption Algorithm)國際資料加密算法:使用 128 位密鑰提供非常強的安全性;

RSA:由 RSA 公司發明,是一個支援變長密鑰的公共密鑰算法,需要加密的檔案塊的長度也是可變的;

DSA(Digital Signature Algorithm):數字簽名算法,是一種标準的 DSS(數字簽名标準);

AES(Advanced Encryption Standard):進階加密标準,是下一代的加密算法标準,速度快,安全級别高,目前 AES 标準的一個實作是 Rijndael 算法;

BLOWFISH,它使用變長的密鑰,長度可達448位,運作速度很快; 

其它算法,如ElGamal、Deffie-Hellman、新型橢圓曲線算法ECC等。 比如說,MD5,你在一些比較正式而嚴格的網站下的東西一般都會有MD5值給出,如安全焦點的軟體工具,每個都有MD5。嚴格來說MD5并不能算是一種加密算法,隻能說是一種摘要算法(資料摘要算法是密碼學算法中非常重要的一個分支,它通過對所有資料提取指紋資訊以實作資料簽名、資料完整性校驗等功能,由于其不可逆性,有時候會被用做敏感資訊的加密。資料摘要算法也被稱為哈希(Hash)算法、雜湊演算法。)

MD5分類:

1、CRC8、CRC16、CRC32

CRC(Cyclic Redundancy Check,循環備援校驗)算法出現時間較長,應用也十分廣泛,尤其是通訊領域,現在應用最多的就是 CRC32 算法,它産生一個4位元組(32位)的校驗值,一般是以8位十六進制數,如FA 12 CD 45等。CRC算法的優點在于簡便、速度快,嚴格的來說,CRC更應該被稱為資料校驗算法,但其功能與資料摘要算法類似,是以也作為測試的可選算法。

在 WinRAR、WinZIP 等軟體中,也是以 CRC32 作為檔案校驗算法的。一般常見的簡單檔案校驗(Simple File Verify – SFV)也是以 CRC32算法為基礎,它通過生成一個字尾名為 .SFV 的文本檔案,這樣可以任何時候可以将檔案内容 CRC32運算的結果與 .SFV 檔案中的值對比來确定此檔案的完整性。

與 SFV 相關工具軟體有很多,如MagicSFV、MooSFV等。

2、MD2 、MD4、MD5

這是應用非常廣泛的一個算法家族,尤其是 MD5(Message-Digest Algorithm 5,消息摘要算法版本5),它由MD2、MD3、MD4發展而來,由Ron Rivest(RSA公司)在1992年提出,被廣泛應用于資料完整性校驗、資料(消息)摘要、資料加密等。MD2、MD4、MD5 都産生16位元組(128位)的校驗值,一般用32位十六進制數表示。MD2的算法較慢但相對安全,MD4速度很快,但安全性下降,MD5比MD4更安全、速度更快。

在網際網路上進行大檔案傳輸時,都要得用MD5算法産生一個與檔案比對的、存儲MD5值的文本檔案(字尾名為.md5或.md5sum),這樣接收者在接收到檔案後,就可以利用與 SFV 類似的方法來檢查檔案完整性,絕大多數大型軟體公司或開源組織都是以這種方式來校驗資料完整性,而且部分作業系統也使用此算法來對使用者密碼進行加密,另外,它也是目前計算機犯罪中資料驗證的最常用算法。

與MD5 相關的工具有很多,如 WinMD5等。

3、SHA1、SHA256、SHA384、SHA512

SHA(Secure Hash Algorithm)是由美國專門制定密碼算法的标準機構-- 美國國家标準技術研究院(NIST)制定的,SHA系列算法的摘要長度分别為:SHA為20位元組(160位)、SHA256為32位元組(256位)、 SHA384為48位元組(384位)、SHA512為64位元組(512位),由于它産生的資料摘要的長度更長,是以更難以發生碰撞,是以也更為安全,它是未來資料摘要算法的發展方向。由于SHA系列算法的資料摘要長度較長,是以其運算速度與MD5相比,也相對較慢。

SHA1的應用較為廣泛,主要應用于CA和數字證書中,另外在網際網路中流行的BT軟體中,也是使用SHA1來進行檔案校驗的。

4、RIPEMD、PANAMA、TIGER、ADLER32 等

RIPEMD是Hans Dobbertin等3人在對MD4,MD5缺陷分析基礎上,于1996年提出來的,有4個标準128、160、256和320,其對應輸出長度分别為16位元組、20位元組、32位元組和40位元組。

TIGER由Ross在1995年提出。Tiger号稱是最快的Hash算法,專門為64位機器做了優化。

繼續閱讀