0

有没有一种很好的方法可以将 AES 密钥与应用程序一起发送,但仍然让它们足够安全?

我不太喜欢硬编码密钥的想法(因为可以反编译应用程序),但其他替代方法,将它们保存在远程服务器上,对我来说看起来很危险,以防服务器出现故障或网络切掉。

我知道Java提供了一种叫做key-store的机制,但是AFAIK,如果代码被反编译,这个key-store也可以打开吗?

任何想法?

提前致谢!

4

6 回答 6

4

您必须更好地描述应用程序。

如果您试图对安装该软件的计算机的所有者保护密钥绝对安全……您不能。你不应该尝试。这是他们的机器,他们有权知道上面的一切。

在某些软件的每个副本中嵌入相同的对称密钥似乎是一个糟糕的设计。对称密钥应该是新生成的,然后使用一些非对称算法进行交换。这样,只需要保护公钥的完整性;是否有人发现了密钥并不重要。

于 2009-12-24T16:50:31.973 回答
3

如果应用程序使用密钥,密钥将在某个时间点在内存中。一个足够成熟的用户/攻击者可以看到它。他们只需要一个调试器和一个合适的断点。

于 2009-12-24T16:51:46.183 回答
1

不,传输私人加密密钥是个坏主意。

一种典型的方法是将加密密钥存储在配置文件中,由系统管理员或部署人员在安装/更新时进行编辑。密钥本身可以通过安全(加密)电子邮件进行通信,或者简单地通过电话读出,或者只是在安装时随机生成(针对每个用户)。

于 2009-12-24T16:59:51.567 回答
1

您不能信任您的应用程序来保证您的密钥安全。你不能相信应用程序真的是你的。

您可以随心所欲地安全传输密钥,事实上,在应用程序端没有硬件保护您的密钥,这意味着您丢失了,任何拥有十六进制编辑器或调试器的人都可以从您的应用程序中获取密钥。

如果一个应用程序“需要”一个密钥,我会很想让每个用户(或许可证)只是一个私钥和证书。

然后,您可以使用签名检查和 Diffie-Hellman 密钥交换在运行时从联网服务器“授予”应用程序的每个许可实例一个密钥。这还可以让您确保一次只运行一个许可证实例。

于 2009-12-31T07:34:34.130 回答
0

这取决于您打算将密钥用于什么,以及什么算作“足够安全”,但总的来说,我认为您不能在使用密钥的客户端机器上执行代码并仍然阻止客户端获取钥匙。

于 2009-12-24T16:49:07.187 回答
0

不,这些密钥应该由应用程序本身生成并由用户存储。如果您正在传输私钥,您会丢失很多,几乎与您在交付产品之前拥有私钥副本所丢失的一样多。

用户的安全不应该是目标。

于 2009-12-24T16:51:12.427 回答