2

在我的項目(Windows桌面應用程序)中,我使用對稱密鑰來加密/解密一些需要保護的配置。密鑰在我的代碼中被硬編碼(C++)。保護對稱密鑰

  1. 什麼是我的鑰匙將通過逆向工程暴露的風險? (客戶只會收到編譯的DLL)
  2. 有沒有更好的安全管理密鑰的方法?
  3. 是否有開源或商業產品,我可以用
+2

這聽起來像你目前沒有任何安全,不是真的。如果密鑰在那裏(對於有十六進制閱讀器的人)很明顯,那麼它在那裏很容易看到(儘管需要用反彙編器進行一些檢測工作,或者反覆試驗以找出哪組字節是關鍵字)。 –

+0

@JohnColeman是的,對普通用戶有安全性和安全性。安全是針對一個確定的攻擊者,而不是100%的可能的攻擊者,這是無法實現的。 – zaph

+0

@Denisdillo定義攻擊者,技能和能力的程度 - 對於資金充足的政府來說,這是一個好奇的青少年。以貨幣單位定義價值。定義成功攻擊的成本。定義設備,Windows 95計算機,iOS設備,Android設備等,因爲每個設備都有一定的內置安全級別。保護設備所有者幾乎是不可能的,解決方案通常是需要服務器的DRM。 – zaph

回答

3

Windows提供了一個key storage mechanism作爲加密API的一部分。如果您的代碼爲每個用戶生成一個唯一的隨機密鑰,這隻對您有用。如果您爲所有用戶使用單個密鑰進行安裝,它顯然必須位於您的代碼中(或者來自代碼中的常量),因此無法真正保證安全。

+1

一個很好的做法,但請注意:它對設備所有者仍然不安全。 – zaph

+2

是的,我知道。一位受人尊敬的安全專家曾告訴我:「我們無法抵禦未知的威脅,或抵禦不可信但授權的最終用戶的已知威脅」。 –

2

我的鑰匙被逆向工程所暴露的風險是什麼? (客戶將只收到編譯的DLL)

100%。當然,假設密鑰保護有用和有趣的東西。如果沒有,則降低。

有沒有更好的安全管理密鑰的方法?

您可以使用沒有安全工具,但有混淆和DRM工具(這是一個不同於安全性的問題)。您使用的任何方法都需要定期更新,以處理破壞舊方法的新攻擊。但從根本上講,這與音樂或視頻或遊戲等的DRM相同。我會購物。任何有價值的東西都會定期更新,並且可能有點昂貴。

是否有開源或商業產品,我可以用

開源解決方案,爲這個特殊的問題是......可能無益。 DRM的重點在於混淆(讓事情變得混亂和隱藏,而不是安全)。如果你分享「祕密醬油」,那麼你失去了保護。這就是DRM與安全性的不同之處。在安全方面,我可以告訴你一切,但祕密,它仍然是安全的。但是DRM,我必須隱藏一切。這就是說,我確信有一些開源工具可以嘗試。有一些開源混淆工具試圖通過加擾標識符等來難以調試二進制文件,但如果只需要一小部分信息(配置),則很難對其進行充分混淆。

如果你需要這個,你可能會需要一個商業解決方案,這將是不完美的,並可能需要打補丁,因爲它已被破壞(再次假設它保護任何人真正關心的東西)。推薦特定的解決方案是堆棧溢出的主題,但谷歌可以幫助你。有些特定於Windows的東西可能會有所幫助,但這取決於您的具體要求。

請記住,「攻擊者」(很難將授權用戶視爲「攻擊者」)不必真正獲得您的密鑰。他們只需等到程序解密配置,然後讀取配置內存。所以你也需要混淆。這是一場永無止境的戰鬥,你必須決定你想打多高。