Rsa

如何防止公鑰被完全替換?

  • May 7, 2019

我正在RSA使用Microsoft CNG API. 我正在簽署許可證文件並將文件與public key最終使用者一起發送。

現在我有一個問題,如果有人用全新的private\public key pair. 然後他們可以輕鬆地將我的公鑰替換為他們自己的密鑰,並將許可證文件替換為由新的相應私鑰簽名的文件。我缺少他們的一些指導方針嗎?如果我將公鑰儲存在證書儲存中,也可以防止它嗎?

如果我將公鑰儲存在證書儲存中,也可以防止它嗎?

好吧,對手可能只是覆蓋該條目並進行與以前相同的攻擊。

現在我有一個問題,如果有人使用全新的一組私鑰\公鑰對簽署許可證文件內容怎麼辦。

您偶然發現的是公鑰基礎設施(PKI) 的“信任問題”。也就是說,您需要在公鑰和實體之間進行綁定。

在這種情況下,您需要在您的公鑰和您作為軟體供應商的身份之間進行綁定。最簡單的解決方案是在驗證程序中“固定”公鑰(例如,它的 SHA256 雜湊),以便它僅在雜湊匹配時接受公鑰/簽名對。當然,這可能會被想要忽略許可證檢查的對手從軟體中修補出來,但也可以完全進行檢查(DRM 很難)……

如果您可以在“pin”公鑰部分添加更多行,那將是真正的。

固定的想法與瀏覽器中用於受信任的根 CA 的想法相同。您在軟體包中保留一份您信任的公鑰的副本。然後在驗證簽名時,檢查接收到的公鑰是否匹配(任何)儲存的“固定”公鑰。如果確實如此,則繼續進行驗證,否則您將立即返回無效簽名錯誤。如果二進制大小是一個問題,您還可以散列傳入的公鑰並將散列與硬編碼散列進行比較。

從理論上講,您還可以固定您自己的“CA”的公鑰並強制所有簽名提供由該 CA 簽名的證書,但似乎數據簽名公鑰的簡單固定就足夠了,並且數量上的額外可擴展性鍵是不需要的。

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