首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在软件中保护密钥

如何在软件中保护密钥
EN

Cryptography用户
提问于 2015-10-09 09:07:08
回答 3查看 2.2K关注 0票数 7

我需要用AES加密/解密软件中的数据,问题是如何使AES密钥安全,没有HSM,我应该在代码中硬编码密钥吗?黑客似乎可以通过逆向工程来读取关键数据。

EN

回答 3

Cryptography用户

回答已采纳

发布于 2015-10-11 06:28:52

如果你的软件需要解密数据,而且你想阻止那些没有你的软件的物理访问的人解密,你基本上是运气不好。纯在软件中是不可能实现的,因为即使存在一个很好的白盒算法,攻击者也可以将其复制到他们的软件中,并能够解密(而不直接知道密钥,但谁在乎)。

但是,如果您愿意忽略这些攻击,并且只保护数据不受那些无法访问确切设备及其软件的人的影响,那么您应该使用设备特定的密钥,而不是硬编码的密钥。这样,即使攻击者从他们的设备中提取密钥,他们也无法使用该密钥攻击其他设备。

票数 8
EN

Cryptography用户

发布于 2015-10-09 13:33:34

你要找的东西叫做白盒密码学。

简而言之,白盒密码的目的是使密码(例如AES)的实现方式使攻击者不可能提取密钥,即使攻击者(计算机的用户)可以访问源代码和调试器。

到目前为止,所有学术性的白盒实现都已被破坏,因此不太可能做到这一点,但至少对攻击者来说,这样做变得非常困难。

有关白盒密码的更多信息,请访问Brecht:http://www.whiteboxcrypto.com/的站点,或阅读James:https://scholar.google.nl/scholar?q=A%20Tutorial%20on%20White-box%20AES的文章(有关白盒aes实现的技术细节)。

编辑:我在你的评论中看到你需要加密和解密。如果您需要使用相同的密钥进行加密和解密,这在白盒上下文中永远不会是安全的,因为攻击者可以只在解密器中输入(加密的)输入,而不是试图获取密钥,而他拥有所需的一切(反之亦然)。因此,在这种情况下,您需要有两个键(因此有两个白框)。

票数 7
EN

Cryptography用户

发布于 2016-03-23 03:21:40

您不能隐藏该算法,因为算法就是代码--如果您的代码必须能够解码数据,那么您将为攻击者提供机器可读的代码。

密钥必须直接或间接地被代码访问。

最后,如果您解密数据,那么攻击者就可以侦听解密代码的输出,这意味着再多的混淆或隐藏也不会对您有所帮助。

阻止攻击者解密数据的唯一方法是使代码在没有帮助的情况下无法解密--例如,由可信的操作员在运行时将密钥或部分密钥放入其中,或者如果某些数据由可信(硬件)模块控制。当然,如果受信任的硬件模块将数据返回给操作系统,那么您就没有什么好处了。

票数 0
EN
页面原文内容由Cryptography提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://crypto.stackexchange.com/questions/29723

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档