Protocol-Design

使用額外內容驗證 DER 編碼的 DSA/ECDSA 簽名?

  • April 6, 2022

具有應該被 DER 編碼為 ASN.1 序列的 DSA/ECDSA 簽名 $ r $ 和 $ s $ (如 RFC 中所述),並給出一些字節,這些字節"some valid DER encoded ASN.1" || "some extra bytes"是正確的錯誤行為,或者繼續嘗試驗證輸入的 DER 編碼部分是否更正確(因為它是自定界的)?

具體來說,我想知道是否對加密安全有任何影響。

這取決於。如果整個輸入本身都在 DER 編碼結構中,那麼我會出錯。沒有為 BER、CER 或 DER 定義任何允許構造值中填充結構的內容。

如果輸入之後只是附加數據或垃圾字節,那麼它取決於協議或您是否要接受數據的自由裁量權。只要附加數據不被視為可信數據,繼續進行就沒有什麼壞處;丟棄不受信任的數據是最好的選擇。


對於某些協議,允許附加數據具有一些優點。我個人看到以下添加額外數據的安全相關原因:

  • 使用 CBC 包裝密鑰的包裝密鑰的零填充(符合 PKCS#11 的 HSM 經常使用此功能)
  • 預先確定每個文件(透明 EF)大小的智能卡

在這些情況下,第一個 BER TLV 結構(或帶外資訊)的長度字節值決定了數據的實際大小。由於簽名驗證只有在數據大小正確的情況下才能成功,因此數據長度編碼不必是簽名本身的一部分。


建議確保新協議不必處理虛假字節。在某些情況下,虛假資訊確實很危險,例如攻擊者可能重複某些標籤或 ID 的 XML 數字簽名。請注意,您使用的數據是您簽署的數據;攻擊者應該不可能更改數據的位置。

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