密碼學基礎篇----密碼算法

凱撒密碼

凱撒密碼就是一種替換密碼,將字表中的一個字符用另一個字符替換,通過將當前字母平移 n 位後得到新的字符就完成了一次加密。
解密的話就在再平移回去就好了。看着就不安全,但這畢竟是早期的密碼算法。

在這裏插入圖片描述
在這裏插入圖片描述

詞頻就是每個字母使用的頻率,如下圖
在這裏插入圖片描述
我們可以看到其中字母E的使用頻率最高,所以我們先用E去嘗試
也就是說m=h, j=e, q=l, t=o,得到 hello 感覺沒毛病 繼續
後面得到 cryptography 翻譯一下 就是密碼學
所以 hello cryptography 你好密碼學。

轉子密碼機

隨着機械工藝和電子技術的發展以及電報和無線電通信的出現,加密裝置得到了突飛猛進的提高。 轉子密碼機是軍事密碼學上的一一個里程碑。這種密碼機是在機器內使用不同的轉子來替換字母,它提供了很高的複雜性,從而很難破解。然而,轉子密碼機最後還是被歷史上最著名的密碼機所取代,即德國的Enigma機。Enigma機具有3個轉子、一個連接板和一個反射轉子。

在這裏插入圖片描述
在加密開始之前,消息的產生者會將Enigma機配置爲其初始設置。操作員鍵入消息使用另一個字母來替代原字母,並向操作員顯示該字母。將轉子旋轉預定的次數,從而使另一個不同的字母來替代原來的字母。因此,如果操作員鍵入的第一個字符爲T,那麼機器可能把它替換成M,操作員就會在低上寫下字得M.接着,操作員會繼續轉轉子設置下一個字母。輸入完成後發過去再由那邊的人,通過轉子機解密。

序列密碼

Enigma與凱撒密碼-樣屬於一種換位密碼,很容易被破解,例如蠻力攻擊或窮盡密碼搜索,攻擊者通過信道竊聽獲得密文,在愷撒密碼中,
密匙就是字母表平移的字數。由於字母表只有26個字母,因此加密算法只有0-25共26種。雖然Enigma是隨機換位,但是依然能夠通過數字字母頻率分析出結果。
因此,爲了更安全的加密,出現了序列密碼這種加密方法,序列密碼的特點是將明文和密鑰進行異或運算。例如:明文a, ASCL碼爲97,二進制碼01100001;密匙爲B,ASCLL碼爲66,二進制爲01000010,然後按位異或(半加運算)。

在這裏插入圖片描述
序列碼用於單獨加密每個位,它是通過將密匙序列中的每個位與每個明文相加實現的。

序列碼最大的問題有兩點:
1、密匙長度必須和明文長度一致,如果要加密20M的明文則需要一個20M的密文。
2、序列碼容易被篡改。

分組密碼

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

ECB 模式(電子密碼本模式)

ECB模式是將明文消息,分成固定大小的分組,當最後一個分組小於分組長度的時候,需要用特定的數據進行填充以至於長度等於分組長度,每個分組的加密和解密都是獨立的,可以並行進行。但是其安全性較低。

在這裏插入圖片描述
在這裏插入圖片描述

CBC模式(密碼分組鏈接模式)

CBC模式中的第一個分組需要用初始化向量IV (一個隨機的且長度爲一個分組長度的比特序列)進行異或操作再進行加密,而後面的每一個分組都要先和前個分組加密後的密文分組進行異或操作,然後再加密。加密是連續的,不能進行並行操作。無法對單獨一箇中間的明文分組加密:對初始化向量沒有加密。當CBC模式中的密文分組有一個分組損壞,只要密文分組的長度沒有發生變化,解密時最多會有兩個分組受到數據損壞的影響。當CBC的密文分組中有一些比特缺失了,導致密碼分組的長度發生變化,此分組發生錯位,在缺失比特位置之後的密文分組也就無法全部解密了

在這裏插入圖片描述
簡單來說就是引用一個初始化向量IV,和自己的明文進行異或的加密操作,得到一個加密密文,然後再用這個加密密文和後面的明文進行異或運算得到另一組加密密文。有了前一組纔有下一組所以不能並行進行。一個環節錯誤或者丟失都有影響。

CFB模式(密文反饋模式)

CFB模式是將前一個分組的密文加密後和當前分組的明文進行異或操作生成當前分組的密文,第一個明文分組通過初始化向量IV進行加密再與之進行異或操作得到第一個密文分組。 CFB模式中有密碼算法產生的比特序列成爲密鑰流(在CFB中密碼算法相當於僞隨機數生成器),在CFB中分組密碼算法在解密時仍執行加密操作(因爲密鑰流通過加密生成)。對CFB模式可實施重放攻擊。

僞隨機數就是可以破解的,通過取0~1的數隨機擴大n倍產生。

在這裏插入圖片描述

就是第一組時先引入一個變量,將變量進行加密變成密文,再將得到的密文和分組一的明文進行異或的加密運算,得到第一組的密文。後面的操作也類似。

OFB模式(輸出反饋模式)

ofb模式是將明文分組和密碼算法的輸出進行異或操作來產生密文分組的,也需要引用初始向量。密碼算法的輸出會反饋到密碼算法的輸入中,並非通過密碼算法加密明文分組的,而通過將明文分組和密碼算法的輸出進行XOR來產生密文分組(與CFB的區別在於密碼算法的輸入)CFB是對密文分組進行反饋,必須按順序進行加密;OFB是對密鑰流進行加密(生成密鑰流與XOR運算可以並行)

在這裏插入圖片描述
就是先引用一個初始向量,對其進行加密再和第一組明文進行異或運算得到第一組的密文,後面一組又和引入的初始向量加密後得到的密文再加密得到新的密文,再和第二組的明文進行異或運算得到得二組的密文。。。

CTR模式(計數器模式)

通過將逐次累加的計數器進行加密來生成密鑰流每個分組對應一個逐次累加的計數器每次加密都會生成一個不同的值(nonce)作爲計數器的初始值,且在每次加密時都必須不同在初始值之後爲分組序列號,會逐次累加在CTR中如果密文分組有1bit被反轉,解密後的明文中所對應的比特會被反轉,該錯誤不會放大。

在這裏插入圖片描述

總結

在這裏插入圖片描述