aes 加密算法

這篇文章首先登在法國的一本linux雜誌的一期關於安全的特刊上。編輯,做者以及翻譯人員好心的容許LinuxFocus雜誌刊登這個特刊裏的任意一篇文章。因此只要這些文章被翻譯好了,LinuxFocus雜誌就會盡快地呈現給讀者。謝謝全部參與這項工做的人。若是全部文章都是來自這個特刊的話,都會使用這個摘要。linux




 

爲何要進行加密?--2500年的歷史

密碼學的起源可能要追溯到人類剛剛出現,而且嘗試去學習如何通訊的時候。他們不得不去尋找方法確保他們的通訊的機密。可是最早有意識的使用一些技術的方法來加密信息的多是公元六年前的古希臘人。他們使用的是一根叫scytale的棍子。送信人先繞棍子卷一張紙條,而後把要寫的信息打縱寫在上面,接着打開紙送給收信人。若是不知道棍子的寬度(這裏做爲密匙)是不可能解密裏面的內容的。後來,羅馬的軍隊用凱撒密碼(三個字母表輪換)進行通訊。

在隨後的19個世紀裏面,主要是發明一些更加高明的加密技術,這些技術的安全性一般依賴於用戶賦予它們多大的信任程度。在19世紀Kerchoffs寫下了現代密碼學的原理。其中一個的原理提到:加密體系的安全性並不依賴於加密的方法自己,而是依賴於所使用的密匙。.

那麼,從這個角度來看,加密體系應該可以知足那些需求的。但是,當時的加密體系仍然缺乏數學的背景,於是也缺乏測量或評價這些體系抗攻擊的能力。要是有人能最終達到密碼學的終極目標,即找到百分百無條件安全的體系那該有多好呀!在1948年和1949年,香農(Claude Shannon)在他的兩篇論文裏,把科學背景加入了密碼學。這兩篇論文是《通訊的數學原理》以及主要的《祕密體系的通訊原理》。那些文章把許多的但願和偏見都掃開了。同時香農(Claude Shannon)還證實了Vernam密碼(也稱爲One Time Pad)是當時惟一無條件安全的體系。不幸的是,那個體系在使用上是不可行的...。這就是爲何如今評價體系的安全性相反是基於理論上計算獲得的安全性的理由。若是尚未找到一種比徹底搜索可能的密匙值這種方法更好的攻擊方法的話,你能夠說這種密匙加密方法是安全的。.算法

 

AES(高級加密標準Advanced Encryption Standard)

200010月,NIST(美國國家標準和技術協會)宣佈經過從15種侯選算法中選出的一項新的密匙加密標準。新的標準將會代替密匙長度變的過短的舊的DES算法。Rijndael被選中成爲未來的AESRijndael這個名字是從它的兩個發明者RijmenDaemen的名字得來的。

這個加密體系聽說是一種分組加密方法,由於信息的內容是以128位長度的分組爲加密單元的。加密密匙長度有128192256位多種選擇。正象你所知的那樣,DES加密的分組長度是64比特,而密匙長度只有64比特。三重DES加密的分組長度一般是64比特,而密匙長度上112比特。安全

AES

 

表一: AES 迭代網絡


圖一描述了AES的操做模式。首先密匙K0和待加密信息按位相與。而後全部要加密的分組都用一個函數F進行迭代計算,計算用的子密匙是由一個密匙擴展函數產生的,初始的密匙是主密匙。

對於AES 函數F要迭代10次。app

  • 2描述的是加密過程當中函數F是如何被迭代的。一個128位的分組轉換成16個字節,做爲下面處理的輸入。首先,每個字節分別通過替換函數S的處理,而後,用第二個置換函數P16個字節進行處理。而後這個結果就和匙擴展函數產生的子匙進行位與。
  • Ki是用匙擴展函數從第K(i-1)輪的子匙和第K0的密匙獲得的。圖三描述了匙擴展函數。16個字節的被分紅4組,每組4個字節,來進行處理。最後的一組的4個字節由替換函數S(這個S和用F函數進行迭代處理時的S是同樣的)來進行替換處理。最初的4個字節的結果和α係數相加,這個係數是與輪數相關的,它是預先定義的。最後,爲了獲得Ki,把獲得的4個字節的結果和K(i-1)匙的最初4個字節按位相加,而後獲得的結果又和K(i-1)匙的下面的4個字節按位相加,如此類推。

F function

 

2: 函數 Fide


好了,如今咱們簡單地看看替換函數是怎麼獲得的,而後看看ai常數有什麼做用。爲了簡單的理由,一個字節應該是256個元素集(稱爲有限域)的一個元素,對於這些元素只包含一些簡單的操做(例如加法,乘法,反轉)。事實上,前面提到的替換函數S在那個有限域裏的反轉。置換函數S被定義爲一個很簡單的操做,以便能簡單的實現。ai係數是和指數I(有限域的元素)成正比的。這些考慮,使得AES實現起來很是有效。

由於AES僅僅在基於簡單的位操做運算,這有兩個主要的優勢:函數

  • 即便是純粹的軟件實現,AES也是很快的。例如,用C++在奔騰200的電腦上實現的AES的加密速度可達到70M/;
  • AES並不依賴於S-Box的選擇(根據NSA, DES裏的S-Boxes可能包含後門),對分析算法抗擊差分密碼分析及線性密碼分析具備能力。

Key expansion routine

 

3: 匙擴展例程學習

 

公匙加密

1976年,Diffie Hellman發表了一篇叫《密碼學新動向》的文章,這篇文章給密碼學社區的研究者帶來了很大的轟動。這篇文章介紹了公匙加密的概念。實際上,做爲當時所知道的惟一的一種算法-對稱密匙算法-已經不能知足因爲網絡等的通訊手段而引發的通訊量急增的須要編碼

基本上說來,他們的高明想法的核心就是單向函數的機關。對於那個函數來講,一個方向上的操做是容易的,可是若是不知道祕密的機關,即便全部人都知道函數自己,從反方向計算是不現實的。在這裏,公匙的扮演的角色和函數相同,僅被有限的一部分人知道的機關就是私匙。這樣,愛麗斯和鮑勃(以及其餘人)的世界就誕生了。愛麗斯和鮑勃是兩個但願進行具備完整性要求的通訊的人,他們須要防止有人監聽和篡改通訊。.加密

不用說,接收信息的人要使用私匙,逆向使用函數,來解密信息。

公匙體系最好(固然也是最簡單的)例子在兩年後,也就是1978年出現了。它是由Rivest, Shamir Adleman發明的,因此也被稱爲RSARSA算法創建在對整數的分解的數學難題上的。私匙是由三個數(p,q,d)組成,其中pq是兩個素數(具備大體相同的大小),而d和(p-1*q-1)互質。公匙由兩個數(ne)組成,其中n=pq,而e(p-1)(q-1)d爲模的倒數, 例如:

ed = 1 mod(p-1)(q-1).




假如愛麗斯想鮑勃的公匙(n,e)加密,傳送一些文本。她首先會把明文轉換成小於n的整數m,那麼她就會這樣處理: 

c = me mod n,



而後把結果c送給鮑勃。在鮑勃的這邊,他就會用他的私匙(p,q,d)進行這樣的處理

cd mod n = med mod n = m.



對於RSA,單向的機關函數是可以從一個小於n的整數x獲得xe mod n.

RSA產生以來,又發明了許多其它的公匙體系。如今來講,除了RSA外,其中一個還可選擇的最有名的體系是基於離散算法的。  

密碼學在現代的應用

實際上,公匙加密因爲更容易的使用,以及能解決了目前爲止許多安全的問題,因此更爲吸引人。說的更準確點的說,它解決了一些認證的問題:

  • 身份認證: Alice在使用今天的匿名通訊的時候,她想確定她正在通訊的對象並非假扮Bob的。爲了達到這樣的目的,她使用了一個認證協議。如今有許多認證協議的存在,一般都是基於RSA或離散對數原理的。
  • 文檔認證::一個受權機關經過一個數字簽名來認證一個文檔。簽名一般附加在消息後面,這些簽名一般是把文檔和受權機關的一些信息做爲輸入而獲得的一些字節位,這些獲得的簽名一般是經過MD5SHA等的哈希算法hash獲得的。還有就是, 任何訪問該文檔的人都應該可以去檢查簽名是否真的由受權機關簽發的。爲了實現這個目的,使用了所謂的簽名模板(signature schemas)。其中一個最有名的模板是ElGamal模板,又是基於離散算法問題的。

此外,與密匙加密相比,公匙加密還提供基於密碼的加密體系,以確保通訊的保密性。

此外,與密匙加密相比,公匙加密還提供基於密碼的加密體系,以確保通訊的保密性。咱們想象一下愛麗斯想和鮑勃進行祕密的通訊。愛麗斯從一個公共的目錄裏取得鮑勃的公匙,而後他用這個公匙對他的明文進行加密。當鮑勃接收到了密文,他就用他的私匙對密文進行解密,獲得信息的內容。這些匙各起着很不一樣的做用,這就是爲何這些體系被稱爲不對稱加密體系的理由。與此不一樣,密匙加密體系的加密和解密用的都是相同的匙,因此就被稱爲對稱加密體系。


公匙加密與密匙加密相比,還有另一個更爲突出的優勢。實際上,若是有N個用戶須要經過密匙加密體系進行通訊的話,每個人和組裏的任何一我的通訊都須要不一樣的密匙,就是說,須要管理NN-1)條密匙。若是N是上千的話,就會有上百萬的密匙須要管理...。更糟糕的是,即便是增長一個用戶也並不是是一個簡單的任務,由於爲了使這個用戶和組裏的全部成員通訊,須要產生N個新匙,而後那些新匙都要送遍整個組。與此相反,在非對稱加密體系裏面,成員的N個公匙是存放在一個公共的目錄裏面,新增一個新用戶要作的只是簡單的把他的公匙添加到目錄裏面就是了。  

使用公匙仍是密匙--找出合適的方案

前面的章節已經說明了公匙加密能夠解決不少密匙加密不能解決的問題。有很人和疑惑:那AES還有什麼做用呢?實際上,對於這種選擇有兩個主要的理由:

  • 首先是實用上的理由。通常來講公匙加密體系是很慢的。例如RSA的軟件實現比AES慢一千倍,還有RSA並不爲硬件實現而設計的。在傳遞信息這麼苛刻的今天,咱們是不能接受被一個加密算法而限制的。
  • 其次,公匙加密體系的內部結構致使了其餘的安全問題。

    例如,對於一個特定的安全水平,公匙加密體系要求匙的長度比密匙加密體系的匙的長度大的多。實際上,對於匙的長度的重要性和觀念,僅僅是對於密匙加密體系纔有意義。事實上,那些體系依賴於這樣的事實:只有野蠻的攻擊纔可能攻破他們,例如,窮舉全部可能的匙值,若是匙的長度是128比特的話,那麼2128個匙值須要被窮舉。

    可是對於公匙加密體系,僅僅在考慮相同的體系的時候,匙的大小纔是一個有意義的參數。例如,匙的長度是512比特的RSA的安全性比匙的長度是128比特的AES差。正確地評估一個公匙加密體系的惟一辦法是估計一些衆所周知的攻擊方法的複雜性,這樣一來的話,事情就徹底不一樣了:你永遠不知道是否有新的辦法破壞體系的安全性。最近,一組研究人員成功的把一個512位的整數分解因子。因此對於一個合理的安全水平,一般建議用1024位的數字。

因此,對於純粹的加密來講,當能使用密匙加密算法的時候,優先使用密匙加密算法。Zimmermann已經研究了一個有意義的混合的方法,這個方法在PGP裏實現。大體說來,當愛麗斯 和鮑勃 想進行具備完整性特徵的通訊的時候,使用一個密匙加密算法(PGP用的是IDEA):

  • 首先愛麗斯 和鮑勃使用匙交換協議來協商一個密匙。匙交換協議用的是公匙加密。其中最著名的一個協議是基於Diffie-Hellman的算法的
  • 而後他們用IDEA算法進行通訊。

當他們完成通訊之後,協商到的會話匙就會被丟棄。那樣的一個系統即便用了密匙加密體系也使用了公匙加密體系。一般,你們認爲這樣一個體系裏,比較不安全的部分是匙交換協議。  

 

 

 

 

 

密碼學歷和密碼系統種類

密碼學(Cryptology)一字源自希臘文"krypto's""logos"兩字,直譯即爲"隱藏""訊息"之意。
密碼學的起源可能要追溯到人類剛剛出現,而且嘗試去學習如何通訊的時候。他們不得不去尋找方法確保他們的通訊的機密。可是最早有意識的使用一些技術的方法來加密信息的多是公元六年前的古希臘人。他們使用的是一根叫scytale的棍子。送信人先繞棍子卷一張紙條,而後把要寫的信息打縱寫在上面,接着打開紙送給收信人。若是不知道棍子的寬度(這裏做爲密匙)是不可能解密裏面的內容的。
後來,羅馬的軍隊用凱撒密碼(三個字母表輪換)進行通訊。愷撒密碼是公元前50年古羅馬愷撒用過的密碼,加密方法是把a變成Db變成Ec換成F,依次類推,z換成C。這樣明文和密文的字母就創建一一對應的關係。
在隨後的19個世紀裏面,主要是發明一些更加高明的加密技術,這些技術的安全性一般依賴於用戶賦予它們多大的信任程度。在19世紀Kerchoffs寫下了現代密碼學的原理。其中一個的原理提到:加密體系的安全性並不依賴於加密的方法自己,而是依賴於所使用的密匙。.
在二次大戰中,密碼更是扮演一個舉足輕重的角色,許多人認爲同盟國之因此能打贏這場戰爭徹底歸功於二次大戰時所發明的破譯密文數字式計算器破解德日密碼。破譯密文數字式計算器又名圖靈機,是數學家圖靈所發明的。公元1949年,Shannon提出第一篇討論密碼系統通信理論之論文,近代密碼學可說是濫觴於斯。直至公元1975年,DiffieHellman提出公開金匙密碼系統之觀念,近代密碼學之研究方向,正式脫離祕密金匙密碼系統之窠臼,蓬勃發展,至今已近二十年。發展至今,已有二大類的密碼系統。第一類爲對稱金鑰(Symmetric Key),第二類爲非對稱金鑰(Public Key)

密碼法的基本原理
能夠分紅兩種:移位法(transposition)和替代法(substitution)。

移位法就是將訊息裏面的文字,根據必定的規則改變順序,這種方法,在文字數量很大的時候,即可以顯示出他的優點,例如"Hello World"纔不過10個字母即可以有11708340914350080000種排列的方式。另一種方法,就是替代法,還能夠分紅兩種,一種是單字替代,一種是字母替代,兩種的原理是同樣的,就是利用文字相對順序的對應,來改變原來的文章,以英文爲例,咱們能夠把英文字母日後移動三個位置,即: 

a b c d e f g h i j k l m n o p q r s t u v w x y z 
D E F G H I J K L M N O P Q R S T U V W X Y Z A B C 

泛例:  Hello World How are you 
khoor zruog krz duh brx 

這句話就變的難以辨認了,並且若是發信人收信人有協議好的話,那還能夠把文字之間的空白刪除,反正翻譯回來的時候,能夠靠文句的意思,來推測斷句斷字的時機。 而單字替代,則是以每一個單字,都去換成另一個相對應的單字,這樣來改寫原文,變成一個沒法辨認其意義的加密文件。 
移位法固然不僅限於一種,光是英文字母不考慮大小寫,就能夠有25種互異的方法,每種密碼法,均可視爲一種加密法,咱們稱爲算法(algorithm),和一把鑰匙(KEY)的組合結果。鑰匙是用來指定加密程序的演算細節。以移位法爲例,算法是隻以密碼字母集裏的字母,取代明文字母集裏面的字母,鑰匙即是收發信人定義的密碼字母集。 

密碼學術語

明文用MMessage,消息)或PPlaintext,明文)表示,它多是比特流、文本文件、位圖、數字化的語音流或者數字化的視頻圖像等。
密文用CCipher)表示,也是二進制數據,有時和M同樣大,有時稍大。經過壓縮和加密的結合,C有可能比P小些。
加密函數E做用於M獲得密文C,用數學公式表示爲:EM=C。解密函數D做用於C產生M,用數據公式表示爲:DC=M。先加密後再解密消息,原始的明文將恢復出來,DEM))=M必須成立。

對稱金鑰(Symmetric Key)。經典對稱加密——DES

舉一個簡單的對稱的鑰匙密碼學的範例假想從朋友處收到一個通知你和你的朋友贊成來加解密大家的訊息,大家將使用下列算法每一個字母將會上移三個字母例如 A=C, B=D,  Y  Z 轉一圈回到 A B,這個方程式 ("每一個字母上移三個字母") 就是送信者使用來加密訊息的鑰匙而收信者使用相同的鑰匙來解密 . 
任何人若是沒有鑰匙就不可以讀此訊息由於相同的鑰匙視同實用來加密及解密訊息這個方法是一個 對稱鑰匙的算法這類的密碼學及是咱們所知的祕密鑰匙密碼學,由於此鑰匙 必須被祕密保存於送信者和收信者,以保護資料的完整性

DES(Data Encryption Standard)
算法,於1977年獲得美國政府的正式許可,是一種用56位密鑰來加密64位數據的方法。
DES
算法的入口參數有三個:KeyDataMode。其中Key8個字節共64位,是DES算法的工做密鑰;Data也爲8個字節64位,是要被加密或被解密的數據;ModeDES的工做方式有兩種:加密或解密。
DES
算法是這樣工做的:如Mode爲加密,則用Key去把數據Data進行加密,生成Data的密碼形式(64位)做爲DES的輸出結果;如Mode爲解密,則用Key去把密碼形式的數據Data解密,還原爲Data的明碼形式(64位)做爲DES的輸出結果。

DES
算法實現加密須要三個步驟:
第一步:變換明文。對給定的64位比特的明文x,首先經過一個置換IP表來從新排列x,從而構造出64位比特的x0x0=IP(x)=L0R0,其中L0表示x0的前32比特,R0表示x0的後32位。
第二步:按照規則迭代。規則爲
Li = Ri-1
Ri = Li
f(Ri-1,Ki)
第三步:通過i次迭代運算後。獲得LiRi,將此做爲輸入,進行逆置換,即獲得密文輸出。

DES
算法具備比較高安全性,到目前爲止,除了用窮舉搜索法對DES算法進行攻擊外,尚未發現更有效的辦法。而56位長的密鑰的窮舉空間爲256,這意味着若是一臺計算機的速度是每一秒種檢測一百萬個密鑰,則它搜索徹底部密鑰就須要將近2285年的時間,可見,這是難以實現的,固然,隨着科學技術的發展,當出現超高速計算機後,咱們可考慮把DES密鑰的長度再增加一些,以此來達到更高的保密程度。

非對稱金鑰(Public Key)。經典非對稱加密——RSA

非對稱性或公開的鑰匙 密碼學不一樣於對稱性的 密碼學在於其加密鑰匙只適用於單一使用者
鑰匙被分爲兩個部分
一把私有的鑰匙僅有使用者才擁有
一把公開的鑰匙可公開發行配送,只要有要求即取得
每支鑰匙產生一個被使用來改變內文的功能私有的鑰匙 產生一個 私有改變內文的功能,而公開的鑰匙 產生一個 公開改變內文的功能
這些功能是反向相關的例如., 若是一個功能是用來加密訊息,另一個功能則被用來解密訊息.不論此改變內文功能的次序爲什麼皆不重要
公開的鑰匙系統的優點是兩個使用者可以安全的溝通而不需交換祕密鑰匙例如假設一個送信者須要傳送一個信息給一個收信者而信息的祕密性是必要的送信者以收信者的公開的鑰匙來加密,而僅有收信者的私有的鑰匙可以對此信息解密
公開的鑰匙密碼學是很是適合於提供認證,完整和不可否認的服務全部的這些服務及是咱們所知的數字簽名。

1965
年,美國史丹福大學電機工程系--默克爾、迪菲、赫爾曼等三人研究密碼學惋惜並未有所發現。另外在英國通信電子保安組(CESG)祕密機構的切爾納姆發現了還原密碼式,可是因爲屬於祕密機構,因此不能公開。1976年,DiffieHellman在文章「密碼學新方向(New Direction in Cryptography)」中首次提出了公開密鑰密碼體制的思想,1977年,RivestShamirAdleman三我的實現了公開密鑰密碼體制,如今稱爲RSA公開密鑰體制,它是第一個既能用於數據加密也能用於數字簽名的算法。這種算法易於理解和操做,算法的名字以發明者的名字命名:Ron Rivest Adi ShamirLeonard Adleman。他們成立RSA SecurityCompany 現時值25億美圓,在傳送信用卡時起了很大做用。RSA已安裝了5億套產品在IE , Netscape下的小鎖就是RSA的產品。數學掛鎖第一個發現不是美國,可是第一個公開。數學掛鎖上鎖易,還原難,因此受普遍使用,亦便是信息編碼保密。 

數學掛鎖泛例
數學掛鎖用單向式:N=pxq <--例子 N(合成數)=兩個質數的乘 
11x17=187=N 
還原單向式公式:C=Me(mod N) *eM的次數。
 M*13*(mod 187)=C *13
M的次數
c=165 
x=88 (password kiss) 
88*13*(mod 187)=165 *13
88的次數
modN=M 
C*1/e*mod(p-1)(q-1)=88 
C=165 
p=11 
q=17 
answer:mod 187=88 

RSA
的安全性依賴於大數分解,可是否等同於大數分解一直未能獲得理論上的證實,由於沒有證實破解 RSA就必定須要做大數分解。假設存在一種無須分解大數的算法,那它確定能夠修改爲爲大數分解算法。目前, RSA 的一些變種算法已被證實等價於大數分解。無論怎樣,分解n是最顯然的攻擊方法。如今,人們已能分解多個十進制位的大素數。所以,模數n必須選大一些,因具體適用狀況而定 
雖然RSA的安全性一直未能獲得理論上的證實。它經歷了各類攻擊,至今未被徹底攻破。
整個密碼學發展的程序,辨識找尋新的算法,和保護鑰匙避免被解密者發現的程序,鑰匙在密碼學中很是重要,由於即便算法相同或太簡單,沒有加密的鑰匙的話,咱們仍然很難去破解加密的文件。

相關文章
相關標籤/搜索