Rsa
如何防止公鑰被完全替換?
我正在
RSA
使用Microsoft CNG API
. 我正在簽署許可證文件並將文件與public key
最終使用者一起發送。現在我有一個問題,如果有人用全新的
private\public key pair
. 然後他們可以輕鬆地將我的公鑰替換為他們自己的密鑰,並將許可證文件替換為由新的相應私鑰簽名的文件。我缺少他們的一些指導方針嗎?如果我將公鑰儲存在證書儲存中,也可以防止它嗎?
如果我將公鑰儲存在證書儲存中,也可以防止它嗎?
好吧,對手可能只是覆蓋該條目並進行與以前相同的攻擊。
現在我有一個問題,如果有人使用全新的一組私鑰\公鑰對簽署許可證文件內容怎麼辦。
您偶然發現的是公鑰基礎設施(PKI) 的“信任問題”。也就是說,您需要在公鑰和實體之間進行綁定。
在這種情況下,您需要在您的公鑰和您作為軟體供應商的身份之間進行綁定。最簡單的解決方案是在驗證程序中“固定”公鑰(例如,它的 SHA256 雜湊),以便它僅在雜湊匹配時接受公鑰/簽名對。當然,這可能會被想要忽略許可證檢查的對手從軟體中修補出來,但也可以完全進行檢查(DRM 很難)……
如果您可以在“pin”公鑰部分添加更多行,那將是真正的。
固定的想法與瀏覽器中用於受信任的根 CA 的想法相同。您在軟體包中保留一份您信任的公鑰的副本。然後在驗證簽名時,檢查接收到的公鑰是否匹配(任何)儲存的“固定”公鑰。如果確實如此,則繼續進行驗證,否則您將立即返回無效簽名錯誤。如果二進制大小是一個問題,您還可以散列傳入的公鑰並將散列與硬編碼散列進行比較。
從理論上講,您還可以固定您自己的“CA”的公鑰並強制所有簽名提供由該 CA 簽名的證書,但似乎數據簽名公鑰的簡單固定就足夠了,並且數量上的額外可擴展性鍵是不需要的。