密码编码学之AES及其工作模式详解
文章目錄
- 一、AES
- 0. 總體結構
- 1. Feistel密碼結構
- 2. AES概述
- 3. 工作模式
- 3.1 電碼本(ECB)
- 3.2 密文分組鏈接(CBC)
- 3.3 密文反饋(CFB)
- 3.4 輸出反饋(OFB)
- 3.5 計數器(CTR)
- 4. 填充模式
一、AES
AES是對稱密碼,高級加密標準。wiki
0. 總體結構
1. Feistel密碼結構
子密鑰產生算法:子密鑰產生越復雜,密碼分析越困難;
迭代輪數:單輪不能提供安全性,多輪加密可取得很高的安全性;
密鑰長度:密鑰越長越安全,但會降低加解密速度;
輪函數:越復雜,抗攻擊的能力強
分組長度:64位比較合理,AES采用128位
2. AES概述
明文分組為128位即16字節;
密鑰長度可以為16字節、24字節或者32字節;
根據密鑰長度,算法有AES128、AES192、AES256;
加密和解密算法的輸入是128位分組,分組被描述為4x4的字節方陣,密鑰也被描述為4x4字節方陣;
密碼由N輪組成,其中輪數依賴于密鑰長度:
| 16字節 | 10輪 |
| 24字節 | 12輪 |
| 32字節 | 14輪 |
前N-1輪由4個不同變換組成:字節替換、行移位、列混淆和輪密鑰加,最后一輪僅包含三個變換:字節替換、行移位、輪密鑰加;第一輪有個初始變換(輪密鑰加)。
輸入一個或者多個4x4矩陣,輸出4x4矩陣,最后為密文。
3. 工作模式
工作模式本質上是一項增加密碼算法或使算法適應具體應用的技術。
| 電碼本(ECB) | 用相同的密鑰分別對明文分組獨立加密 |
| 密文分組鏈接(CBC) | 加密算法的輸入是一個密文組和下一個明文組的異或 |
| 密文反饋(CFB) | 一次處理S位,上一塊密文作為加密算法的輸入,產生的偽隨機數與明文異或 作為下一單元密文 |
| 輸出反饋(OFB) | 與CFB類似,只是加密算法的輸入是上一次加密的輸出,且使用整個分組 |
| 計數器(CTR) | 每個明文分組都與一個經過加密的計數器相異或,對每個后續分組計數器遞增 |
3.1 電碼本(ECB)
一次處理一組明文分塊,每次使用相同的密鑰加密。ECB特別適用于數據量少的場景,比如加密密鑰,比如傳輸一個AES密鑰,選擇此模式就比較適合。
缺點:對于很長的消息,ECB模型可能不安全,容易被攻擊,比如已知一些規律性特征。
下面是電碼本ECB的模式的加解密示意圖:
3.2 密文分組鏈接(CBC)
為了克服ECB的弱點,需要將重復的明文分組 加密成不同的密文分組。
加密算法的輸入 是當前的明文分組和上一個密文分組的異或,而使用的密鑰是相同的。
下面是密文分組鏈接CBC的加解密示意圖:
解密:每個密文組分別進行解密,再與上一塊密文異或,就可以恢復明文。
關于IV:
IV是初始向量,在第一個明文塊和IV異或后加密,以產生第一個明文分組。解密時需要將第一塊密文解密后的結果 和IV異或,進而恢復第一塊明文。
IV需要被保護,必須為收發雙方共享,且不能被第三方預測到。為了安全,IV需要被授權才能修改,可以對IV等用ECB加密后發送。
在OPTEE的安全存儲中就使用到了IV等場景,IV是使用隨機數發生器 產生一個隨機數分組。
3.3 密文反饋(CFB)
有些場景需要使用到流密碼,流密碼不像前面的兩種 需要將明文填充到分組長度的整數倍,且可以實時操作。所以,需要發送的字節流數據,可以使用流密碼加密后立即發送。
流密碼特性:密文和明文長度相等。發送8位的字符,加密也是用8位的。
加密:
輸入是b位的移位寄存器,它的值為初始向量IV;
加密函數輸出最左邊的s位,與明文的第一分段P1異或,得到密文的第一個單元C1;
然后將C1發送出去,接著移位寄存器左移s位,將C1填入移位寄存器的最右邊s位。
就這樣一直操作,直到所有明文被加密完成。
解密:
將收到的密文單元,與加密函數的輸出異或得到明文單元。注意這里是使用的加密函數而不是解密函數。
應用場景:面向分組的通用傳輸、認證。
弱點:不能并行實現。
下面是CFB的加解密示意圖:
3.4 輸出反饋(OFB)
輸出反饋模式(Output Feedback, OFB)的結構和CFB非常相似,是用加密函數的輸出填充移位寄存器,而CFB是使用的密文單元來填充的移位寄存器,有點不同。
另一個不同點是,OFB是對整個明文和密文分組進行運算,而不是僅對s位的子集進行運算。
IV必須是一個時變值,即IV對每次加密運算都是唯一的,不然容易被攻擊。
下面是OFB的加解密示意圖:
3.5 計數器(CTR)
計數器模式(CTR)在ATM(異步傳輸模式)等應用比較廣。
計數器使用與明文分組規模相同的長度。
要求:加密不同的明文組的計數器對應的值必須是不同的。
加密:計數器加密后,與明文分組異或,得到密文,沒有鏈接。
解密:使用具有相同的計數器序列,用加密后的計數器的值 與密文分組異或 恢復明文。
優點:可并行處理,支持隨機訪問,效率高。
4. 填充模式
分組密碼算法中需要將明文按指定大小進行分組,由于明文并非指定大小的整數倍,
因此在明文的最后一個分組需要將其填充至加密算法所要求的分組大小后進行加密。
常見的填充模式有:
NoPadding PKCS5Padding PKCS7Padding ISO10126Padding ISO7816-4Padding ZeroBytePadding X923Padding PKCS1PaddingANSIX923
在 ANSI X9.23 中,總是添加 1 到 8 個字節作為填充。 該塊用隨機字節填充(盡管許多實現使用 00)并且塊的最后一個字節設置為添加的字節數。
示例:在下面的示例中,塊大小為 8 個字節,4 個字節需要填充(十六進制格式)
| DD DD DD DD DD DD DD DD | DD DD DD DD 00 00 00 04 |
ISO 10126
ISO 10126 規定填充應該在最后一個塊的末尾用隨機字節完成,填充邊界應該由最后一個字節指定。
示例:在以下示例中,塊大小為 8 個字節,4 個字節需要填充。
… | DD DD DD DD DD DD DD DD | DD DD DD DD 81 A6 23 04 |
PKCS#5 and PKCS#7
填充以整個字節為單位。 每個添加字節的值是添加的字節數,即 N 個字節,每個值 N 被添加。 添加的字節數將取決于消息需要擴展到的塊邊界。
示例:在以下示例中,塊大小為 8 個字節,4 個字節需要填充。
… | DD DD DD DD DD DD DD DD | DD DD DD DD 04 04 04 04 |
ISO/IEC 7816-4
ISO/IEC 7816-4:2005[9] 與位填充方案相同,應用于 N 字節的純文本。 這意味著在實踐中,第一個字節是一個強制字節,值為“80”(十六進制),如果需要,接著是 0 到 N-1 個設置為“00”的字節,直到到達塊的末尾。
示例:在以下示例中,塊大小為 8 個字節,4 個字節需要填充。
… | DD DD DD DD DD DD DD DD | DD DD DD DD 80 00 00 00 |
下一個示例顯示僅一個字節的填充。
… | DD DD DD DD DD DD DD DD | DD DD DD DD DD DD DD 80 |
Zero padding
需要填充的所有字節都用零填充。
示例:在以下示例中,塊大小為 8 個字節,4 個字節需要填充。
… | DD DD DD DD DD DD DD | DD DD DD DD 00 00 00 00 |
總結
以上是生活随笔為你收集整理的密码编码学之AES及其工作模式详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 正则表达式简明使用手册
- 下一篇: swfupload简单使用