我开发了一个在运行时加载到配置文件中的工具。某些值使用AES密钥加密。
该工具将安排从远程计算机定期运行。向程序提供解密密钥的可接受方法是什么。它有一个命令行界面,我可以通过它。我现在可以看到三个选项
1
和2
的组合,即在exe中有一个基本密钥,然后通过CLI接受部分密钥。这样我可以为多台机器使用相同的构建,但它不能解决反编译exe的问题。值得注意的是,我并不太担心反编译exe来获取密钥。如果我确定我可以通过混淆等方式解决这些问题。
最终,如果我真的有意识,我就不会将密码存储在任何地方。
我想听听什么是最佳做法。感谢。
我已经添加了Go标记,因为该工具是用Go编写的,以防万一有一个神奇的Go包可能会有所帮助,除此之外,这个问题并非特定于技术。
更新::我正在尝试保护密钥免受外部攻击者的攻击。不是机器的常规物理用户。
答案 0 :(得分:1)
这种系统的最佳实践是两件事之一:
系统管理员在启动期间进行身份验证,并在控制台上提供密码。这通常非常不方便,但很容易实现。
硬件设备用于保存凭证。最常见和最有效的称为HSM(硬件安全模块)。它们有各种格式,从USB密钥到插件板到外部机架式设备。 HSM附带了您需要与之交互的API。 HSM的主要特征是它永远不会泄露其密钥,并且它具有物理安全措施以防止其被提取。您的应用程序会向其发送一些数据并签署数据并将其返回。这证明硬件模块已连接到此机器。
对于特定的操作系统,您可以使用本地安全凭据存储,这可以提供一些合理的保护。特别是Windows和OS X具有这些,通常键入管理员在启动时键入的某些凭据。我不知道Linux的特别有效,一般来说这在服务器设置中非常不方便(因为手动系统管理员干预)。
在我所做的每一个案例中,HSM最终都是最好的解决方案。对于简单的用途(比如启动一个应用程序),you can get them for a few hundred bucks.再多一点“滚动你自己”,I've seen them as cheap as $50.(我不是特别重复这些。我主要使用{{{} 3}},但基本思想是一样的。)