本文參考自:https://en.wikipedia.org/wiki/Padding_(cryptography)
一、Padding簡介
在書面語中,明文經常以可預測的方式開始和結束。例如:尊敬的、此敬等等。爲了防止已知明文攻擊,隨機長度的填充來防止攻擊者知道明文的長度。
二、Padding在對稱加密中的應用
在對稱加密中,明文通常是由固定長度的塊組成,這就需要對明文進行填充。
1.Hash 函數
現代的Hash函數通常處理由固定長度的塊組成,最早的hash函數通常包括幾種填充模式。通常用來防止Hash函數被長度擴展攻擊(length extension attacks)。
許多填充模式通過添加可預測的數據到最後一個塊中完成填充。
2.分組密碼的操作模式
cipher-clock chaining (CBC)模式是分組密碼操作模式的樣例。在對稱加算法的分組加密模式中,要求明文必須是加密塊的整數倍,這就要求必須對明文進行填充。
下面試常見的填充方式:
1.位填充
位填充可應用於任意長度的明文。
方法:將1
添加至明文後面,後面的位全部置0
(有可能沒有’0’)
例:
... | 1011 1001 1101 0100 0010 0111 **0000 0000** |
2.字節填充
字節填充應用於於明文可以編碼成整字節的
ANSI X.923
ANSI X.923 字節填充方式以00
字節填充並在最後一個字節處定義填充的字節數。
例:
... | DD DD DD DD DD DD DD DD | DD DD DD DD **00 00 00 04** |
ISO 10126
ISO 10126 規定填充的字節應當是隨機數並在最後一個字節處定義填充的字節數。
例:
... | DD DD DD DD DD DD DD DD | DD DD DD DD 81 A6 23 04 |
PKCS7
PKCS#7 規定添加的字節是填充的字節數
01
02 02
03 03 03
...
07 07 07 07 07 07 07
00 00 00 00 00 00 00 00