1. 程式人生 > >密碼學01--密碼學常識

密碼學01--密碼學常識

目錄

1.為什麼要加密

2.加密三要素

2.1 資料

2.2 金鑰

2.3 密碼演算法

3.加密方式

4.最早的加密--凱撒密碼

5.密碼資訊保安常識與威脅

6.對稱加密演算法

6.1 編解碼

6.2 對稱加密演算法常見三種方式

6.2.1 DES(data encryption stardards)

6.2.2 三DES(triple-data encryption stardards)

6.2.3 AES(本名Rijndael加密,Advanced encryption stardards)

6.3 分組密碼模式

6.3.1 分組密碼結構填充問題

6.3.2 ECB(electronic code book)

6.3.3 CBC(cipher block chaining)

6.3.4 CFB(cipher feedback)

6.3.5 OFB(output feedback)

6.3.6 CTR(counter)

1.為什麼要加密

保證資料的安全傳輸。

2.加密三要素

2.1 資料

加密中涉及到的資料有明文和密文兩種,其中

  • 明文:原始資料
  • 祕文:加密後的資料(一般不具備可閱讀性)

2.2 金鑰

金鑰會根據加密方式的不同而呈現為不同的狀態,通常情況下加密方式存在【對稱加密】和【非對稱加密】兩種。簡單說來可以這麼理解:負責對資料加密和解密的金鑰是同一個東西,稱為對稱加密。而負責加密資料的公鑰和負責解密資料的私鑰不是同一個東西,稱為非對稱加密。

  • 對稱加密:金鑰
  • 非對稱加密:公鑰+私鑰。

對於非對稱加密而言公鑰和私鑰通常同時生成,但是公鑰只負責用來加密資料因此隨意公開丟失也無所謂。但是私鑰卻是負責用來解密資料的關鍵,因此私鑰一般都是獨立儲存不輕易展示給別人。

2.3 密碼演算法

密碼演算法通常包括加密演算法和解密演算法兩類,每一種不同的加密方式的演算法也是天差地別。其中加密演算法和解密演算法通常不一致,但一般情況下都是互逆的。

對稱加密過程:
---------------------------
明文字體:666
金鑰:999
加密演算法:密文 = 明文字體+金鑰
###########################
最終生成密文:1665


對稱解密過程:
---------------------------
密文:1665
金鑰:999
解密演算法:明文字體 = 密文-金鑰
###########################
最終生成明文字體:666

3.加密方式

4.最早的加密--凱撒密碼

凱撒密碼是通過將明文中所使用的字母表按照一定的字數平移來進行加密的方法。

凱撒密碼中的加密三要素:

  • 【明文:小寫字母序列 】|【密文:平移生成的大寫字母序列】
  • 金鑰:平移數字n
  • 演算法:加密+n   解密-n

相對比較原始,不安全

5.密碼資訊保安常識與威脅

(1)不要使用保密的密碼演算法

  • 密碼演算法的祕密早晚都會公諸於世
  • 開發高強度的密碼演算法是非常困難的

(2)使用低強度的密碼比不進行任何加密更加危險

(3)任何密碼總有一天都會被破解,而密碼只是資訊保安的一部分。

6.對稱加密演算法

6.1 編解碼

  • 編碼:字元序列 轉換為 bit序列
  • 解碼:big序列 還原為 字元序列

6.2 對稱加密演算法常見三種方式

6.2.1 DES(data encryption stardards)

  • 金鑰結構:56bit金鑰+8bit錯誤檢查
  • 加密方式:對明文bit序列按照64bit為一個單位(一組)進行加密。這個金鑰長度有一個專業名詞被稱為【分組】
  • 解密方式:對密文bit序列按照64bit為一個單位(一組)進行解密。
  • 加密說明:des一次加密內容長度只能是64bit,所以如果明文過長就需要對des進行反覆迭代。迭代的具體方式被稱為【模式】。
  • 安全效能:已被破解,不安全
  • 補充說明:分組密碼是指以分組位單位進行處理的密碼演算法稱為【blockcipher分組密碼】,des就是分組密碼的一種。

6.2.2 三DES(triple-data encryption stardards)

  • 金鑰結構:(56bit金鑰+8錯誤檢查)* 3
  • 加密方式:對明文bit序列按照64bit*3位一個單位(一組)進行加密。明文(金鑰1加密->金鑰2解密->金鑰3加密)得到密文
  • 解密方式:對密文bit序列按照64bit*3位一個單位(一組)進行解密。密文(金鑰3解密->金鑰2加密->金鑰1解密)得到明文
  • 相容方式:由於當3Des的三個金鑰完全相同時與des完全一致,因此可以向下相容
  • 安全效能:面臨被破解,暫時安全,但效率較低
  • 安全原因:3Des的三個金鑰不知道究竟是否一樣,哪一個金鑰執行哪一個操作並不確定,因此大大增加安全性。
  • 額外說明:如果金鑰1和金鑰3相同,金鑰2不同,那麼稱為DES-EDE2(Encryption-Decryption-Encryption)                                              
  •                     如果金鑰1、金鑰2和金鑰3豆不同,那麼稱為DES-EDE3(Encryption-Decryption-Encryption)

6.2.3 AES(本名Rijndael加密,Advanced encryption stardards)

  • 金鑰結構:以32bit為單位,在128到156之間進行選擇(其實就是128、192、256三種)。
  • 金鑰說明:由於go語言提供的函式介面只提供了16位元組,即128bit引數規格,所以我們只能以128位金鑰為標準使用。
  • 分組說明:AES的分組長度為128bit。
  • 加密方式:
一輪加密:
    先把128分組bit內容進行逐bit替換,即SubBytes處理
        SubBytes處理:以每個位元組的值(0~255中的任意值)為索引,
        從一張擁有256個值的替換表(s-box)中查找出對應值的處理。
        所以SubBytes在替換的時候內部又是以8bit為一組進行的替換
    然後對替換後的bit結構進行平移,即shiftRows處理
        ShiftRows處理:類似於凱撒密碼的平移,但更繁瑣一些
    然後對整個平移後的bit結構進行列混淆(亂序),即MixColumns處理
        MixColumns處理:對一個4位元組進行運算使其變成另一個4位元組內容的計算處理
        所以MixColumns在運算的時候內部是以32bit為一組進行計算
    最後對得到的bit結構通過輪金鑰進行XOR加密,即AddRoundKey處理:
        AddRoundKey:逐位與輪金鑰異或操作。
然後重複上述一輪操作10~14次,得到最終加密內容。
  • 解密方式:上述步驟反向操作
  • 安全效能:極高,以目前裝置效能對一條128bitAES加密內容的暴力拆解需要耗時近10億年

6.3 分組密碼模式

前文中提到分組密碼是需要按照金鑰規律對明文進行分組進行加密的(例如DES),而如何分組就是一個比較需要考慮的問題。因為如果分組模式不恰當會導致加密後的資料規律能夠被識別出來,例如EBC下的加密內容就能夠被識別出一些規律。當下比較常見的分組密碼模式有五種:ECB、CBC、CFB、OFB、CTR

  • ECB模式:Electronic Code Book mode(電子密碼本模式)
  • CBC模式:Cipher Block Chaining mode(密碼分組連結模式)
  • CFB模式:Cipher FeedBack mode(密文反饋模式)
  • OFB模式:Output FeedBack mode(輸出反饋模式)
  • CTR模式:CounTeR mode(計數器模式)

6.3.1 分組密碼結構填充問題

因為加密內容的長度不是總能夠被分組長度(一個分組的bit數稱為分組長度)恰好整除,例如按照一組8bit來拆分801bit的資料就必然產生一個bit的餘數,因此資料在進行加密之前必須存在結構填充操作。一般情況下對於資料中最後一個分組採用 “缺幾補幾” 的方法進行內容填充,而對於剛好能整除金鑰長度的原始資料則補充一整個分組長度的資料。

在分組模式中,ECB和CBC都需要填充長度,而CFB、OFB和CTR則不需要填充長度。

6.3.2 ECB(electronic code book)

  • 模式說明:分組加密
  • 模式特點:簡單、高效率、密文有規律容易被攻破,最後一個明文分組必須結構填充
  • 模式補充:des/3des最後一個分組長度填充滿至8位元組,而aes 最後一個分組填充滿至16位元組(因為金鑰是16位元組長度)
  • 向量需求:不需要初始化向量

6.3.3 CBC(cipher block chaining)

  • 模式說明:用初始化向量和第一個分組異或後加密,然後得到的結果與第二個分組異或後加密,以此類推。
  • 模式優勢:初始化向量的多樣化能夠保證當初始化向量不同時,得到的加密結果一定不同。
  • 模式解析:解密過程是第一個分組解密後和初始化向量異或,然後第二個分組解密後和第一個分組異或,以此類推。
  • 模式特點:效率略低、密文無規律、不容易被破解,推薦使用。最後一個明文分組必須填充
  • 模式補充:des/3des 最後一個分組長度填充滿至8位元組,而aes 最後一個分組填充滿至16位元組
  • 向量需求:需要初始化向量
初始化向量由加密者提供
初始化向量長度 == 分組資料長度
加密與解密使用的是同一個初始化向量

6.3.4 CFB(cipher feedback)

  • 模式說明:先對初始化向量加密,然後和第一個分組明文異或的到密文。然後對密文加密後和第二個分組明文異或,以此類推。
  • 模式解析:解密過程是第一個分組與初始化向量加密異或,然後第二個分組與(第一個分組的加密)異或,以此類推
  • 模式特點:密文無規律,將初始化向量通過金鑰加密成金鑰流(位元流),再與明文分組異或
  • 模式補充:最後一個明文分組不需要填充(異或是不需要對應位數相同的,後面的OFB和CTR都是一個道理)
  • 向量需求:需要初始化向量
初始化向量由加密者提供
初始化向量長度 == 分組資料長度
加密與解密使用的是同一個初始化向量

6.3.5 OFB(output feedback)

  • 模式說明:先對初始化向量加密然後與第一個分組明文異或,然後對初始化向量加密結果再次加密再與第二個分組明文異或,以此類推
  • 模式解密:解密過程是第一個分組與初始化向量加密異或,然後第二個分組與初始化向量加密後的結果再次加密異或,以此類推
  • 模式特點:密文無規律,通過初始化向量藉助金鑰加密生成金鑰流
  • 模式補充:最後一個明文分組不需要填充
  • 向量需求:需要初始化向量
  • 特殊特點:金鑰流加密過程和異或過程是兩條不同的運算過程,因此金鑰流加密和異或可以併發執行,  相較於CFB速度快效率高。
初始化向量由加密者提供
初始化向量長度 == 分組資料長度
加密與解密使用的是同一個初始化向量

6.3.6 CTR(counter)

  • 模式說明:先使用計數器生成隨機數,然後與金鑰加密後和第一個分組明文異或。
  •        然後隨機數+1後再次與金鑰加密,加密後和第二個分組明文異或。以此類推。
  • 模式解密:解密過程是計數器生成隨機數,然後與金鑰加密後和第一個分組密文異或
  •                    然後隨機數+1後再次與金鑰加密,加密後和第二個分組密文異或。以此類推。
  • 模式特點:密文無規律,通過【計數器+隨機數】藉助金鑰加密生成金鑰流
  • 模式補充:最後一個明文分組不需要填充
  • 向量需求:不需要初始化向量,但需要計數器和隨機數
  • 特殊特點:切記異或的特徵,一次異或是加密,再次異或就能夠回到初始狀態。