在最近的面試中, 被問(wèn)到了加密算法,雖然回答了面試官的問(wèn)題,自己總覺對(duì)于概念理解不是特別到位。本篇主要是對(duì)加密算法做一個(gè)整體的了解,其中所提到每一種算法,如果去深究,都不是一兩篇文章能說(shuō)清楚的,鑒于此,本篇不去談算法的實(shí)現(xiàn),不去比較算法的性能,只是梳理一些基本概念。
1. 基本術(shù)語(yǔ)
在密碼學(xué)中,加密是指把明文通過(guò)密鑰,轉(zhuǎn)換為難以理解的數(shù)據(jù)(密文)的過(guò)程。 解密是指把難以理解的數(shù)據(jù)(密文)轉(zhuǎn)換為明文的過(guò)程。
2. 加密算法的分類:加密算法分為對(duì)稱加密算法和非對(duì)稱加密算法(公開密鑰加密算法)。
(1) 對(duì)稱加密算法是指加密和解密用的是同一把密鑰。優(yōu)點(diǎn):加密、解密速度快。 缺點(diǎn):密鑰不好維護(hù)。
(2) 非對(duì)稱加密算法(Asymmetric ?Cryptograph Algorithm),加密和解密使用不同的密鑰,使用公鑰(Public key) 加密,使用私鑰(Private key)解密。
3. 常見的加密算法
3.1 對(duì)稱加密算法
(1) DES (Data Encryption Standard)美國(guó)數(shù)據(jù)加密標(biāo)準(zhǔn)算法,是1972年美國(guó)IBM公司研制。?明文按64位進(jìn)行分組,密鑰長(zhǎng)64位,密鑰事實(shí)上是56位參與DES運(yùn)算(第8、16、24、32、40、48、56、64位是校驗(yàn)位, 使得每個(gè)密鑰都有奇數(shù)個(gè)1)分組后的明文組和56位的密鑰按位替代或交換的方法形成密文組的加密方法。了解更多
(2) 3DES ?(Triple DES)三重?cái)?shù)據(jù)加密數(shù)據(jù)塊算法。相當(dāng)于對(duì)每個(gè)數(shù)據(jù)快進(jìn)行三次DES加密。由于計(jì)算機(jī)計(jì)算能力的提升,DES算法容易被破解,3DES是通過(guò)增加數(shù)據(jù)塊密鑰的長(zhǎng)度,來(lái)增加暴力破解的難度,而不是一種全新的加密算法。
(3)AES? (Advance Encryption Standard)高級(jí)加密標(biāo)準(zhǔn),在密碼學(xué)中又稱為Rijndael 算法,是美國(guó)聯(lián)邦政府采用的一種區(qū)域塊加密標(biāo)準(zhǔn)。這個(gè)標(biāo)準(zhǔn)為了替代原先的DES標(biāo)準(zhǔn),2001有NIST發(fā)布,并與2002年5月26日成為標(biāo)準(zhǔn)。了解更多
(4) RC2/RC4 ,RC2和RC4由RSA數(shù)據(jù)安全公司的里維斯特(RonRivest)設(shè)計(jì),是兩種可變密鑰長(zhǎng)度的加密算法,而且都是RSA數(shù)據(jù)安全公司的專有算法。有關(guān)兩種算法的細(xì)節(jié)尚未公開披露。
RC2是一種可變密鑰長(zhǎng)度的對(duì)稱分組密碼,打算作為DES的一種代替物。它以64比特分組加密數(shù)據(jù)。據(jù)公司聲稱,RC2軟件實(shí)現(xiàn)的速度為DES的兩倍。
Rc4是一種可變密鑰長(zhǎng)度的對(duì)稱流密碼。據(jù)公司聲稱.其速度為DES的10~100倍。兩種算法的編碼規(guī)模非常緊湊,其速度與密鑰長(zhǎng)度無(wú)關(guān)。
3.2 非對(duì)稱加密算法
(1) RSA ? ?是1977年由羅納德·李維斯特(Ron Rivest)、阿迪·薩莫爾(Adi Shamir)和倫納德·阿德曼(Leonard Adleman)一起提出的。當(dāng)時(shí)他們?nèi)硕荚?a target="_blank" rel="nofollow">麻省理工學(xué)院工作。RSA就是他們?nèi)诵帐祥_頭字母拼在一起組成的。了解更多
(2) ECC (Elliptic Curves Cryptography)橢圓曲線加密算法,最初由Koblitz和Miller兩人于1985年提出,其數(shù)學(xué)基礎(chǔ)是利用橢圓曲線上的有理點(diǎn)構(gòu)成Abel加法群上橢圓離散對(duì)數(shù)的計(jì)算困難性。
(3) DSA (Digital Signature Algorithm) 數(shù)字簽名算法,是Schnorr和EIGamal 簽名算法的變種,被美國(guó)NIST稱作標(biāo)準(zhǔn)的數(shù)字簽名標(biāo)準(zhǔn)(DSS, Digital Signature Standard),嚴(yán)格來(lái)說(shuō)不算加密算法。
3.3 RSA和DSA的區(qū)別
(1) DSA是基于整數(shù)有限域離散對(duì)數(shù)難題的,其安全性與RSA相比差不多。
(2) DSA 數(shù)字簽名和認(rèn)證中,發(fā)送者使用自己的私鑰對(duì)文件或者消息進(jìn)行簽名,接受者收到消息后,使用發(fā)送者的公鑰來(lái)驗(yàn)證簽名的真實(shí)性,接受者由此可知這條消息確實(shí)來(lái)在于擁有私鑰的發(fā)送者,公鑰的形式就是數(shù)字證書。例如,從網(wǎng)上下載安裝程序,一般都帶有程序制作者的數(shù)字簽名,可以證明改程序的確是該作者(公司)發(fā)布的而不是第三方偽造的且未被篡改過(guò)(身份認(rèn)證/驗(yàn)證)。
(3) DSA 只是一種算法,和RAS的不同之處在于它能不能用作加密和解密,也不能進(jìn)行密鑰交換,只用于簽名,它比RSA要快很多。
4. 哈希算法
4.1 哈希(Hash)和加密(Encrypt)區(qū)別
哈希是把目標(biāo)文本轉(zhuǎn)換為具有相同長(zhǎng)度、不可逆的雜湊字符串(消息摘要)。
加密是指把目標(biāo)文件轉(zhuǎn)換為長(zhǎng)度不同、可逆的密文。詳細(xì)介紹
4.2 常見的哈希算法
(1) MD5 (Message Digest Algorithm5) 消息摘要算法第五版,是RSA公司研發(fā)的一種單向散列算法,非可逆,相同的明文產(chǎn)生相同的密文。
特性:
壓縮性:任意長(zhǎng)度的數(shù)據(jù),算出的MD5值長(zhǎng)度都是固定的。128位的MD5散列被表示為32位16進(jìn)制數(shù)字;
容易計(jì)算:從原數(shù)據(jù)計(jì)算出MD5值很容易;
抗修改性:對(duì)原數(shù)據(jù)進(jìn)行任何改動(dòng),哪怕只修改1個(gè)字節(jié),所得到的MD5值都有很大區(qū)別;
強(qiáng)抗碰撞:已知原數(shù)據(jù)和其MD5值,想找到一個(gè)具有相同MD5值的數(shù)據(jù)(即偽造數(shù)據(jù))是非常困難的。
(2) SHA 1(Secure Hash Algorithm) 可以對(duì)任意長(zhǎng)度的數(shù)據(jù)運(yùn)算生成一個(gè)160位的數(shù)值。主要適用于數(shù)字簽名標(biāo)準(zhǔn)里定義的DSA算法。對(duì)于長(zhǎng)度小于2^64位的消息,SHA-1 會(huì)產(chǎn)生一個(gè)160位的消息摘要。
特性:
不可以從消息摘要中復(fù)原信息;
兩個(gè)不同的消息,產(chǎn)生相同消息摘要的概率10^48 分之1 ,一般認(rèn)為不會(huì)產(chǎn)生相同的消息摘要。