Encryption

為什麼secretbox可以洩露消息長度?

  • July 23, 2016

大多數塊密碼實現都希望使用者進行填充,以便消息與密碼塊大小匹配。我了解填充的目的是使輸入與密碼塊大小匹配。它還具有向觀察者隱藏實際消息長度的可能有益效果。

使用NaCl secretbox,文件明確說明“注意長度沒有隱藏。”。這到底是什麼意思呢?

通常假定消息的長度不是秘密的。即使使用填充,近似長度也會洩露,並且任何加密都必然會顯示最大長度——或者如果使用壓縮,至少會顯示資訊內容——因為密文通常不能比消息短。

NaCl 的 secretbox 不使用分組密碼,而是使用流密碼 - XSalsa20 (pdf) - 因此它不需要填充,並且會顯示確切的消息長度。

如果您遇到消息長度應保密的情況,您必須確保自己做到這一點,例如通過將消息填充到固定的最大長度。自動這樣做會很浪費,並且會限制算法可以使用的消息大小,這就是它留給使用者的原因。

引用自:https://crypto.stackexchange.com/questions/29939