五分鐘為你梳理對稱加密體系

五分鐘為你梳理對稱加密體系

資料洩露事件頻繁被曝光,還有很多很多大大小小沒有被公佈的安全事件,都說明了資料加密和保護的重要性。只要有收集或者儲存客戶資料行為的產品,都需要做好安全保密工作,而且加密不僅僅是因為保護使用者隱私,更是法律法規的要求,不得不做。今天就來梳理對稱加密體系——一種最簡單快速的加密。

五分鐘為你梳理對稱加密體系

對稱加密體系

什麼是對稱加密:

同一個金鑰可以同時用來對資訊進行加密和解密操作,這種加密方法稱為對稱加密,也稱為單金鑰加密。資料傳送方將明文

原始資料

和加密

金鑰

一起經過特殊加密演算法處理後,使其變成複雜的加密密文傳送出去。接收方收到密文後,若想解讀,則需要使用加密用過的金鑰及相同演算法的逆演算法對密文進行解密,才能使其恢復成可讀明文。在對稱加密演算法中,使用的金鑰只有一個,收發雙方都使用這個金鑰對該條資料進行加密和解密。

對稱加密演算法的優劣:

對稱加密演算法的特點是計算量小、加密速度快、加密效率高,適合對大量資料進行加密的場景。

不足之處是,交易雙方都使用同樣金鑰,所以對稱加密的安全性就不僅僅取決於加密演算法本身,更取決於金鑰是否被安全的保管和傳輸,因此加密傳送方如何把金鑰安全地傳遞到解密接收方手中,才是對稱加密面臨的關鍵問題。

此外,每對使用者每次使用對稱加密演算法時,都需要使用其他人不知道的惟一金鑰,這會使得發收信雙方所擁有的鑰匙數量呈幾何級數增長,金鑰管理成為使用者的負擔。

一般原理

舉個生活中的簡單例子來簡要說明一下對稱加密的工作過程。甲和乙是一對生意夥伴,他們住在不同的城市。由於生意上的需要,他們經常會相互之間郵寄重要的貨物。為了保證貨物的安全,他們商定為每次需要配送的貨物打造一個保險箱,將貨物放入保險箱中,併為保險箱打造兩把相同的鑰匙分別保管,這樣一人可以在郵寄貨物前用這把鑰匙鎖上保險箱,另一人在收到包裹時用這個鑰匙可開啟保險箱。同時如果甲有了新的生意夥伴丙,為了防止貨物被盜取,他和丙會製作不同的保險箱,同時打造跟甲乙之前使用的鑰匙不同的鑰匙來對保險箱上鎖和開鎖。

在這個簡單的例子中,鑰匙就相當於雙方用於加解密的金鑰,每次配送的貨物就可類比於每條訊息包,這個例子同時也說明了,每隊使用者每次使用對稱加密演算法,都需要使用其他人不知道的唯一金鑰,這會使得收、發雙方所擁有的鑰匙數量巨大,金鑰管理成為雙方的負擔。

上面是一個將重要資源安全傳遞到目的地的傳統方式,只要甲乙丙小心保管好鑰匙,那麼就算有人得到保險箱,也無法開啟保險箱竊取貨物。這個思想被用到了通訊過程的資訊加密中。在對稱加密中,資料傳送方將明文(原始資料)和加密金鑰一起經過特殊加密演算法處理後,使其變成複雜的加密密文傳送出去。接收方收到密文後,若想解讀原文,則需要使用相同的加密金鑰及相同演算法的逆演算法對密文進行解密,才能使其恢復成可讀明文。

對稱加密演算法的前世今生

按照原理不同,對稱加密可以大體分成流加密和分組加密兩種型別。

流加密

流加密是將明文按字元逐位地,對應地進行加密的一類對稱密碼演算法。流加密中最有名的演算法是RC4和GSM。流加密演算法相對簡單,明文和金鑰按位對其做約定的運算,即可獲得密文。

加密過程:首先生成一個對稱秘鑰,使用使用者公鑰加密這個對稱秘鑰後儲存在檔案頭,然後用生成的對稱秘鑰加密檔案資料儲存。

解密過程:首先使用自己的私鑰解密被加密的對稱秘鑰,再用該對稱秘鑰解密出資料原文。

最簡單的模型是異或流加密例如:

五分鐘為你梳理對稱加密體系

由於流加密原理簡單,其演算法結構存在弱點,如果金鑰流又多次重複使用,只要洩露區域性明文,攻擊者很容易算出金鑰。另外,由於是按位進行加密,攻擊者即使對資料進行篡改,也不會破壞原有資料結構,接收者很難發現其中變化。

因此流加密雖然是一種快捷高效的加密方法,但其安全性較低,不建議使用者使用流加密對關鍵資訊進行加密。

流加密

分組密碼是將明文訊息編碼表示後的數字(簡稱明文數字)序列,劃分成長度為n的組(可看成長度為n的向量),每組分別在金鑰的控制下變換成等長的輸出數字(簡稱密文數字)序列。

現代分組密碼的研究始於20世紀70年代中期,至今已有40餘年歷史,這期間人們在這一研究領域已經取得了豐碩的研究成果。

對於分組密碼,在早期的研究,基本上是圍繞DES進行的,推出了一些類似的演算法,例如:LOKI,FEAL,GOST等。

分組加密內部實現則複雜得多,每一個加密塊都會經歷至少16輪運算,其代表演算法有DES和AES。目前推薦使用AES,DES已經不在安全。

分組加密

DES是較早時期的對稱加密標準,在當時得到了廣泛的應用。隨著計算機效能地不斷提高,暴力破解DES變得越來越容易。所以DES已經不再安全,近十多年已逐漸被3DES和AES代替。

DES核心主要分成初始置換、輪函式、逆置換三步。

DES

把輸入的64位資料塊按位重新組合,並把輸出分為L0、R0兩部分,每部分長32位,其置換規則為將輸入的第58位換到第1位,第50位換到第2位……依此類推,最後一位是原來的第7位。L0、R0則是換位輸出後的兩部分,L0是輸出的左32位,R0是右32位,其置換規則見下表:

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,

初始置換:

DES 使用一個 56 位的金鑰以及附加的 8 位奇偶校驗位(每組的第8位作為奇偶校驗位),產生最大 64 位的分組大小。這是一個迭代的分組密碼,使用稱為 Feistel 的技術,其中將加密的文字塊分成兩半。使用子金鑰對其中一半應用迴圈功能,然後將輸出與另一半進行“異或”運算;接著交換這兩半,這一過程會繼續下去,但最後一個迴圈不交換。

輪函式:

DES 使用 16 輪迴圈,使用異或、置換、代換、移位操作四種基本運算。最後經過16次迭代運算後,得到L16、R16,將此作為輸入進行逆置換,逆置換正好是初始置換的逆運算,由此即得到密文輸出,解密過程則是整套加密過程的逆運算。

逆置換:

AES的誕生是為了替代原先的DES,它已經被多方分析論證,在全世界範圍廣泛使用,近十年,AES已然成為對稱金鑰加密中最流行的演算法之一。不同於它的前任標準DES,AES使用的是代換-置換(SP)網路,而非Feistel架構,SP網路從理論上給出了最大差分特徵機率和最佳線性逼近優勢的界,證明了密碼對差分密碼分析和線性密碼分析的安全性。

大多數AES計算是在一個特別的有限域內完成的,加密過程是在一個4×4的位元組矩陣上運作,這個矩陣又稱為“狀態(state)”,其初值就是一個明文區塊(矩陣中一個元素大小就是明文區塊中的一個Byte)。加密時,各輪AES加密迴圈(除最後一輪外)均包含4個步驟:

AddRoundKey——矩陣中的每一個位元組都與該次輪金鑰(round key)做XOR運算;每個子金鑰由金鑰生成方案產生。

SubBytes——透過一個非線性的替換函式,用查詢表的方式把每個位元組替換成對應的位元組。

ShiftRows——將矩陣中的每個橫列進行迴圈式移位。

MixColumns ——為了充分混合矩陣中各個直行的操作。這個步驟使用線性轉換來混合每列的四個位元組。最後一個加密迴圈中省略MixColumns步驟,以另一個ddRoundKey取代。

國家商用密碼是如何實現的

商用密碼的應用領域十分廣泛,主要用於對不涉及國家秘密內容但又具有敏感性的內部資訊、行政事務資訊、經濟資訊等進行加密保護。比如:商用密碼可用於企業門禁管理、企業內部的各類敏感資訊的傳輸加密、儲存加密,防止非法第三方獲取資訊內容;也可用於各種安全認證、網上銀行、數字簽名等。

AES

2006年我國公佈了無線網路中使用的SM4密碼演算法。這是我國第一次公佈自己的商用密碼演算法。

五分鐘為你梳理對稱加密體系

SM4演算法整體結構

國際的DES演算法和國產的SM4演算法的目的都是為了加密保護靜態儲存和傳輸通道中的資料,主要特性如下:

五分鐘為你梳理對稱加密體系

從演算法上看,國產SM4演算法在計算過程中增加非線性變換,理論上能大大提高其演算法的安全性,並且由專業機構進行了密碼分析,民間也對21輪SM4進行了差分密碼分析,結論均為安全性較高。

綜合以上分析,國內一款即時通訊系統安司源密信就採用了高強度的對稱加密演算法SM4,對個人產生的資料、傳輸的IM訊息和附件、伺服器儲存的資料進行有效的加密處理,有效提高了資料在網路傳輸過程中的安全性、終端和伺服器上儲存的安全性,實現了業務資料的端到端加密。