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