存储可解密密码以供自动使用



TLDR

我正在制作一个用于工业自动化目的的REST会话管理解决方案,需要自动登录到设备以执行配置。

注意

这些设备99%的时间将被隔离到专用网络/VPN(即,不会有公共IP)

困境

我的任务是创建一个可以存储硬件设备凭据的服务,这样就可以进行自动配置(以及指标抓取)。有问题的硬件只允许通过POST方法进行REST会话登录,其中用户和(未加密的)密码在消息正文中发送。这将返回一个会话cookie,然后我的服务将其存储(在内存中)。

有问题的服务包括:

  • Linux(Ubuntu 20.04)服务器
  • FastAPI python后端
  • SQLITE3嵌入式文件数据库

是否存储凭据

我的背景不在安全领域,所以这对我来说都是全新的,但我似乎更喜欢在我的数据库中存储我的密码哈希(例如bcrypt),以便将来进行验证。

这让我想到了似乎是唯一的解决方案——对密码进行哈希处理,并将其用作加密密码的salt,然后将哈希后的密码存储在DB中,以便稍后解密。我知道这提供了几乎0的安全性,因为数据库受到了威胁,但我不知道其他解决方案。考虑到数据库是嵌入式的,也许有一些额外的保证,即在数据库本身被破坏之前,服务器本身必须被破坏?我不知道是否存在技术上的";右";也许不会,但如果有人有任何建议,我会洗耳恭听。

您应该考虑使用硬件安全模块(HSM)。有云替代方案(如AWS机密管理器,一个基于存储在实际HSM中的密钥的加密机密存储库,AWS KMS)。或者,如果你的应用程序没有托管在公共云中,你也可以考虑购买一个真正的HSM,但这很昂贵。所以这一切都归结为你想要接受的风险与成本。

你也可以考虑建筑来适当地保护你的秘密。如果你建立一个安全的秘密存储服务并应用适当的保护(这太宽泛了,无法在这里描述答案),你至少可以提供对秘密使用的审计,你可以实现访问控制,你可以轻松地撤销秘密,你可以监控该组件中的使用模式等等;HSM";,尽管它可能根本不涉及专门的硬件。这并不能保证机密(通常是秘密加密密钥)永远不会像真正的HSM那样从服务中检索,但它将具有如上所述的许多好处。

然而,请注意,应用适当的保护是关键——这一点并不简单。你可以采取的一种方法是为潜在的攻击者建模,列出危害不同组件不同方面的方法(攻击路径),然后设计针对这些方法的保护措施,只要在财务上有意义。

最新更新