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

Scheduled process - providing key for encrypted config

我开发了一种工具,可以在 运行 时加载配置文件。一些值使用 AES 密钥加密。

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

  1. 通过 CLI 提供完整的密钥,这意味着密钥在 OS 配置级别(即 CronJob)
  2. 通过源代码将密钥硬编码到二进制文件中。出于多种原因,这不是一个好主意。 (反编译且便携性较差)
  3. 使用 12 的组合,即在 exe 中有一个基本密钥,然后通过 CLI 接受部分密钥。这样我可以在多台机器上使用相同的构建,但它并没有解决反编译exe的问题。

值得注意的是,我不太担心反编译exe获取密钥。如果我确定我可以通过混淆等方式解决问题

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

我想听听什么是最佳实践。谢谢

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

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

这种系统的最佳实践是两件事之一:

  • 系统管理员在启动期间进行身份验证,在控制台提供密码。这通常非常不方便,但很容易实现。

  • 硬件设备用于保存凭据。最常见和有效的称为 HSM(硬件安全模块)。它们有各种形式,从 USB 密钥到插件板再到外部机架安装设备。 HSM 带有自己的 API,您需要与之交互。 HSM 的主要特点是它从不泄露其密钥,并且它具有防止密钥被提取的物理保护措施。您的应用程序向它发送一些数据,它对数据进行签名并returns。那证明硬件模块已经连接到本机了

对于特定的OSes,您可以利用本地安全凭证存储,这可以提供一些合理的保护。 Windows 和 OS X 特别有这些,通常键入一些管理员需要在启动时键入的凭据。我不知道 Linux 有什么特别有效的方法,一般来说,这在服务器设置中非常不方便(因为手动系统管理员干预)。

在我处理过的每个案例中,最终 HSM 都是最佳解决方案。对于简单用途(如启动应用程序),you can get them for a few hundred bucks. For a little more "roll-your-own," I've seen them as cheap as . (I'm not reviewing these particularly. I've mostly worked with a bit more expensive ones,但基本思想是相同的。)