天天看點

加密算法簡介

密碼學簡介

據記載,公元前400年,古希臘人發明了置換密碼。1881年世界上的第一個電話

保密專利出現。在第二次世界大戰期間,德國軍方啟用“恩尼格瑪”密碼機,密

碼學在戰争中起着非常重要的作用。

随 着資訊化和數字化社會的發展,人們對資訊安全和保密的重要性認識不斷提

高,于是在1997年,美國國家保準局公布實施了“美國資料加密标準(DES)”

, 民間力量開始全面介入密碼學的研究和應用中,采用的加密算法有DES、RSA

、SHA等。随着對加密強度的不斷提高,近期又出現了AES、ECC等。

使用密碼學可以達到以下目的:

保密性:防止使用者的辨別或資料被讀取。

資料完整性:防止資料被更改。

身份驗證:確定資料發自特定的一方。

加密算法介紹

更 具密鑰類型不同将現代密碼技術分為兩類:對稱加密算法(秘密鑰匙加密)

和對稱加密算法(公開密鑰加密)。對稱鑰匙加密系統是加密和解密均采用同一

把秘密 鑰匙,而且通信雙方都必須獲得這把鑰匙,并保持鑰匙的秘密。非對稱

密鑰加密系統采用的加密鑰匙(公鑰)和解密鑰匙(私鑰)是不同的。

對稱加密算法

對稱加密算法用來對敏感資料等資訊進行加密,常用的算法包括:

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

資料的場合。

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

強度更高。

AES(Advanced Encryption Standard):進階加密标準,是下一代的加密算法标

準,速度快,安全級别高。

AES

2000 年10月,NIST(美國國家标準和技術協會)宣布通過從15種候選算法中選

出的一項新的密匙加密标準。Rijndael被選中成為将來的AES。 Rijndael是在

1999年下半年,由研究員Joan Daemen 和 Vincent Rijmen 建立的。AES正日益

成為加密各種形式的電子資料的實際标準。

美國标準與技術研究院(NIST)于2002年5月26日制定了新的進階加密标準(AES

)規範。

算法原理

AES 算法基于排列和置換運算。排列是對資料重新進行安排,置換是将一個資料

單元替換為另一個。AES使用幾種不同的方法來執行排列和置換運算。AES是一個

疊 代的、對稱密鑰分組的密碼,它可以使用128、192和256位密鑰,并且用128

位(16位元組)分組加密和解密資料。與公共密鑰加密使用密鑰對不同,對 稱密

鑰密碼使用相同的密鑰加密和解密資料。通過分組密碼傳回的加密資料的位數與

輸入資料相同。疊代加密使用一個循環結構,在該循環中重複置換和替換輸入數

據。

AES和3DES的比較

460) {this.resized=true; this.width=460;}" resized="true">

非對稱算法

常見的非對稱加密算法如下:

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

的長度也是可變的;

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

簽名标準);

ECC(Ellipric Curves Cryptography):橢圓曲線密碼密碼學。

ECC

在1976 年,由于對稱加密算法已經不能滿足需要,Diffie 和 Hellman 發表了

一篇叫《密碼學新動向》的文章,介紹了公鑰加密的概念,由Rivet、Shamir、

Adelman提出了RSA算法。随着分解大整數方法的進步及完善、計算機速度的提高

以及計算機網絡的發展,為了保障資料的安全,RSA的密鑰需要不斷增 加,但是

,密鑰長度的增加導緻了其加解密的速度大為降低,硬體實作也變得越來越難以

忍受,這對使用RSA的應用帶來了很重的負擔,是以需要一種新的算法來 代替

RSA。

1985年N.Kobitz和Miller提出将橢圓曲線用于密碼算法,根據是有限域上的橢圓

曲線上的點群中的離散對數問題ECDLP。ECDLP是比因子分解問題更難的問題,它

是指數級别的難度。

原理——橢圓曲線上的難題

橢圓曲線上離散對數問題ECDLP定義如下:給定素數P和橢圓曲線E,對Q=kP,在已

知P,Q的情況下求出小于P的正整數k。可以證明,由k和P計算Q比較容易,而Q和

P計算k則比較困難。

将橢圓曲線中的加法運算與離散對數中的模乘運算相對應,将橢圓曲線中的乘法

運算與離散對數中的模幂運算相對應,我們就可以建立基于橢圓曲線的對應的密

碼體制。

例如,對應Diffie-Hellman公鑰系統,我們可以通過如下方式在橢圓曲線上予以

實作:在E上選取生成元P,要求由P産生的群元素足夠多,通信雙方A和B分别選

取a和b,a和b予以保密,但将aP和bP公開,A和B間通訊用的密鑰為abP,這是第

三者無法得知的。

對應ELGammal密碼系統可以采用如下方式在橢圓曲線上予以實作:将明文m嵌入

到E上Pm點,選一點B ∈E ,每一使用者都選一整數a,0K=kG [其中 K, G 為 Ep

(a,b) 上的點, k 為小于 n (n 是點 G的階)的整數]

不難發現,給定k和G,根據加法法則,計算K很容易;但給定K和G,求k就相對困

難了。

這就是橢圓曲線加密算法采用的難題。我們把點G稱為基點(base point),k

(kPS PUB 180)公布;1995年又釋出了一個修訂版FIPS PUB 180-1,通常稱之

為SHA-1。SHA-1是基于MD$算法的,并且它的設計在很大程度上是模仿MD4的。現

在已成為公認的最安全的雜湊演算法之一,并被廣泛使用。

原理

SHA-1是一種資料加密算法,該算法的思想是接受一段明文,然後以一種不可逆

的方式将它轉換成一段(通常更小)密文,也可以簡單的了解為取一串輸入碼(

稱為預映射或資訊),并把它們轉化為長度較短、位數固定的輸出序列及散列值

(也稱為資訊摘要或資訊認證代碼)的過程。

單 向散列函數的安全性在于其産生散列值的操作過程具有較強的單向性。如果

在輸入序列中嵌入密碼,那麼任何人在不知道密碼的情況下都不能産生正确的散

列值,從 而保證了其安全性。SHA将輸入流按照每塊512位(64個位元組)進行分

塊,并産生20個位元組的被稱為資訊認證代碼或資訊摘要的輸出。

該算法輸入封包的最大長度不超過264位,産生的輸出是一個160位的封包摘要。

輸入是按照512位的分組進行處理的。SHA-1是不可逆的,防沖突,并具有良好的

雪崩效應。

通 過雜湊演算法可實作數字簽名,數字簽名的原理是将要傳送的明文通過一種函

數運算(Hash)轉換成封包摘要(不同的明文對應不同的封包摘要),保溫摘要

加密 後與明文一起傳送給接受方,接受方将接受的明文産生新的封包摘要與發

送方的發來封包摘要解密比較,比較結果一緻表示明文未被改動,如果不一緻表

示明文已被 篡改。

MAC(資訊認證代碼)就是一個散列結果,其中部分輸入資訊是密碼,隻有知道

這個密碼的參與者才能再次計算和驗證MAC碼的合法性。

MAC的産生參見下圖:

460) {this.resized=true; this.width=460;}">

SHA-1與MD5的比較

因為二者均由MD4導出,SHA-1和MD5很相似。相應的,他們的強度和其他特性也

是很相似,但還是有以下幾點不同:

對強行攻擊的安全性:最顯著和最重要的差別是SHA-1摘要比MD5摘要長32位。使

用強行技術,産生任何一個封包時期摘要等于改定摘要的難度對MD5是2128數量

級的操作,而對SHA-1則是2160數量級的操作。這樣,SHA-1對強行攻擊有更大的

強度。

對密碼分析的安全性:由于MD5的設計,易受密碼分析的攻擊,SHA-1顯得不易受

這樣的攻擊。

速度:在相同的硬體上,SHA-1的運作速度比MD5慢。

對稱與非對稱算法的比較

以上綜述了兩種加密方法的原理,總體來說主要有以下幾個方面的不同:

在管理方面:公鑰密碼算法隻需要較少的資源就可以實作目的,在密碼的配置設定上

,兩者之間相差一個指數級别(一個是n一個是n2)。是以私鑰密碼算法不适應

廣域網的使用,而且更重要的一點是它不支援數字簽名。

在安全方面:由于供鑰密碼算法基于未解決的數學難題,在破解上幾乎不可能。

對于私鑰密碼算法,到了AES雖說從理論來說是不可能破解的,但從計算機的發

展角度來看,公鑰更具有優越性。

從速度上來看:AES的軟體實作速度已經達到了每秒數兆或者數十兆比特。是公

鑰的100倍,如果用硬體來實作的話,這個比值将擴大到1000倍。

加密算法的選擇

前面的章節已經介紹了對稱加密算法和非對稱加密算法,有很多人疑惑:那我們

在實際使用的過程中究竟該使用哪一種比較好呢?

我們應該根據自己的使用特點來确定,由于非對稱加密算法的運作速度比對稱加

密算法的速度慢很多,當我們需要加密大量的資料時,建議采用對稱加密算法,

提高加解密的速度。

對稱加密算法不能實作簽名,是以簽名隻能非對稱算法。

由于對稱加密算法的密鑰管理是一個複雜的過程,米藥的管理直接決定着她的安

全性,是以當資料量很小時,我們可以考慮采用非對稱加密算法。

在實際的操作過程中,我們通常采用的方法是:采用非對稱加密算法管理對稱算

法的密鑰,然後用對稱加密算法加密資料,這樣我們就內建了兩類加密算法的優

點,既實作了加密速度快的優點,又實作了安全友善管理密鑰的優點。

如果在標明了加密算法後,那采用多少位的密鑰呢?一般來說,密鑰越長,運作

的速度就越慢,應該根據我們實際需要的安全級别來選擇,一般來說,RSA建議

采用1024位的數字,ECC建議采用160位,AES采用128位即可。

繼續閱讀