你如何在代码中隐藏密钥?

问题描述 投票:43回答:10

我有一段时间想知道一些软件如何隐藏秘密密钥,以至于无法轻易发现它们。举几个例子:

  • DVD播放器软件隐藏了CSS密钥
  • 带序列号/注册码的软件隐藏用于验证序列号的密钥/哈希值

显然,这些程序不仅仅是在字节[]中使用密钥,因为这样可以轻松窃取密钥并生成自己的序列号等。

使用了哪些策略来隐藏这些键,以便无法轻易找到它们?

encryption obfuscation
10个回答
37
投票

这些秘密密钥如此容易被发现的原因是因为它们隐藏在软件中。

避免不惜一切代价隐藏软件中的秘密 - 混淆只会让你到目前为止。问问自己:如何能够从完全访问反汇编,用户模式和内核模式调试器以及没有日常工作的人那里隐藏软件中的密钥?它破裂只是时间问题。


-2
投票

我认为这是DVD和BluRay如此迅速破解的最大原因之一。我认为他们能够真正阻止普通人能够以数字方式复制家庭电影的唯一方法是,如果他们创建了一种未被许可在计算机上使用的媒体,并且只能用于经过认证的播放器。将削减想要在他们的电脑和笔记本电脑上观看电影的市场部分,但可能会停止更长时间的完美数字撕裂,并将阻止普通人能够做到这一点。


13
投票

您只需在某处隐藏密钥,并在需要时对其进行解密。使用“安全”键是复杂的部分。破解者可能会在您使用解密密钥的位置设置断点并将其转储。他们可能会扫描您的代码中的模式,这些模式表明您使用的是已知的加密算法(大多数算法都有预先计算的表格)。等等

这就是为什么你需要使整个软件可执行难以分析。为此,您使用可执行的打包程序,在虚拟机中运行代码,完整性检查等。所有这些都是为了减慢调试和修改代码。

正如大多数人在这里指出的那样,你不能阻止任何人,只是放慢速度。我会去一个饼干论坛,并询问有关密钥隐藏问题的建议。如果你问得很好,他们很可能会有所帮助。

PS。公钥加密不会更好地隐藏密钥,但如果你正在进行许可方案,它可能会使密钥生成器变得更难(或理论上不可能)。


6
投票

底线是,你不能。请参阅此处的任何其他评论,原因如下。甚至像PGP / GPG这样的加密软件也会将密钥存储在一个文件中,然后大力敦促将这些文件保存在安全的闪存驱动器上,或其他安全的东西上。将发现作为可执行代码的一部分存储的密钥。

实际上,如果您尝试加密客户端计算机上的任何内容,这些内容将由客户端作为正常操作的一部分进行解密,那么这也是一个愚蠢的错误。客户端计算机本质上是不安全的,您无法控制他们能够对您的数据执行的操作。

如果您正在尝试进行身份验证,请查看基于Internet的身份验证,并登录服务器,或者使用某种生成的用于验证软件的KeyCode。

作为公钥 - 私钥对的一部分的密钥应保存在可以保护的数据文件中。对称密钥应作为会话密钥动态生成,然后丢弃。始终假设任何在计算机上拥有“密钥”或“会话”密钥的人都能够发现它,并根据您的意图使用它。

阅读Bruce Schneier的“Applied Cryptography”了解更多信息。


5
投票

你不能永远隐藏一把钥匙。但你可以肯定很难找到。一些方法是加密内存中的密钥,保留多个副本(可能是加密方式不同),彼此相互检查,留下虚拟副本进行访问,以一些奇怪的格式存储密钥等等。如果真的有人,它们都不会起作用想要你的钥匙,但你至少可以劝阻一个随意/缺乏经验的攻击者。


2
投票

当我们开始开发软件时,我们创建了一个带日期的许可证文件。然后,我们意识到,没有太多人甚至对购买我们的软件感兴趣。然后,我们决定免费赠送它。更多的人开始关心至少尝试我们的杰作。最后,我们开源了我们的软件。更多用户开始使用它。现在我们只希望少数这些用户可能转变为付费用户(即购买产品支持或要求定制)。

最重要的是,如果有人想破解你的软件,他/她无论如何都会这样做。浪费你的时间试图用这个隐藏的密钥保护它真的值得吗?


1
投票

您并不总是需要密钥来验证许可证。

但忽略这一事实,你的密钥也可能是另一个功能的结果。您实际上并不存储特定的键值,而是拥有一个即时生成键的函数(始终是相同的结果)。虽然并非不可能,但由于你不再寻找价值,因此很难找到它,但你必须弄清楚它是一个等式。


1
投票

如果您负担得起,最好将私钥存储在加密USB令牌中。键是只写的,即你可以设置它但不能读它。令牌在其硬件内部执行加密操作。检索密钥变得非常复杂(如果令牌没有已知的漏洞,那么旧的漏洞就不是这种情况)。


0
投票

在代码中隐藏密钥并不是非常安全。您可能已经注意到DVD和大多数软件序列号注册每天都被黑客入侵。如果您确实想要保护某些东西,则需要使用公钥加密。


0
投票

你不能,这是不可能的。任何有权访问目标计算机的攻击者都能够反汇编代码以找到它,或者在目标计算机上找到密钥文件等。

确保加密密钥安全的唯一方法是在需要时由用户手动输入。

© www.soinside.com 2019 - 2024. All rights reserved.