為海綿的容量添加參數
將域、消息長度或塊計數器等參數異或到海綿的容量或讓攻擊者控制容量是否安全?
例如 NORX XORs 域轉化為容量。
這會破壞海綿安全證明嗎?
如果在容量中添加位來表示沒有填充,因為消息是速率的倍數,因此減少了置換函式的執行次數,該怎麼辦?
PRIMATE 使用類似於無填充位的填充溢出。他們的論文說:
請注意,在 |M 情況下填充的溢出
$$ w $$| = r 導致安全性降低一半:直覺地說,APE 的容量為 c’ = c - 1。
但是,這似乎不適用於 HANUMAN 和 GIBBON,它們也使用相同的填充溢出。
將參數異或到海綿中是安全的,只要它們是唯一編碼的,這樣它們就不會與消息的一部分混淆。填充也是如此:如果兩個不同的消息因為您跳過填充而被以相同的方式處理,那麼您就有麻煩了;例如,如果您使用長度前綴,則末尾不需要填充,但您需要預先知道長度。
這不像 JWT,其中攻擊者可以更改 JSON 的一部分(如算法標籤)來控制接收者使用什麼算法來驗證 JSON 的其餘部分:如果值得一提的話,您無論如何都無法從雜湊中恢復參數雜湊,因此合法使用者甚至不願意這樣做。
更好的是,對參數進行散列意味著攻擊者不能將使用一組參數的散列重用於使用另一組參數的應用程序——散列參數使兩個應用程序使用的散列基本上獨立。
作為這可能出錯的病態範例,想像一個協議,其中一部分使用 $ \operatorname{SHA-256}(x) $ 作為某物的公共標識符,另一部分使用 $ \operatorname{SHA-256}(\operatorname{SHA-256}(x)) $ 作為一個秘密,每個使用基本上都可以獨立使用(除了潛在的通用問題 $ H^2 $ )。顯然,可以利用這種*組合使用來學習秘密。*SHA-256 的迭代次數是否散列到消息中,如 $ \operatorname{SHA-256}(1 \mathbin| x) $ 和 $ \operatorname{SHA-256}(2 \mathbin| \operatorname{SHA-256}(2 \mathbin| x)) $ 相反,不會有這樣的危險。