Hash

簽署文件與簽署文件雜湊

  • June 13, 2019

簽署文件雜湊列表與簽署單個文件相比,可能會出現哪些安全隱患?

簡而言之,以下之間的安全權衡:

for file in $FILES; do
   gpg --clearsign $file
done

和:

sha256sum $FILES > signatures
gpg --clearsign signatures

有幾個陷阱:

文件名完整性:一次簽署一個文件,對文件的內容進行簽名。它(通常)不保護文件名不被篡改。這在某些情況下可能是災難性的(例如,攻擊者可能會更改blacklist.txtwhitelist.txt)。

設置成員完整性:簽署單個文件不會阻止從傳輸的文件集中添加或刪除文件。在某些情況下,這很重要:如果您正在傳輸一組日誌文件,攻擊者可以有選擇地刪除一個擷取了犯罪資訊的文件。如果攻擊者有機會看到多個傳輸,他們可以將舊傳輸中的文件添加到新傳輸中(本質上是重放攻擊的變體)。這些文件仍然具有單獨的有效簽名,因此不會檢測到添加內容。如果您正在傳輸一組使用者帳戶(每個文件一個),攻擊者可以將他們的帳戶恢復到較早的狀態(例如恢復為管理員狀態)。

如果可能的話,我建議保護整個傳輸而不是逐個部分。執行此操作的最簡單方法通常是創建一個 tarball 或 zip 文件並對整個存檔進行簽名。簽署文件雜湊列表也足夠了,但在編碼驗證機制時要小心。

單獨簽名文件將為每個文件的內容(不是文件名)創建獨立的簽名。這裡的一個潛在問題是這些項目可能會在不被發現的情況下被刪除或重命名。

例如,要簽名的文件是 alice-invoice、bob-invoice 和 chris-invoice。如果每個文件都單獨簽名,並且 bob-invoice 被刪除,則無法檢測到刪除。

創建文件和雜湊列表可以保護整個文件集的完整性,因為它允許檢測文件刪除或重命名。這裡一個潛在的缺點是證明單個文件的有效性(對第三方)需要洩露整個文件名和雜湊列表。

在這種情況下,如果我們需要證明 alice-invoice 沒有被修改,我們必須顯示整個列表(以證明簽名有效),這表明我們有 Bob 和 Charles 的發票。

另一個考慮因素:嚴格來說,這個問題只比較了清晰簽名的兩種用途。清晰的簽名包括原始文件的完整副本。這意味著單個文件的簽名必須受到與原始文件相同級別的安全保護。(這是該方法的另一個潛在缺陷。)分離的簽名較小,不會洩露簽名文件的內容,可能值得考慮。

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