安全加密在IC領域也是相當重要的部分了,這次我們簡單了解下經典加密算法,DES和AES。
DES簡介
DES全稱為Data Encryption Standard,即數據加密標準,是一種使用密鑰加密的塊算法。DES加密算法出自IBM的研究,1977年被美國聯邦政府的國家標準局確定為聯邦資料處理標準(FIPS),并授權在非密級政府通信中使用,之后開始廣泛流傳,但是近些年使用越來越少,因為DES使用56位密鑰(密鑰長度越長越安全),隨著現代計算能力的提升,破解難度越來越低。對于加密算法而言,這意味著它將慢慢淡出主流。
DES安全性
(1)如果DES密鑰太短經不起窮盡攻擊。
(2)DES存在弱密鑰和半弱密鑰。
不過,在某些簡單應用中,DES加密算法還是有使用空間的。
DES算法的入口參數有三個:Key、Data、Mode。
·其中Key為8個字節共64位,是DES算法的工作密鑰;
·Data也為8個字節64位,是要被加密或被解密的數據;
·Mode為DES的工作方式,有兩種:加密或解密。
DES算法是這樣工作的:
如Mode為加密,則用Key 去把數據Data進行加密, 生成Data的密碼形式(64位)作為DES的輸出結果;
如Mode為解密,則用Key去把密碼形式的數據Data解密,還原為Data的明碼形式(64位)作為DES的輸出結果。
DES算法為密碼體制中的對稱密碼體制,又被稱為美國數據加密標準。
DES是一個分組加密算法,典型的DES以64位為分組對數據加密,加密和解密用的是同一個算法。
密鑰長64位,密鑰事實上是56位參與DES運算(第8、16、24、32、40、48、56、64位是校驗位,使得每個密鑰都有奇數個1),分組后的明文組和56位的密鑰按位替代或交換的方法形成密文組。
DES加密
初始置換IP
將64 bit明文的位置進行置換,得到一個亂序的64 bit明文組,而后分成左右兩段,每段為32bit,以L0和R0表示,IP中各列元素位置號數相差為8,相當于將原明文各字節按列寫出,各列比特經過偶采樣和奇采樣置換后,再對各行進行逆序。
1. 初始置換IP作用是:將64位明文打亂重新排列。如,初始置換IP就是將原名來64位明文數據的第58位換到第1位,原來的50位換到第2位,…,依次類推。
2.初始置換結果分為兩組:左L0(32位)、右R0(32位)
初始置換表
乘積變換
乘積變換是DES算法的核心部分,此步驟需要經歷16輪,而且每一輪變換都需要一個48bit子密鑰,共需要16個48bit密鑰。將經過IP置換后的數據分成32 bit的左右兩組,在迭代過程中彼此左右交換位置。
每次迭代時只對右邊的32 bit進行一系列的加密變換,在此輪迭代即將結束時,把左邊的32 bit與右邊得到的32bit做異或運算,作為下一輪迭代時右邊的段,并將原來右邊未經變換的段直接送到左邊的寄存器中作為下一輪迭代時左邊的段。
在每一輪迭代時,右邊的段要經過選擇擴展運算E、密鑰加密運算、選擇壓縮運算S、置換運算P和左右數據段的異或運算。
乘積變換中的加密變換
(1)選擇擴展運算E
選擇擴展運算E
選擇擴展運算效果圖
(2)獲取子密鑰進行加密運算
子密鑰產生算法
1) 置換1
置換1后的效果
2) 循環左移
每個寄存器所需移動的數據位數
3) 壓縮置換
壓縮置換表
(3)選擇壓縮算法S
S盒信息
(4)置換運算P
P盒置換表
逆初始置換
逆初始置換是DES加密過程的最后一步,它的作用打亂重排第十六次加密迭代的結果然后形成64位密文。
1. 把64位中間密文打亂重排。初始置換IP與逆初始置換是互逆的。如,在IP中把輸入的第2位置換到第8位,而在逆初始置換中,把輸入的第8位置換到第2位。
2. 形成最終的64位密文。
3DES簡介
3DES是DES加密算法的一種模式,它使用3條64位的密鑰對數據進行三次加密。數據加密標準(DES)是美國的一種由來已久的加密標準,它使用對稱密鑰加密法。
另起一段對它進行簡單介紹的原因,是因為它特殊的價值:承上啟下。
3DES(Triple DES)是DES向AES過渡的加密算法,是DES的一個更安全的變形。它以DES為基本模塊,通過組合分組方法設計出分組加密算法。
3DES有兩種加密方式:
1. 第一、三次加密使用同一種密鑰,這種方式密鑰長度128位(112位有效)
2. 三次加密使用不同密鑰,這種方式密鑰長度192位(168位有效)
3DES的密鑰長度為24個字節,而 DES 的密鑰長度為8的倍數,比如8,16,24都可以。
AES簡介
AES,Advanced Encryption Standard,高級加密標準,在密碼學中又稱Rijndael加密法,是美國聯邦政府采用的一種區塊加密標準。它的出現主要是為了取代DES加密算法。
雖然出現了3DES的加密方法,但由于它的加密時間是DES算法的3倍多,64Bit的分組大小相對較小,所以還是不能滿足人們對安全性的要求。
1997年,美國國家標準技術研究所宣布希望征集高級加密標準,最終5個候選算法進入最后一輪:Rijndael,Serpent,Twofish,RC6和MARS。而Rijndael算法笑到了最后。
AES原本指的是一套標準FIPS 197,而AES算法一般指分組大小為128bits的Rijndeal算法。這也是AES與Rijndeal的一個區別。
AES與R的區別
下面簡單介紹下各個部分的作用與意義:
明文P
沒有經過加密的數據。
密鑰K
用來加密明文的密碼,在對稱加密算法中,加密與解密的密鑰是相同的。密鑰為接收方與發送方協商產生,但不可以直接在網絡上傳輸,否則會導致密鑰泄漏,通常是通過非對稱加密算法加密密鑰,然后再通過網絡傳輸給對方,或者直接面對面商量密鑰。密鑰是絕對不可以泄漏的,否則會被攻擊者還原密文,竊取機密數據。
AES加密函數
設AES加密函數為E,則 C = E(K, P),其中P為明文,K為密鑰,C為密文。也就是說,把明文P和密鑰K作為加密函數的參數輸入,則加密函數E會輸出密文C。
密文C
經加密函數處理后的數據
AES解密函數
設AES解密函數為D,則 P = D(K, C),其中C為密文,K為密鑰,P為明文。也就是說,把密文C和密鑰K作為解密函數的參數輸入,則解密函數會輸出明文P。
在這里簡單介紹下對稱加密算法與非對稱加密算法的區別。
對稱加密算法
加密和解密用到的密鑰是相同的,這種加密方式加密速度非常快,適合經常發送數據的場合。缺點是密鑰的傳輸比較麻煩。
非對稱加密算法
加密和解密用的密鑰是不同的,這種加密方式是用數學上的難解問題構造的,通常加密解密的速度比較慢,適合偶爾發送數據的場合。優點是密鑰傳輸方便。常見的非對稱加密算法為RSA、ECC和EIGamal。
AES的基本結構
AES為分組密碼,分組密碼也就是把明文分成一組一組的,每組長度相等,每次加密一組數據,直到加密完整個明文。在AES標準規范中,分組長度只能是128位,也就是說,每個分組為16個字節(每個字節8位)。
密鑰的長度可以使用128位、192位或256位。密鑰的長度不同,推薦加密輪數也不同,如下表所示:
AES加密有AES-128、AES-192、AES-256三種,分別對應三種密鑰長度128bits(16字節)、192bits(24字節)、256bits(32字節)。當然,密鑰越長,安全性越高,加解密花費時間也越長。
默認的是 AES-128,其安全性完全夠用。
這里實現的是AES-128,也就是密鑰的長度為128位,加密輪數為10輪。
AES的加密公式為C = E(K,P),在加密函數E中,會執行一個輪函數,并且執行10次這個輪函數,這個輪函數的前9次執行的操作是一樣的,只有第10次有所不同。也就是說,一個明文分組會被加密10輪。AES的核心就是實現一輪中的所有操作。
AES的處理單位是字節,128位的輸入明文分組P和輸入密鑰K都被分成16個字節,分別記為P = P0 P1 … P15 和 K = K0 K1 … K15。如,明文分組為P = abcdefghijklmnop,其中的字符a對應P0,p對應P15。
一般地,明文分組用字節為單位的正方形矩陣描述,稱為狀態矩陣。在算法的每一輪中,狀態矩陣的內容不斷發生變化,最后的結果作為密文輸出。
該矩陣中字節的排列順序為從上到下、從左至右依次排列,如下圖所示:
分組密碼體制
所謂分組密碼體制就是指將明文切成一段一段的來加密,然后再把一段一段的密文拼起來形成最終密文的加密方式。AES 采用分組密碼體制,即 AES 加密會首先把明文切成一段一段的,而且每段數據的長度要求必須是128位16個字節,如果最后一段不夠16個字節了,就需要用 Padding 來把這段數據填滿16個字節,然后分別對每段數據進行加密,最后再把每段加密數據拼起來形成最終的密文。
初始向量IV
初始向量 IV 的作用是使加密更加安全可靠,我們使用 AES 加密時需要主動提供初始向量,而且只需要提供一個初始向量就夠了,后面每段數據的加密向量都是前面一段的密文。初始向量 IV 的長度規定為128位16個字節,初始向量的來源為隨機生成。
AES加密模式
AES只是個基本算法,實現AES有幾種加密模式。分組密碼有五種工作體制:1.電碼本模式(Electronic Codebook Book (ECB));2.密碼分組鏈接模式(Cipher Block Chaining (CBC));3.計算器模式(Counter (CTR));4.密碼反饋模式(Cipher FeedBack (CFB));5.輸出反饋模式(Output FeedBack (OFB))。
ECB模式(電子密碼本模式:Electronic codebook)
ECB是最簡單的塊密碼加密模式,加密前根據加密塊大小(如AES為128位)分成若干塊,之后將每塊使用相同的密鑰單獨加密,解密同理。
CBC模式(密碼分組鏈接:Cipher-block chaining)
CBC模式對于每個待加密的密碼塊在加密前會先與前一個密碼塊的密文異或然后再用加密器加密。第一個明文塊與一個叫初始化向量的數據塊異或。
CFB模式(密文反饋:Cipher feedback)
與ECB和CBC模式只能夠加密塊數據不同,CFB能夠將塊密文(Block Cipher)轉換為流密文(Stream Cipher)。
OFB模式(輸出反饋:Output feedback)
OFB是先用塊加密器生成密鑰流(Keystream),然后再將密鑰流與明文流異或得到密文流,解密是先用塊加密器生成密鑰流,再將密鑰流與密文流異或得到明文,由于異或操作的對稱性所以加密和解密的流程是完全一樣的。
CTR模式(計數器:Counter)
計數器模式不常見,在CTR模式中, 有一個自增的算子,這個算子用密鑰加密之后的輸出和明文異或的結果得到密文,相當于一次一密。這種加密方式簡單快速,安全可靠,而且可以并行加密,但是在計數器不能維持很長的情況下,密鑰只能使用一次。
AES有五種加密模式,我們一般使用的是CBC模式,而ECB則相對不安全。ECB 模式是最基本的加密模式,僅僅使用明文和密鑰來加密數據,相同的明文塊會被加密成相同的密文塊,這樣明文和密文的結構將是完全一樣的,就會更容易被破解,相對來說不是那么安全,因此很少使用。
而CBC模式則比 ECB模式多了一個初始向量 IV,加密的時候,第一個明文塊會首先和初始向量 IV 做異或操作,然后再經過密鑰加密,然后第一個密文塊又會作為第二個明文塊的加密向量來異或,依次類推下去,這樣相同的明文塊加密出的密文塊就是不同的,明文的結構和密文的結構也將是不同的,因此更加安全,因而我們常用的就是CBC加密模式。
AES加密
開始加密,進入4個輪函數:
1、AddRoundKey:輪密鑰加運算
2、ByteSub:字節變換 (S盒變換)
3、ShiftRows:行變換
4、MixColumns:列變換
輪密鑰加 / AddRoundKey
簡單的把當前狀態 (state) 與擴展密鑰進行按位異或
字節變換 / ByteSub
這一步就是將state中每一個字節替換為S_box中的對應字節。S_box是一個有256個元素的一維數組,直接查找當前字節所對應的新的字節并替換即可。
行變換 / ShiftRow
這個就比較好理解了,就是把每行左環移,第一行不變,第二行環移1位,第三行環移2位,第三行環移3位。
列混合 / MixColumn
這是整個AES加密流程中最復雜的一步,同時要應用到之前在S盒變換里提到過的GF(256)域,如果真的想要理解這一步的話建議先去仔細了解一下GF(256)再來繼續閱讀,此處不多加闡述。
密鑰擴展 / KeyExpansion
萬事俱備,只欠東風。4個輪函數已經全部齊了,現在只差一步——密鑰擴展。
簡述DES與AES的區別
AES中的S盒運用了GF(28)的數學基礎,DES中的S盒主要是為了確保非線性。與DES相比,AES用到了非常深的數學基礎。
與AES算法相比,DES在參數特性方面主要區別體現在以下幾個方面:
1、DES的數據塊大小為8個字節,而AES的數據塊大小為16個字節。
2、DES的密鑰長度是64位(其中8位用于校驗),而AES的密鑰長度是128位(AES算法比DES算法更安全)。
3、這兩種算法在加/解方面的具體原理是不一樣的,但DES加密算法的塊大小及密鑰長度都不能滿足現在的安全需求了,就像最開始提到的那樣,所以現在比較少使用這種加密算法,而是使用像AES或者3DES之類更高級的加密算法。
審核編輯:劉清
-
AES
+關注
關注
0文章
103瀏覽量
33206 -
DES
+關注
關注
0文章
64瀏覽量
48199 -
加密算法
+關注
關注
0文章
211瀏覽量
25530 -
加解密
+關注
關注
0文章
18瀏覽量
6513
原文標題:科普:簡述DES與AES的區別
文章出處:【微信號:IP與SoC設計,微信公眾號:IP與SoC設計】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論