预定进程 - 为加密配置提供密钥

时间:2015-11-09 01:05:18

标签: encryption go configuration-files

我开发了一个在运行时加载到配置文件中的工具。某些值使用AES密钥加密。

该工具将安排从远程计算机定期运行。向程序提供解密密钥的可接受方法是什么。它有一个命令行界面,我可以通过它。我现在可以看到三个选项

  1. 通过CLI提供完整密钥,这意味着密钥在操作系统配置级别清除(即CronJob)
  2. 通过源代码将密钥硬编码到二进制文件中。出于多种原因,这不是一个好主意。 (反编译,不太便携)
  3. 使用12的组合,即在exe中有一个基本密钥,然后通过CLI接受部分密钥。这样我可以为多台机器使用相同的构建,但它不能解决反编译exe的问题。
  4. 值得注意的是,我并不太担心反编译exe来获取密钥。如果我确定我可以通过混淆等方式解决这些问题。

    最终,如果我真的有意识,我就不会将密码存储在任何地方。

    我想听听什么是最佳做法。感谢。

    我已经添加了Go标记,因为该工具是用Go编写的,以防万一有一个神奇的Go包可能会有所帮助,除此之外,这个问题并非特定于技术。

    更新::我正在尝试保护密钥免受外部攻击者的攻击。不是机器的常规物理用户。

1 个答案:

答案 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}},但基本思想是一样的。)