填充 (密碼學)

密碼學中,「填充」指幾種不同的操作。

經典密碼學

編輯

許多經典密碼會將明文排列成特定的形狀(如:正方形、長方形等),而如果明文不能完全符合形狀,就需要添加字母來填滿形狀。 用無意義的字母來填充則更可以阻礙一些密碼分析。

經典填充有時會造成誤解,如有名的「the world wonders(全世界都想知道)」。

對稱密碼學

編輯

散列函數

編輯

大多數現代密碼學散列函數以固定長度的塊處理信息;除了最早的幾種,所有散列函數都遵循某種填充格式。 密碼學散列函數必須採用格式結尾,以抵禦長度擴展攻擊

塊密碼工作模式

編輯

電子密碼本(ECB)密文塊連結(CBC)。 為對稱密鑰加密設計的塊密碼工作模式要求輸入明文長度必須是塊長度的整數倍,因此信息必須填充至滿足要求。

位填充

編輯

位填充可用於任意大小的信息。

於信息後添加一個「設定」位(「1」),再添加「重設」位(「0」)至要求大小。「重設」位(「0」)的數量取決於信息末尾到塊邊緣的距離。以比特表示為「1000 ... 0000」。

這個方法可用於填充任何位長度的信息,而不限於整字節長度的信息。比如,一段 23 位的信息可填充 9 位以填滿一個 32 位的塊:

... | 1011 1001 1101 0100 0010 0111 0000 0000 |

字節填充

編輯

字節填充可用於可編碼為整數字節大小的信息。

ANSI X9.23 (美國國家標準協會第 X9.23 號標準)
編輯

例:下例中,塊大小為 8 字節,需要填充 4 字節(以十六進制表示)。

... | DD DD DD DD DD DD DD DD | DD DD DD DD 00 00 00 04 |
ISO 10126 (國際標準化組織第 10126 號標準)
編輯

例:下例中,塊大小為 8 字節,需要填充 4 字節。

... | DD DD DD DD DD DD DD DD | DD DD DD DD 81 A6 23 04 |
PKCS7 (公鑰密碼學標準第 7 號)
編輯

PKCS#7 定義於 RFC 5652 (徵求意見草案第 5652 號)。

每個填充字節的值是用於填充的字節數,即是說,若需要填充 N 個字節,則每個填充字節值都是 N 。 填充的字節數取決於算法可以處理的最小數據塊的字節數量。

01
02 02
03 03 03
04 04 04 04
05 05 05 05 05
etc.

例:下例中,塊大小為 8 字節,需要填充 4 字節。

... | DD DD DD DD DD DD DD DD | DD DD DD DD 04 04 04 04 |

補零

編輯

例:下例中,塊大小為 8 字節,需要填充 4 字節。

... | DD DD DD DD DD DD DD DD | DD DD DD DD 00 00 00 00 |

非對稱密碼學

編輯

參考資料

編輯