導航:首頁 > 文檔加密 > 對稱加密演算法原理和過程

對稱加密演算法原理和過程

發布時間:2023-09-05 17:31:48

1. 快速了解常用的對稱加密演算法,再也不用擔心面試官的刨根問底

加密演算法通常被分為兩種: 對稱加密 非對稱加密 。其中,對稱加密演算法在加密和解密時使用的密鑰相同;非對稱加密演算法在加密和解密時使用的密鑰不同,分為公鑰和私鑰。此外,還有一類叫做 消息摘要演算法 ,是對數據進行摘要並且不可逆的演算法。

這次我們了解一下對稱加密演算法。

對稱加密演算法在加密和解密時使用的密鑰相同,或是使用兩個可以簡單地相互推算的密鑰。在大多數的對稱加密演算法中,加密和解密的密鑰是相同的。

它要求雙方在安全通信之前,商定一個密鑰。對稱演算法的安全性依賴於密鑰,泄漏密鑰就意味著任何人都可以對他們發送的信息進行解密,這也是對稱加密演算法的主要缺點之一。

常見的對稱加密演算法有:DES演算法、3DES演算法、AES演算法。

DES演算法(Data Encryption Standard)是一種常見的分組加密演算法。

分組加密演算法是將明文分成固定長度的組,每一組都採用同一密鑰和演算法進行加密,輸出也是固定長度的密文。

由IBM公司在1972年研製,1976年被美國聯邦政府的國家標准局確定為聯邦資料處理標准(FIPS),隨後在國際上廣泛流傳開來。

在DES演算法中,密鑰固定長度為64位。明文按64位進行分組,分組後的明文組和密鑰按位置換或交換的方法形成密文組,然後再把密文組拼裝成密文。

密鑰的每個第八位設置為奇偶校驗位,也就是第8、16、24、32、40、48、56、64位,所以密鑰的實際參與加密的長度為56位。

我們用Java寫個例子:

運行結果如下:

DES現在已經不是一種安全的加密方法,主要因為它使用的密鑰過短,很容易被暴力破解。

3DES演算法(Triple Data Encryption Algorithm)是DES演算法的升級版本,相當於是對明文進行了三次DES加密。

由於計算機運算能力的增強,DES演算法由於密鑰長度過低容易被暴力破解;3DES演算法提供了一種相對簡單的方法,即通過增加DES的密鑰長度來避免類似的攻擊,而不是設計一種全新的塊密碼演算法。

在DES演算法中,密鑰固定長度為192位。在加密和解密時,密鑰會被分為3個64位的密鑰。

加密過程如下:

解密過程如下:

我們用Java寫個例子:

運行結果如下:

雖然3DES演算法在安全性上有所提升,但是因為使用了3次DES演算法,加密和解密速度比較慢。

AES(Advanced Encryption Standard,高級加密標准)主要是為了取代DES加密演算法的,雖然出現了3DES的加密方法,但由於它的加密時間是DES演算法的3倍多,密鑰位數還是不能滿足對安全性的要求。

1997年1月2號,美國國家標准與技術研究院(NIST)宣布希望徵集高級加密標准,用以取代DES。全世界很多密碼工作者都提交了自己設計的演算法。經過甄選流程,高級加密標准由美國國家標准與技術研究院於2001年11月26日發布於FIPS PUB 197,並在2002年5月26日成為有效的標准。

該演算法為比利時密碼學家Joan Daemen和Vincent Rijmen所設計,結合兩位作者的名字,以 Rijndael 為名投稿高級加密標準的甄選流程。

AES演算法的密鑰長度是固定,密鑰的長度可以使用128位、192位或256位。

AES演算法也是一種分組加密演算法,其分組長度只能是128位。分組後的明文組和密鑰使用幾種不同的方法來執行排列和置換運算形成密文組,然後再把密文組拼裝成密文。

我們用Java寫個例子:

運行結果如下:

AES演算法是目前應用最廣泛的對稱加密演算法。

對稱加密演算法在加密和解密時使用的密鑰相同,常見的對稱加密演算法有:DES演算法、3DES演算法、AES演算法。
由於安全性低、加密解密效率低,DES演算法和3DES演算法是不推薦使用的,AES演算法是目前應用最廣泛的對稱加密演算法。

2. 對稱加密演算法的加密演算法主要有哪些

1、3DES演算法

3DES(即Triple DES)是DES向AES過渡的加密演算法(1999年,NIST將3-DES指定為過渡的加密標准),加密演算法,其具體實現如下:設Ek()和Dk()代表DES演算法的加密和解密過程,K代表DES演算法使用的密鑰,M代表明文,C代表密文,這樣:

3DES加密過程為:C=Ek3(Dk2(Ek1(M)))

3DES解密過程為:M=Dk1(EK2(Dk3(C)))

2、Blowfish演算法

BlowFish演算法用來加密64Bit長度的字元串。

BlowFish演算法使用兩個「盒」——unsignedlongpbox[18]和unsignedlongsbox[4,256]。

BlowFish演算法中,有一個核心加密函數:BF_En(後文詳細介紹)。該函數輸入64位信息,運算後,以64位密文的形式輸出。用BlowFish演算法加密信息,需要兩個過程:密鑰預處理和信息加密。

分別說明如下:

密鑰預處理:

BlowFish演算法的源密鑰——pbox和sbox是固定的。我們要加密一個信息,需要自己選擇一個key,用這個key對pbox和sbox進行變換,得到下一步信息加密所要用的key_pbox和key_sbox。具體的變化演算法如下:

1)用sbox填充key_sbox

2)用自己選擇的key8個一組地去異或pbox,用異或的結果填充key_pbox。key可以循環使用。

比如說:選的key是"abcdefghijklmn"。則異或過程為:

key_pbox[0]=pbox[0]abcdefgh;

key_pbox[1]=pbox[1]ijklmnab;

…………

…………

如此循環,直到key_pbox填充完畢。

3)用BF_En加密一個全0的64位信息,用輸出的結果替換key_pbox[0]和key_pbox[1],i=0;

4)用BF_En加密替換後的key_pbox,key_pbox[i+1],用輸出替代key_pbox[i+2]和key_pbox[i+3];

5)i+2,繼續第4步,直到key_pbox全部被替換;

6)用key_pbox[16]和key_pbox[17]做首次輸入(相當於上面的全0的輸入),用類似的方法,替換key_sbox信息加密。

信息加密就是用函數把待加密信息x分成32位的兩部分:xL,xRBF_En對輸入信息進行變換。

3、RC5演算法

RC5是種比較新的演算法,Rivest設計了RC5的一種特殊的實現方式,因此RC5演算法有一個面向字的結構:RC5-w/r/b,這里w是字長其值可以是16、32或64對於不同的字長明文和密文塊的分組長度為2w位,r是加密輪數,b是密鑰位元組長度。

(2)對稱加密演算法原理和過程擴展閱讀:

普遍而言,有3個獨立密鑰的3DES(密鑰選項1)的密鑰長度為168位(三個56位的DES密鑰),但由於中途相遇攻擊,它的有效安全性僅為112位。密鑰選項2將密鑰長度縮短到了112位,但該選項對特定的選擇明文攻擊和已知明文攻擊的強度較弱,因此NIST認定它只有80位的安全性。

對密鑰選項1的已知最佳攻擊需要約2組已知明文,2部,2次DES加密以及2位內存(該論文提到了時間和內存的其它分配方案)。

這在現在是不現實的,因此NIST認為密鑰選項1可以使用到2030年。若攻擊者試圖在一些可能的(而不是全部的)密鑰中找到正確的,有一種在內存效率上較高的攻擊方法可以用每個密鑰對應的少數選擇明文和約2次加密操作找到2個目標密鑰中的一個。

3. 對稱加密演算法之DES介紹

DES (Data Encryption Standard)是分組對稱密碼演算法。

DES演算法利用 多次組合替代演算法 和 換位演算法 ,分散和錯亂的相互作用,把明文編製成密碼強度很高的密文,它的加密和解密用的是同一演算法。

DES演算法,是一種 乘積密碼 ,其在演算法結構上主要採用了 置換 、 代替 、 模二相加 等函數,通過 輪函數 迭代的方式來進行計算和工作。

DES演算法也會使用到數據置換技術,主要有初始置換 IP 和逆初始置換 IP^-1 兩種類型。DES演算法使用置換運算的目的是將原始明文的所有格式及所有數據全部打亂重排。而在輪加密函數中,即將數據全部打亂重排,同時在數據格式方面,將原有的32位數據格式,擴展成為48位數據格式,目的是為了滿足S盒組對數據長度和數據格式規范的要求。

一組數據信息經過一系列的非線性變換以後,很難從中推導出其計算的過程和使用的非線性組合;但是如果這組數據信息使用的是線性變換,計算就容易的多。在DES演算法中,屬於非線性變換的計算過程只有S盒,其餘的數據計算和變換都是屬於線性變換,所以DES演算法安全的關鍵在於S盒的安全強度。此外,S盒和置換IP相互配合,形成了很強的抗差分攻擊和抗線性攻擊能力,其中抗差分攻擊能力更強一些。

DES演算法是一種分組加密機制,將明文分成N個組,然後對各個組進行加密,形成各自的密文,最後把所有的分組密文進行合並,形成最終的密文。

DES加密是對每個分組進行加密,所以輸入的參數為分組明文和密鑰,明文分組需要置換和迭代,密鑰也需要置換和循環移位。在初始置換IP中,根據一張8*8的置換表,將64位的明文打亂、打雜,從而提高加密的強度;再經過16次的迭代運算,在這些迭代運算中,要運用到子密鑰;每組形成的初始密文,再次經過初始逆置換 IP^-1 ,它是初始置換的逆運算,最後得到分組的最終密文。

圖2右半部分,給出了作用56比特密鑰的過程。DES演算法的加密密鑰是64比特,但是由於密鑰的第n*8(n=1,2…8)是校驗(保證含有奇數個1),因此實際參與加密的的密鑰只有 56比特 。開始時,密鑰經過一個置換,然後經過循環左移和另一個置換分別得到子密鑰ki,供每一輪的迭代加密使用。每輪的置換函數都一樣,但是由於密鑰位的重復迭代使得子密鑰互不相同。

DES演算法 利用多次組合替代演算法和換位演算法,分散和錯亂的相互作用,把明文編製成密碼強度很高的密文,它的加密和解密用的是同一演算法。

DES演算法詳述:DES對64位明文分組(密鑰56bit)進行操作。

1、 初始置換函數IP:64位明文分組x經過一個初始置換函數IP,產生64位的輸出x0,再將分組x0分成左半部分L0和右半部分R0:即將輸入的第58位換到第一位,第50位換到第2位,…,依次類推,最後一位是原來的第7位。L0、R0則是換位輸出後的兩部分,L0是輸出的左32位,R0是右32位。例,設置換前的輸入值為D1D2D3…D64,則經過初始置換後的結果為:L0=D58D50…D8;R0=D57D49…D7.其置換規則如表1所示。

DES加密過程最後的逆置換 IP^-1 ,是表1的 逆過程 。就是把原來的每一位都恢復過去,即把第1位的數據,放回到第58位,把第2位的數據,放回到第50位。

2、 獲取子密鑰 Ki :DES加密演算法的密鑰長度為56位,一般表示為64位(每個第8位用於奇偶校驗),將用戶提供的64位初始密鑰經過一系列的處理得到K1,K2,…,K16,分別作為 1~16 輪運算的 16個子密鑰 。

(1). 將64位密鑰去掉8個校驗位,用密鑰置換 PC-1 (表2)置換剩下的56位密鑰;

(2). 將56位分成前28位C0和後28位D0,即 PC-1(K56)=C0D0 ;

(3). 根據輪數,這兩部分分別循環左移1位或2位,表3:

(4). 移動後,將兩部分合並成56位後通過壓縮置換PC-2(表4)後得到48位子密鑰,即Ki=PC-2(CiDi).

子密鑰產生如圖2所示:

3、 密碼函數F(非線性的)

(1). 函數F的操作步驟:密碼函數F 的輸入是32比特數據和48比特的子密鑰:
A.擴展置換(E):將數據的右半部分Ri從32位擴展為48位。位選擇函數(也稱E盒),如表5所示:

B.異或:擴展後的48位輸出E(Ri)與壓縮後的48位密鑰Ki作異或運算;

C.S盒替代:將異或得到的48位結果分成八個6位的塊,每一塊通過對應的一個S盒產生一個4位的輸出。

(2)、D、P盒置換:將八個S盒的輸出連在一起生成一個32位的輸出,輸出結果再通過置換P產生一個32位的輸出即:F(Ri,Ki),F(Ri,Ki)演算法描述如圖3,最後,將P盒置換的結果與最初的64位分組的左半部分異或,然後,左、右半部分交換,開始下一輪計算。

4、密文輸出:經過16次迭代運算後,得到L16、R16,將此作為輸入,進行逆置換,即得到密文輸出。逆置換正好是初始置的逆運算。例如,第1位經過初始置換後,處於第40位,而通過逆置換,又將第40位換回到第1位,其逆置換規則如表8所示:

圖4為DES演算法加密原理圖:

DES演算法加密和解密過程採用相同的演算法,並採用相同的加密密鑰和解密密鑰,兩者的區別是:(1)、DES加密是從L0、R0到L15、R15進行變換,而解密時是從L15、R15到L0、R0進行變換的;(2)、加密時各輪的加密密鑰為K0K1…K15,而解密時各輪的解密密鑰為K15K14…K0;(3)、加密時密鑰循環左移,解密時密鑰循環右移。

DES加密過程分析:

(1)、首先要生成64位密鑰,這64位的密鑰經過「子密鑰演算法」換轉後,將得到總共16個子密鑰。將這些子密鑰標識為Kn(n=1,2,…,16)。這些子密鑰主要用於總共十六次的加密迭代過程中的加密工具。

(2)、其次要將明文信息按64位數據格式為一組,對所有明文信息進行分組處理。每一段的64位明文都要經過初試置換IP,置換的目的是將數據信息全部打亂重排。然後將打亂的數據分為左右兩塊,左邊一塊共32位為一組,標識為L0;右邊一塊也是32位為一組,標識為R0.

(3)、置換後的數據塊總共要進行總共十六次的加密迭代過程。加密迭代主要由加密函數f來實現。首先使用子密鑰K1對右邊32位的R0進行加密處理,得到的結果也是32位的;然後再將這個32位的結果數據與左邊32位的L0進行模2處理,從而再次得到一個32位的數據組。我們將最終得到的這個32位組數據,作為第二次加密迭代的L1,往後的每一次迭代過程都與上述過程相同。

(4)、在結束了最後一輪加密迭代之後,會產生一個64位的數據信息組,然後我們將這個64位數據信息組按原有的數據排列順序平均分為左右兩等分,然後將左右兩等分的部分進行位置調換,即原來左等分的數據整體位移至右側,而原來右等分的數據則整體位移至左側,這樣經過合並後的數據將再次經過逆初始置換IP^-1的計算,我們最終將得到一組64位的密文。

DES解密過程分析:DES的解密過程與它的加密過程是一樣的,這是由於DES演算法本身屬於對稱密碼體制演算法,其加密和解密的過程可以共用同一個過程和運算。

DES加密函數f:在DES演算法中,要將64位的明文順利加密輸出成64位的密文,而完成這項任務的核心部分就是加密函數f。加密函數f的主要作用是在第m次的加密迭代中使用子密鑰Km對Km-1進行加密操作。加密函數f在加密過程中總共需要運行16輪。

十六輪迭代演算法:它先將經過置換後的明文分成兩組,每組32位;同時密鑰也被分成了兩組,每組28位,兩組密鑰經過運算,再聯合成一個48位的密鑰,參與到明文加密的運算當中。S盒子,它由8個4*16的矩陣構成,每一行放著0到15的數據,順序各個不同,是由IBM公司設計好的。經過異或運算的明文,是一個48位的數據,在送入到S盒子的時候,被分成了8份,每份6位,每一份經過一個S盒子,經過運算後輸出為4位,即是一個0到15的數字的二進製表示形式。具體運算過程為,將輸入的6位中的第1位為第6位合並成一個二進制數,表示行號,其餘4位也合並成一個二進制數,表示列號。在當前S盒子中,以這個行號和列號為准,取出相應的數,並以二進制的形式表示,輸出,即得到4位的輸出,8個S盒子共計32位。

DES演算法優缺點:

(1)、產生密鑰簡單,但密鑰必須高度保密,因而難以做到一次一密;

(2)、DES的安全性依賴於密鑰的保密。攻擊破解DES演算法的一個主要方法是通過密鑰搜索,使用運算速度非常高的計算機通過排列組合枚舉的方式不斷嘗試各種可能的密鑰,直到破解為止。一般,DES演算法使用56位長的密鑰,通過簡單計算可知所有可能的密鑰數量最多是2^56個。隨著巨型計算機運算速度的不斷提高,DES演算法的安全性也將隨之下降,然而在一般的民用商業場合,DES的安全性仍是足夠可信賴的。

(3)、DES演算法加密解密速度比較快,密鑰比較短,加密效率很高但通信雙方都要保持密鑰的秘密性,為了安全還需要經常更換DES密鑰。

參考鏈接 : https://blog.csdn.net/fengbingchun/article/details/42273257

4. 簡要說說對稱加密和非對稱加密的原理以及區別是什麼

對稱加密的原理是數據發送方將明文(原始數據)和加密密鑰一起經過特殊加密演算法處理後,使其變成復雜的加密密文發送出去。接收方收到密文後,若想解讀原文,則需要使用加密密鑰及相同演算法的逆演算法對密文進行解密,才能使其恢復成可讀明文。

非對稱加密的原理是甲方首先生成一對密鑰同時將其中的一把作為公開密鑰;得到公開密鑰的乙方再使用該密鑰對需要加密的信息進行加密後再發送給甲方;甲方再使用哪鍵另一把對應的私有密鑰對加密後的信息進行解密,這樣就實現了機密數據傳輸。

對稱加密和非對稱加密的區別為:密鑰不同、安全性不同、數字簽名不同。

一、密鑰不同

1、對稱加密:對稱加密加密和解密使用同一個密鑰。

2、非對稱加密:非對稱加密加密和解密所使用的不是同一個密鑰,需要兩個密鑰來進行加密和解密。

二、安全性不同

1、對基緩銷稱加密:對稱加密如果用於通過網路傳輸加密文件,那麼不管使用任何方法將密鑰告訴對方,都有可能被竊聽。

2、非對稱加密:非對稱加密因為它包含有兩個密鑰,且僅有其中的「公鑰」是可以被公開的,接收方只需要使用自己已持有的私鑰進行解密,這樣就可以很好的避免密鑰在傳輸過程中產生的安全問題。

三搏游、數字簽名不同

1、對稱加密:對稱加密不可以用於數字簽名和數字鑒別。

2、非對稱加密:非對稱加密可以用於數字簽名和數字鑒別。

5. 簡述加密技術的基本原理,並指出有哪些常用的加密體制及其代表演算法

1、對稱加密演算法
對稱加密演算法用來對敏感數據等信息進行加密,常用的演算法包括:
DES(Data Encryption Standard):數據加密標准,速度較快,適用於加密大量數據的場合。
3DES(Triple DES):是基於DES,對一塊數據用三個不同的密鑰進行三次加密,強度更高。
AES(Advanced Encryption Standard):高級加密標准,是下一代的加密演算法標准,速度快,安全級別高;
演算法原理
AES 演算法基於排列和置換運算。排列是對數據重新進行安排,置換是將一個數據單元替換為另一個。AES 使用幾種不同的方法來執行排列和置換運算。
2、非對稱演算法
常見的非對稱加密演算法如下:
RSA:由 RSA 公司發明,是一個支持變長密鑰的公共密鑰演算法,需要加密的文件塊的長度也是可變的;
DSA(Digital Signature Algorithm):數字簽名演算法,是一種標準的 DSS(數字簽名標准);
ECC(Elliptic Curves Cryptography):橢圓曲線密碼編碼學。
演算法原理——橢圓曲線上的難題
橢圓曲線上離散對數問題ECDLP定義如下:給定素數p和橢圓曲線E,對Q=kP,在已知P,Q 的情況下求出小於p的正整數k。可以證明由k和P計算Q比較容易,而由Q和P計算k則比較困難。
將橢圓曲線中的加法運算與離散對數中的模乘運算相對應,將橢圓曲線中的乘法運算與離散對數中的模冪運算相對應,我們就可以建立基於橢圓曲線的對應的密碼體制。

6. 加密技術02-對稱加密-AES原理

AES 全稱 Advanced Encryption Standard(高級加密標准)。它的出現主要是為了取代 DES 加密演算法的,因為 DES 演算法的密鑰長度是 56 位,因此演算法的理論安全強度是 2^56。但二十世紀中後期正是計算機飛速發展的階段,元器件製造工藝的進步使得計算機的處理能力越來越強,所以還是不能滿足人們對安全性的要求。於是 1997 年 1 月 2 號,美國國家標准技術研究所宣布希望徵集高級加密標准,用以取代 DES。AES 也得到了全世界很多密碼工作者的響應,先後有很多人提交了自己設計的演算法。最終有5個候選演算法進入最後一輪:Rijndael,Serpent,Twofish,RC6 和 MARS。最終經過安全性分析、軟硬體性能評估等嚴格的步驟,Rijndael 演算法獲勝。

AES 密碼與分組密碼 Rijndael 基本上完全一致,Rijndael 分組大小和密鑰大小都可以為 128 位、192 位和 256 位。然而 AES 只要求分組大小為 128 位,因此只有分組長度為 128 位的 Rijndael 才稱為 AES 演算法。本文只對分組大小 128 位,密鑰長度也為 128 位的 Rijndael 演算法進行分析。密鑰長度為 192 位和 256 位的處理方式和 128 位的處理方式類似,只不過密鑰長度每增加 64 位,演算法的循環次數就增加 2 輪,128 位循環 10 輪、192 位循環 12 輪、256 位循環 14 輪。

給定一個 128 位的明文和一個 128 位的密鑰,輸出一個 128 位的密文。這個密文可以用相同的密鑰解密。雖然 AES 一次只能加密 16 個位元組,但我們只需要把明文劃分成每 16 個位元組一組的塊,就可以實現任意長度明文的加密。如果明文長度不是 16 個位元組的倍數,則需要填充,目前填充方式主要是 PKCS7 / PKCS5。

下來主要分析 16 個位元組的加解密過程,下圖是 AES 演算法框架。

密鑰生成流程

G 函數

關於輪常量的生成下文會介紹。

主要作用:一是增加密鑰編排中的非線性;二是消除AES中的對稱性。這兩種屬性都是抵抗某些分組密碼攻擊必要的。

接下來詳細解釋一下幾個關鍵步驟。

明文矩陣和當前回次的子密鑰矩陣進行異或運算。

位元組代換層的主要功能是通過 S 盒完成一個位元組到另外一個位元組的映射。

依次遍歷 4 * 4 的明文矩陣 P 中元素,元素高四位值為行號,低四位值為列號,然後在 S 盒中取出對應的值。

行位移操作最為簡單,它是用來將輸入數據作為一個 4 * 4 的位元組矩陣進行處理的,然後將這個矩陣的位元組進行位置上的置換。ShiftRows 子層屬於 AES 手動的擴散層,目的是將單個位上的變換擴散到影響整個狀態當,從而達到雪崩效應。它之所以稱作行位移,是因為它只在 4 * 4 矩陣的行間進行操作,每行 4 位元組的數據。在加密時,保持矩陣的第一行不變,第二行向左移動 1 個位元組、第三行向左移動 2 個位元組、第四行向左移動 3 個位元組。

列混淆層是 AES 演算法中最為復雜的部分,屬於擴散層,列混淆操作是 AES 演算法中主要的擴散元素,它混淆了輸入矩陣的每一列,使輸入的每個位元組都會影響到 4 個輸出位元組。行位移層和列混淆層的組合使得經過三輪處理以後,矩陣的每個位元組都依賴於 16 個明文位元組成可能。其實質是在有限域 GF(2^8) 上的多項式乘法運算,也稱伽羅瓦域上的乘法。

伽羅瓦域

伽羅瓦域上的乘法在包括加/解密編碼和存儲編碼中經常使用,AES 演算法就使用了伽羅瓦域 GF(2^8) 中的運算。以 2^n 形式的伽羅瓦域來說,加減法都是異或運算,乘法相對較復雜一些,下面介紹 GF(2^n) 上有限域的乘法運算。

本原多項式: 域中不可約多項式,是不能夠進行因子分解的多項式,本原多項式是一種特殊的不可約多項式。當一個域上的本原多項式確定了,這個域上的運算也就確定了,本原多項式一般通過查表可得,同一個域往往有多個本原多項式。通過將域中的元素化為多項式的形式,可以將域上的乘法運算轉化為普通的多項式乘法模以本原多項式的計算。比如 g(x) = x^3+x+1 是 GF(2^3) 上的本原多項式,那麼 GF(2^3) 域上的元素 3*7 可以轉化為多項式乘法:

乘二運算: 無論是普通計算還是伽羅瓦域上運算,乘二計算是一種非常特殊的運算。普通計算在計算機上通過向高位的移位計算即可實現,伽羅瓦域上乘二也不復雜,一次移位和一次異或即可。從多項式的角度來看,伽羅瓦域上乘二對應的是一個多項式乘以 x,如果這個多項式最高指數沒有超過本原多項式最高指數,那麼相當於一次普通計算的乘二計算,如果結果最高指數等於本原多項式最高指數,那麼需要將除去本原多項式最高項的其他項和結果進行異或。

比如:GF(2^8)(g(x) = x^8 + x^4 + x^3 + x^2 + 1)上 15*15 = 85 計算過程。

15 寫成生成元指數和異或的形式 2^3 + 2^2 + 2^1 + 1,那麼:

乘二運算計算過程:

列混淆 :就是把兩個矩陣的相乘,裡面的運算,加法對應異或運算,乘法對應伽羅瓦域 GF(2^8) 上的乘法(本原多項式為:x^8 + x^4 + x^3 + x^1 + 1)。

Galois 函數為伽羅瓦域上的乘法。

解碼過程和 DES 解碼類似,也是一個逆過程。基本的數學原理也是:一個數進行兩次異或運算就能恢復,S ^ e ^ e = S。

密鑰加法層

通過異或的特性,再次異或就能恢復原數。

逆Shift Rows層

恢復 Shift Rows層 的移動。

逆Mix Column層

通過乘上正矩陣的逆矩陣進行矩陣恢復。

一個矩陣先乘上一個正矩陣,然後再乘上他的逆矩陣,相當於沒有操作。

逆位元組代換層

通過再次代換恢復位元組代換層的代換操作。

比如:0x00 位元組的置換過程

輪常量生成規則如下:

演算法原理和 AES128 一樣,只是每次加解密的數據和密鑰大小為 192 位和 256 位。加解密過程幾乎是一樣的,只是循環輪數增加,所以子密鑰個數也要增加,最後輪常量 RC 長度增加。

7. 常見的加密演算法、原理、優缺點、用途

在安全領域,利用密鑰加密演算法來對通信的過程進行加密是一種常見的安全手段。利用該手段能夠保障數據安全通信的三個目標:

而常見的密鑰加密演算法類型大體可以分為三類:對稱加密、非對稱加密、單向加密。下面我們來了解下相關的演算法原理及其常見的演算法。

在加密傳輸中最初是採用對稱密鑰方式,也就是加密和解密都用相同的密鑰。

1.對稱加密演算法採用單密鑰加密,在通信過程中,數據發送方將原始數據分割成固定大小的塊,經過密鑰和加密演算法逐個加密後,發送給接收方

2.接收方收到加密後的報文後,結合解密演算法使用相同密鑰解密組合後得出原始數據。

圖示:

非對稱加密演算法採用公鑰和私鑰兩種不同的密碼來進行加解密。公鑰和私鑰是成對存在,公鑰是從私鑰中提取產生公開給所有人的,如果使用公鑰對數據進行加密,那麼只有對應的私鑰(不能公開)才能解密,反之亦然。N 個用戶通信,需要2N個密鑰。

非對稱密鑰加密適合對密鑰或身份信息等敏感信息加密,從而在安全性上滿足用戶的需求。

1.甲使用乙的公鑰並結合相應的非對稱演算法將明文加密後發送給乙,並將密文發送給乙。
2.乙收到密文後,結合自己的私鑰和非對稱演算法解密得到明文,得到最初的明文。

圖示:

單向加密演算法只能用於對數據的加密,無法被解密,其特點為定長輸出、雪崩效應(少量消息位的變化會引起信息摘要的許多位變化)。

單向加密演算法常用於提取數據指紋,驗證數據的完整性、數字摘要、數字簽名等等。

1.發送者將明文通過單向加密演算法加密生成定長的密文串,然後傳遞給接收方。

2.接收方將用於比對驗證的明文使用相同的單向加密演算法進行加密,得出加密後的密文串。

3.將之與發送者發送過來的密文串進行對比,若發送前和發送後的密文串相一致,則說明傳輸過程中數據沒有損壞;若不一致,說明傳輸過程中數據丟失了。

圖示:

MD5、sha1、sha224等等

密鑰交換IKE(Internet Key Exchange)通常是指雙方通過交換密鑰來實現數據加密和解密

常見的密鑰交換方式有下面兩種:

將公鑰加密後通過網路傳輸到對方進行解密,這種方式缺點在於具有很大的可能性被攔截破解,因此不常用

DH演算法是一種密鑰交換演算法,其既不用於加密,也不產生數字簽名。

DH演算法通過雙方共有的參數、私有參數和演算法信息來進行加密,然後雙方將計算後的結果進行交換,交換完成後再和屬於自己私有的參數進行特殊演算法,經過雙方計算後的結果是相同的,此結果即為密鑰。

如:

安全性

在整個過程中,第三方人員只能獲取p、g兩個值,AB雙方交換的是計算後的結果,因此這種方式是很安全的。

答案:使用公鑰證書

公鑰基礎設施是一個包括硬體、軟體、人員、策略和規程的集合

用於實現基於公鑰密碼機制的密鑰和證書的生成、管理、存儲、分發和撤銷的功能

簽證機構CA、注冊機構RA、證書吊銷列表CRL和證書存取庫CB。

公鑰證書是以數字簽名的方式聲明,它將公鑰的值綁定到持有對應私鑰的個人、設備或服務身份。公鑰證書的生成遵循X.509協議的規定,其內容包括:證書名稱、證書版本、序列號、演算法標識、頒發者、有效期、有效起始日期、有效終止日期、公鑰 、證書簽名等等的內容。

1.客戶A准備好要傳送的數字信息(明文)。(准備明文)

2.客戶A對數字信息進行哈希(hash)運算,得到一個信息摘要。(准備摘要)

3.客戶A用CA的私鑰(SK)對信息摘要進行加密得到客戶A的數字簽名,並將其附在數字信息上。(用私鑰對數字信息進行數字簽名)

4.客戶A隨機產生一個加密密鑰(DES密鑰),並用此密鑰對要發送的信息進行加密,形成密文。 (生成密文)

5.客戶A用雙方共有的公鑰(PK)對剛才隨機產生的加密密鑰進行加密,將加密後的DES密鑰連同密文一起傳送給乙。(非對稱加密,用公鑰對DES密鑰進行加密)

6.銀行B收到客戶A傳送過來的密文和加過密的DES密鑰,先用自己的私鑰(SK)對加密的DES密鑰進行解密,得到DES密鑰。(用私鑰對DES密鑰解密)

7.銀行B然後用DES密鑰對收到的密文進行解密,得到明文的數字信息,然後將DES密鑰拋棄(即DES密鑰作廢)。(解密文)

8.銀行B用雙方共有的公鑰(PK)對客戶A的數字簽名進行解密,得到信息摘要。銀行B用相同的hash演算法對收到的明文再進行一次hash運算,得到一個新的信息摘要。(用公鑰解密數字簽名)

9.銀行B將收到的信息摘要和新產生的信息摘要進行比較,如果一致,說明收到的信息沒有被修改過。(對比信息摘要和信息)

答案是沒法保證CA的公鑰沒有被篡改。通常操作系統和瀏覽器會預制一些CA證書在本地。所以發送方應該去那些通過認證的CA處申請數字證書。這樣是有保障的。

但是如果系統中被插入了惡意的CA證書,依然可以通過假冒的數字證書發送假冒的發送方公鑰來驗證假冒的正文信息。所以安全的前提是系統中不能被人插入非法的CA證書。

END

8. 對稱加密演算法的工作原理、作用及其流程圖

對稱加密的核心——通信雙方共享一個密鑰


通信過程:

A有明文m,使用加密演算法E,密鑰key,生成密文c=E(key,m);

B收到密文c,使用解密演算法D,密鑰key,得到明文m=D(key,c);

比喻:

對稱加密是最直觀,也是歷史最久遠的加密手段,類似於加鎖和解鎖,只不過鑰匙的個數非常多(~~2^100),一個人窮其一生也試不完所有可能的鑰匙。

9. 密碼學基礎(二):對稱加密

加密和解密使用相同的秘鑰稱為對稱加密。

DES:已經淘汰
3DES:相對於DES有所加強,但是仍然存在較大風險
AES:全新的對稱加密演算法。

特點決定使用場景,對稱加密擁有如下特點:

速度快,可用於頻率很高的加密場景。

使用同一個秘鑰進行加密和解密。

可選按照128、192、256位為一組的加密方式,加密後的輸出值為所選分組位數的倍數。密鑰的長度不同,推薦加密輪數也不同,加密強度也更強。

例如:
AES加密結果的長度由原字元串長度決定:一個字元為1byte=4bit,一個字元串為n+1byte,因為最後一位為'',所以當字元串長度小於等於15時,AES128得到的16進制結果為32位,也就是32 4=128byte,當長度超過15時,就是64位為128 2byte。

因為對稱加密速度快的特點,對稱加密被廣泛運用在各種加密場所中。但是因為其需要傳遞秘鑰,一旦秘鑰被截獲或者泄露,其加密就會玩完全破解,所以AES一般和RSA一起使用。

因為RSA不用傳遞秘鑰,加密速度慢,所以一般使用RSA加密AES中鎖使用的秘鑰後,再傳遞秘鑰,保證秘鑰的安全。秘鑰安全傳遞成功後,一直使用AES對會話中的信息進行加密,以此來解決AES和RSA的缺點並完美發揮兩者的優點,其中相對經典的例子就是HTTPS加密,後文會專門研究。

本文針對ECB模式下的AES演算法進行大概講解,針對每一步的詳細演算法不再該文討論范圍內。

128位的明文被分成16個位元組的明文矩陣,然後將明文矩陣轉化成狀態矩陣,以「abcdefghijklmnop」的明文為例:

同樣的,128位密鑰被分成16組的狀態矩陣。與明文不同的是,密文會以列為單位,生成最初的4x8x4=128的秘鑰,也就是一個組中有4個元素,每個元素由每列中的4個秘鑰疊加而成,其中矩陣中的每個秘鑰為1個位元組也就是8位。

生成初始的w[0]、w[1]、w[2]、w[3]原始密鑰之後,通過密鑰編排函數,該密鑰矩陣被擴展成一個44個組成的序列W[0],W[1], … ,W[43]。該序列的前4個元素W[0],W[1],W[2],W[3]是原始密鑰,用於加密運算中的初始密鑰加,後面40個字分為10組,每組4個32位的欄位組成,總共為128位,分別用於10輪加密運算中的輪密鑰加密,如下圖所示:

之所以把這一步單獨提出來,是因為ECB和CBC模式中主要的區別就在這一步。

ECB模式中,初始秘鑰擴展後生成秘鑰組後(w0-w43),明文根據當前輪數取出w[i,i+3]進行加密操作。

CBC模式中,則使用前一輪的密文(明文加密之後的值)和當前的明文進行異或操作之後再進行加密操作。如圖所示:

根據不同位數分組,官方推薦的加密輪數:

輪操作加密的第1輪到第9輪的輪函數一樣,包括4個操作:位元組代換、行位移、列混合和輪密鑰加。最後一輪迭代不執行列混合。

當第一組加密完成時,後面的組循環進行加密操作知道所有的組都完成加密操作。

一般會將結果轉化成base64位,此時在iOS中應該使用base64編碼的方式進行解碼操作,而不是UTF-8。

base64是一種編碼方式,常用語傳輸8bit位元組碼。其編碼原理如下所示:

將原數據按照3個位元組取為一組,即為3x8=24位

將3x8=24的數據分為4x6=24的數據,也就是分為了4組

將4個組中的數據分別在高位補上2個0,也就成了8x4=32,所以原數據增大了三分之一。

根據base64編碼表對數據進行轉換,如果要編碼的二進制數據不是3的倍數,最後會剩下1個或2個位元組怎麼辦,Base64用x00位元組在末尾補足後,再在編碼的末尾加上1個或2個=號,表示補了多少位元組,解碼的時候,會自動去掉。

舉個栗子:Man最後的結果就是TWFu。

計算機中所有的數據都是以0和1的二進制來存儲,而所有的文字都是通過ascii表轉化而來進而顯示成對應的語言。但是ascii表中存在許多不可見字元,這些不可見字元在數據傳輸時,有可能經過不同硬體上各種類型的路由,在轉義時容易發生錯誤,所以規定了64個可見字元(a-z、A-Z、0-9、+、/),通過base64轉碼之後,所有的二進制數據都是可見的。

ECB和CBC是兩種加密工作模式。其相同點都是在開始輪加密之前,將明文和密文按照128/192/256進行分組。以128位為例,明文和密文都分為16組,每組1個位元組為8位。

ECB工作模式中,每一組的明文和密文相互獨立,每一組的明文通過對應該組的密文加密後生成密文,不影響其他組。

CBC工作模式中,後一組的明文在加密之前先使用前一組的密文進行異或運算後再和對應該組的密文進行加密操作生成密文。

為簡單的分組加密。將明文和密文分成若干組後,使用密文對明文進行加密生成密文
CBC

加密:

解密:

10. 哪位大神能給我講講DES的原理和步驟,

DES的基本原理是:(傳統的)循環(迭代)移位法進行信息位的替換/交換,打亂原信息(數據)位的順序從而達到信息加密的目的。

DES 的加密方法是:使用一個 56 位的密鑰以及附加的 8 位奇偶校驗位,產生最大 64 位的分組大小。這是一個迭代的分組密碼,使用稱為 Feistel 的技術,其中將加密的文本塊分成兩半。使用子密鑰對其中一半應用循環功能,然後將輸出與另一半進行「異或」運算;接著交換這兩半,這一過程會繼續下去,但最後一個循環不交換。DES 使用 16 個循環,使用異或,置換,代換,移位操作四種基本運算。

例如它採用下面的置換表對數據進行置換:

58,50,42,34,26,18,10,2,60,52,44,36,28,20,12,4,62,54,46,38,30,22,14,6,64,56,48,40,32,24,16,8,57,49,41,33,25,17,9,1,59,51,43,35,27,19,11,3,61,53,45,37,29,21,13,5,63,55,47,39,31,23,15,7,

即將輸入的第58位換到第一位,第50位換到第2位,...,依此類推,最後一位是原來的第7位。

同時用置換表把輸入的64位數據塊按位重新組合,並把輸出分為L0、R0兩部分,每部分各長32位。L0、R0則是換位輸出後的兩部分,L0是輸出的左32位,R0 是右32位,例:設置換前的輸入值為D1D2D3......D64,則經過初始置換後的結果為:L0=D58D50...D8;R0=D57D49...D7。

然後以同樣置換方式進行多次的迭代,比如說16次迭代,得出L16,R16組成的數列密文的輸出。

接收方只要用同樣置換表進行逆變換即可解密出原文。

閱讀全文

與對稱加密演算法原理和過程相關的資料

熱點內容
華為雲伺服器登錄密碼和賬號 瀏覽:152
中世紀java程序員 瀏覽:786
什麼開發引擎使用python 瀏覽:176
sh腳本運行命令 瀏覽:316
廣聯達加密鎖怎麼看到期 瀏覽:172
cad軌跡命令 瀏覽:979
同事刷到女程序員自媒體視頻 瀏覽:571
校驗演算法的缺點是什麼 瀏覽:717
PHP商品分類功能實現 瀏覽:330
php取字元串中間 瀏覽:431
程序員經常用工具 瀏覽:836
降服主力指標源碼主圖 瀏覽:502
python實用庫 瀏覽:692
電腦默認7個文件夾 瀏覽:11
新唐單片機安裝c51後編譯錯誤 瀏覽:532
紅包源碼引流神器 瀏覽:235
學生初中畢業撕書解壓 瀏覽:748
命令方塊刷銅點教學 瀏覽:691
php郵件訂閱系統 瀏覽:998
柱樑底加密箍間距 瀏覽:31