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的东西可能会有所帮助,但这取决于您的具体要求。

请记住,“攻击者”(很难将授权用户视为“攻击者”)不必真正获得您的密钥。他们只需等到程序解密配置,然后读取配置内存。所以你也需要混淆。这是一场永无止境的战斗,你必须决定你想打多高。