本文章來自 VeriSign SSL證書-維瑞 技術中心
密碼學簡介 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
據記載,公元前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的比較
非對稱算法 常見的非對稱加密算法如下: RSA:由 RSA 公司發明,是一個支持變長密鑰的公共密鑰算法,需要加密的文件塊的長度也是可變的; DSA(Digital Signature Algorithm):數字簽名算法,是一種標準的 DSS(數字簽名標準); ECC(Elliptic Curves Cryptography):橢圓曲線密碼編碼學。 ECC 在1976年,由於對稱加密算法已經不能滿足需要,Diffie 和Hellman發表了一篇叫《密碼學新動向》的文章,介紹了公匙加密的概念,由Rivet、Shamir、Adelman提出了RSA算法。 隨着分解大整數方法的進步及完善、計算機速度的提高以及計算機網絡的發展,爲了保障數據的安全,RSA的密鑰需要不斷增加,但是,密鑰長度的增加導致了其加解密的速度大爲降低,硬件實現也變得越來越難以忍受,這對使用RSA的應用帶來了很重的負擔,因此需要一種新的算法來代替RSA。 1985年N.Koblitz和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,這是第三者無法得知的。 對應ELGamal密碼系統可以採用如下的方式在橢圓曲線上予以實現: 將明文m嵌入到E上Pm點,選一點B∈E,每一用戶都選一整數a,0<a<N,N爲階數已知,a保密,aB公開。欲向A送m,可送去下面一對數偶:[kB,Pm+k(aAB)],k是隨機產生的整數。A可以從kB求得k(aAB)。通過:Pm+k(aAB)- k(aAB)=Pm恢復Pm。同樣對應DSA,考慮如下等式: K=kG [其中 K,G爲Ep(a,b)上的點,k爲小於n(n是點G的階)的整數] 不難發現,給定k和G,根據加法法則,計算K很容易;但給定K和G,求k就相對困難了。 這就是橢圓曲線加密算法採用的難題。我們把點G稱爲基點(base point),k(k<n,n爲基點G的階)稱爲私有密鑰(privte key),K稱爲公開密鑰(public key)。 ECC與RSA的比較 ECC和RSA相比,在許多方面都有對絕對的優勢,主要體現在以下方面:
ECC的這些特點使它必將取代RSA,成爲通用的公鑰加密算法。比如SET協議的制定者已把它作爲下一代SET協議中缺省的公鑰密碼算法。 下面兩張表示是RSA和ECC的安全性和速度的比較:
RSA和ECC安全模長得比較
RSA和ECC速度比 散列是信息的提煉,通常其長度要比信息小得多,且爲一個固定長度。加密性強的散列一定是不可逆的,這就意味着通過散列結果,無法推出任何部分的原始信息。任何輸入信息的變化,哪怕僅一位,都將導致散列結果的明顯變化,這稱之爲雪崩效應。散列還應該是防衝突的,即找不出具有相同散列結果的兩條信息。具有這些特性的散列結果就可以用於驗證信息是否被修改。 單向散列函數一般用於產生消息摘要,密鑰加密等,常見的有:
SHA-1 在1993年,安全散列算法(SHA)由美國國家標準和技術協會(NIST)提出,並作爲聯邦信息處理標準(FIPS PUB 180)公佈;1995年又發佈了一個修訂版FIPS PUB 180-1,通常稱之爲SHA-1。SHA-1是基於MD4算法的,並且它的設計在很大程度上是模仿MD4的。現在已成爲公認的最安全的散列算法之一,並被廣泛使用。 算法原理 SHA-1是一種數據加密算法,該算法的思想是接收一段明文,然後以一種不可逆的方式將它轉換成一段(通常更小)密文,也可以簡單的理解爲取一串輸入碼(稱爲預映射或信息),並把它們轉化爲長度較短、位數固定的輸出序列即散列值(也稱爲信息摘要或信息認證代碼)的過程。 單向散列函數的安全性在於其產生散列值的操作過程具有較強的單向性。如果在輸入序列中嵌入密碼,那麼任何人在不知道密碼的情況下都不能產生正確的散列值,從而保證了其安全性。SHA將輸入流按照每塊512位(64個字節)進行分塊,併產生20個字節的被稱爲信息認證代碼或信息摘要的輸出。 該算法輸入報文的最大長度不超過264位,產生的輸出是一個160位的報文摘要。輸入是按512 位的分組進行處理的。SHA-1是不可逆的、防衝突,並具有良好的雪崩效應。 通過散列算法可實現數字簽名實現,數字簽名的原理是將要傳送的明文通過一種函數運算(Hash)轉換成報文摘要(不同的明文對應不同的報文摘要),報文摘要加密後與明文一起傳送給接受方,接受方將接受的明文產生新的報文摘要與發送方的發來報文摘要解密比較,比較結果一致表示明文未被改動,如果不一致表示明文已被篡改。 MAC (信息認證代碼)就是一個散列結果,其中部分輸入信息是密碼,只有知道這個密碼的參與者才能再次計算和驗證MAC碼的合法性。
SHA-1與MD5的比較 因爲二者均由MD4導出,SHA-1和MD5彼此很相似。相應的,他們的強度和其他特性也是相似,但還有以下幾點不同:
對稱與非對稱算法比較 以上綜述了兩種加密方法的原理,總體來說主要有下面幾個方面的不同:
三. 加密算法的選擇 前面的章節已經介紹了對稱解密算法和非對稱加密算法,有很多人疑惑:那我們在實際使用的過程中究竟該使用哪一種比較好呢? 我們應該根據自己的使用特點來確定,由於非對稱加密算法的運行速度比對稱加密算法的速度慢很多,當我們需要加密大量的數據時,建議採用對稱加密算法,提高加解密速度。 對稱加密算法不能實現簽名,因此簽名只能非對稱算法。 由於對稱加密算法的密鑰管理是一個複雜的過程,密鑰的管理直接決定着他的安全性,因此當數據量很小時,我們可以考慮採用非對稱加密算法。 在實際的操作過程中,我們通常採用的方式是:採用非對稱加密算法管理對稱算法的密鑰,然後用對稱加密算法加密數據,這樣我們就集成了兩類加密算法的優點,既實現了加密速度快的優點,又實現了安全方便管理密鑰的優點。 如果在選定了加密算法後,那採用多少位的密鑰呢?一般來說,密鑰越長,運行的速度就越慢,應該根據的我們實際需要的安全級別來選擇,一般來說,RSA建議採用1024位的數字,ECC建議採用160位,AES採用128爲即可。 |
SSL常見加密算法
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.