Encoding

加密序列化數據

  • November 26, 2020

如果我想加密由字元串的鍵值對組成的結構化數據,使用儲存鍵、值及其長度並填充隨機數的編碼而不是始終以{", 結尾的 JSON 是否有優勢? with"}並且可以預見地包含用?"..."分隔的字元串。,

我正在考慮像這樣編碼數據:

R1
LK1 K1
LV1 V1
LK2 K2
LV2 V2
R2

(其中Rn是從 CSPRNG 獲得的固定大小的隨機數,L..是隨後數據的長度)

代替:

{ "K1": "V1", "K2": "V2" }

如果我想加密由字元串鍵值對組成的結構化數據,使用儲存鍵、值及其長度並填充隨機數的編碼是否有優勢?

一般來說,不,這不是一個好主意。語義安全密碼使用 IV 或 nonce(使用一次的數字,靜態大小編碼中的唯一數字)結合使用的密鑰隨機化密文。因此,無需隨機化數據輸入(“消息”)本身。

如果消息的隨機化實際上首先會完全隨機化數據,這在很大程度上取決於操作模式。在 CBC 模式的情況下,可以使用具有 IV 塊大小的隨機塊作為隨機 IV 的替代方案。但是,它與一開始就使用 IV 並沒有什麼不同。它實際上會無緣無故地花費你一個額外的塊來加密。另一方面,如果您考慮更現代的 CTR 模式,則密鑰流將與隨機輸入進行異或運算,並且不會影響明文/密文消息的其餘部分。隨機數據只是成本而沒有任何好處。

現代認證模式只需要一個隨機數,無論是否隨機。例如,GCM 模式需要一個 12 字節的 nonce。您可以安全地將 IV 或隨機數作為密文的前綴(因為大小是眾所周知的或預先配置的)。請注意,CBC 模式需要一個不可預測的(即隨機的)IV。

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