我有一段时间想知道某些软件如何隐藏秘密密钥以至于无法轻易发现它们。举几个例子:
显然,这些程序不仅仅是在字节[]中使用密钥,因为这样可以轻松窃取密钥并生成自己的序列号等。
使用哪种策略来隐藏这些键,以便无法轻易找到它们?
答案 0 :(得分:37)
这些秘密密钥如此容易被发现的原因是因为它们隐藏在软件中。
不惜一切代价避免在软件中隐藏秘密 - 混淆只会让你到目前为止。问问自己:如何能够从完全访问反汇编,用户模式和内核模式调试器以及没有日常工作的人那里隐藏软件中的密钥?它破裂只是时间问题。
答案 1 :(得分:13)
您只需在某处隐藏密钥,并在需要时对其进行解密。使用“安全”键是复杂的部分。破解者可能会在您使用解密密钥的位置设置断点并将其转储。他们可能会扫描您的代码中的模式,这些模式表明您使用的是已知的加密算法(大多数算法都有预先计算的表格)。等等。
这就是为什么你需要让整个软件可执行程序难以分析。为此,您使用可执行的打包程序,在虚拟机中运行代码,完整性检查等。所有这些都是为了减慢调试和修改代码。
正如大多数人指出你无法阻止任何人,只是放慢速度。我会去一个饼干论坛,并询问有关密钥隐藏问题的建议。如果你问得好,他们很可能会有所帮助。
PS。公钥加密不会更好地隐藏密钥,但如果你正在进行许可方案,它可能会使密钥生成器变得更难(或理论上不可能)。
答案 2 :(得分:6)
底线是,你不能。请参阅此处的任何其他评论,原因如下。甚至像PGP / GPG这样的加密软件也会将密钥存储在一个文件中,然后大力敦促将这些文件保存在安全的闪存驱动器上,或其他安全的东西上。将发现作为可执行代码的一部分存储的密钥。
事实上,如果您尝试加密客户端计算机上的任何内容,这些内容将由客户端作为正常操作的一部分进行解密,那么这也是一个愚蠢的错误。客户端计算机本质上是不安全的,您无法控制他们能够对您的数据执行的操作。
如果您正在尝试进行身份验证,请查看基于Internet的身份验证,并登录服务器,或者使用某种生成的用于验证软件的KeyCode。
作为公钥 - 私钥对的一部分的密钥应保存在可以保护的数据文件中。对称密钥应作为会话密钥动态生成,然后丢弃。始终假设任何在其计算机上拥有秘密密钥或会话密钥的人都能够发现它,并根据您的意图使用它。
阅读Bruce Schneier的“Applied Cryptography”了解更多信息。
答案 3 :(得分:5)
你不能永远隐藏钥匙。但你可以肯定很难找到。一些方法是加密内存中的密钥,保留多个副本(可能是加密方式不同),彼此相互检查,留下虚拟副本进行访问,以一些奇怪的格式存储密钥等等。如果真的有人,它们都不会起作用想要你的钥匙,但你至少可以劝阻一个偶然/没有经验的攻击者。
答案 4 :(得分:2)
当我们开始开发软件时,我们创建了一个带日期的许可证文件。然后,我们意识到,没有太多人甚至对购买我们的软件感兴趣。然后,我们决定免费赠送它。更多的人开始关心至少尝试我们的杰作。最后,我们开源了我们的软件。更多用户开始使用它。现在我们只希望少数这些用户可以转变为付费用户(即购买产品支持或要求定制)。
最重要的是,如果有人想破解你的软件,他/她无论如何都会这样做。浪费你的时间试图用这个隐藏的密钥保护它真的值得吗?
答案 5 :(得分:1)
您并不总是需要密钥来验证许可证。
但忽略这一事实,你的密钥也可能是另一个功能的结果。您实际上并不存储特定的键值,而是具有即时生成键的函数(始终是相同的结果)。虽然并非不可能,但由于你不再寻找价值,因此很难找到它,但你必须弄清楚它是一个等式。
答案 6 :(得分:1)
如果您负担得起,最好将私钥存储在加密USB令牌中。键是只写的,即你可以设置它但不能读它。令牌在其硬件内部执行加密操作。检索密钥变得非常复杂(如果令牌没有已知漏洞,而旧版漏洞则不然)。
答案 7 :(得分:0)
隐藏代码中的密钥并不是非常安全。您可能已经注意到DVD和大多数软件序列号注册每天都被黑客入侵。如果你真的想要保护一些你需要使用公钥加密的东西。
答案 8 :(得分:0)
你不能,这是不可能的。任何有权访问目标计算机的攻击者都能够反汇编代码以找到它,或者在目标计算机上找到密钥文件等。
确保加密密钥安全的唯一方法是在需要时由用户手动输入。
答案 9 :(得分:-2)
我认为这是DVD和BluRay如此迅速破解的最大原因之一。我认为他们能够真正阻止普通人能够以数字方式复制家庭电影的唯一方法是,如果他们创建了一种未被许可在计算机上使用的媒体,并且只能用于经过认证的播放器。会削减想要在他们的电脑和笔记本电脑上观看电影的市场部分,但可能会停止更长时间的完美数字撕裂,并且会阻止普通人做到这一点。