【问题标题】:How do you store settings that get encrypted?您如何存储已加密的设置?
【发布时间】:2011-07-07 10:10:17
【问题描述】:

我们在一些应用程序中实施了设置加密。

有一天我们会忘记这些设置的内容。什么是存储它们的好方法?我们团队的某些成员需要访问它们。

我不喜欢一种方式:我们的管理员为此使用 wiki。这个 wiki 是否可以访问。没有简单的方法可以查看团队中的哪些成员拥有哪些登录信息。

我能想到两种可能性:

  1. 加密它们并将它们保存在 Subversion 中。只有参与该项目的团队成员拥有解密它们的密钥。

  2. 使用专为解决此问题而定制的应用程序

什么是保存秘密并让某些成员可以访问它们的好方法?

编辑 1

以下是我们可能遇到的问题示例:

我们有一个在网络服务器上运行的网络应用程序。该配置具有一些安全关键设置,例如支付提供商。如果系统崩溃并且我们必须将应用程序移动到新服务器,我们将无法使用加密配置。我们必须有一个明文并在新服务器上对其进行加密。

重新创建配置是不可行的。我们确实必须将其中的一部分以明文形式存储在保存位置。

【问题讨论】:

    标签: security encryption passwords cryptography


    【解决方案1】:

    您可以这样做的一种方法是使用密钥对其进行加密,然后在 USB 驱动器或类似设备上为每个用户提供 1/2 的密钥。这样他们就不能滥用它并直接窃取信息,而是需要拥有另一部分密钥的其他人的合作。如果 USB 驱动器/文件被盗,整个帐户不会受到损害。此外还有冗余,因此如果丢失或被盗,您仍然可以访问并重新加密数据。

    【讨论】:

    • 或者,更好的是,使用像ssss 这样的threshold secret sharing 实现,它允许您将密钥分成n 部分,其中任何k 足以重建它。
    【解决方案2】:

    您可以编写一个程序来保存授权用户列表,并且只允许他们通过该程序查看某些加密文件。授权用户可以通过公钥数字签名与程序进行通信——这样管理员可以知道哪些用户仍然被授权,但他们仍然必须进行身份验证才能访问安全数据。

    但是对于您在编辑中提供的示例,我有点困惑。这听起来有点不同。但是,您永远不应该存储未加密的安全数据 - 通过晦涩难懂的目的和安全性是不可接受的解决方案!为什么不只存储解密设置文件的密钥,这样如果需要移动到其他服务器,您可以解密它并(如果需要)使用新密钥对其进行加密?

    【讨论】:

      【解决方案3】:

      首先和最重要的密码绝不能加密,因为这是CWE-257 识别的漏洞。不要忘记“内部威胁”,毕竟你最终将不得不解雇某人。用户也经常重复使用密码。在这种情况下,我将实现一个sudo 之类的函数,您可以在其中控制一个帐户。或者可能是大多数应用程序都有的简单“忘记密码”。

      如果这些是共同的秘密。例如随机生成的需要共享的根密码,那么加密是一个很好的解决方案。请记住,如果你解雇某人,那么这个秘密就会被泄露,你将不得不重新生成这些秘密。

      【讨论】:

      • 对于用户密码,这是真的。但是有很多秘密需要保护,这将适用于(例如 root 密码,或敏感的实现细节)。虽然我 100% 同意用户帐户的目的,但事实是您需要以共享的方式单独跟踪某些密码。如果是这样的话,这样的事情可能是合理的......
      • @ircmaxell 我明白你的意思,确实需要共享秘密。但是,不要忘记“内部威胁”,毕竟您最终将不得不解雇某人。用户倾向于重复使用他们的密码,但如果这是一个唯一的共同秘密,那么这不是问题。
      猜你喜欢
      • 2015-11-04
      • 2015-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多