我有一个客户,该客户端正在运行来自多个帐户的信息聚合器。该数据库需要以稍后可以由脚本登录到这些网站以检索数据的方式将用户名和密码存储到其他网站上。

我没有将它们存储为纯文本,而是想我们可以将它们放置用于存储。显然,如果某人可以同时访问代码和数据库,则仍然可以访问纯文本版本,但是如果他们只有一个或另一个或另一个。

有更好的想法吗?

有帮助吗?

解决方案

如果您的系统向用户询问密码,则可以使用该密码生成一个密钥来对其他网站进行加密/解密密码。

这样,您需要用户输入该密码才能解释您在数据库中存储的密码。

这里更详细的流程:

  1. 登录系统时,用户输入密码“ 123456”。
  2. 您使用“ 123456”密码的SHA256并获取一个键:“ 8D969EEF6ECAD3C29A3A3A62929280E686CF0CF0C3F5A86AFF3CA12020C923ADC6ADC6C92”
  3. 使用该“ 8D969 ...”键与AES解密数据库中网站的密码。

您可以通过多种方式来完善它。例如:在计算SHA哈希之前腌制密码。

作为这种盐的实用样本, 迈克尔 建议使用 PBKDF2 (和 HMACSHA-256 作为其两个参数伪随机函数)。

其他增强:存储密钥的加密版本,以允许您的用户更改自己的密码,而无需重新加密所有密码...等等...

其他提示

您可以做的任何事情都可以使用凭据,攻击者也可以

混淆实际上给你买了什么?时间。毕竟,数据也存在,您自己使用它的计划也是如此。有人弄清楚您的计划是什么,只是时间问题。这一切都取决于您的偏执狂以及对您舒适的风险水平的评估。特别是,您如何存储任何凭据应取决于谁可以访问运行数据库的机器。

最终,橡胶必须走上路,所以要去征服。不要完全混淆。只要确保将其与智能实践相结合。

方法和建议

为每个帐户生成每个帐户的每次申请API键

如果您可以从第三方帐户生成API键,这将使您能够在不关闭所有潜在应用程序的情况下撤销对帐户的访问。许多服务都有此类API键(Google,Twitter,Stackexchange,Facebook等)。

您只需设置“应用程序”,然后使用消费者密钥和秘密以及访问令牌和访问秘密。该机器只需要存储这些凭据。如果发生妥协,您只需撤销该键即可。此外,这些允许您每个帐户指定权限。

使用每个用户密码作为其凭据集

当用户登录时,您才能解锁其密码集。为此,您将根据适当的哈希方案生成键,并进行验证检查,该检查发生在密钥之前的几个哈希步骤。

无论如何,它都会在磁盘上加密

您总是可以用一个键加密凭据。然后,您只有一个钥匙来保护(保护所有其他秘密)。然后,您必须在访问其他凭据之前解密。

将秘密存储在系统的钥匙扣中

在Linux上,使用 gnome狂欢. 。然后,您可以进行简单的创建阅读删除调用,将其视为密码数据库。 GNOME钥匙扣基于PKCS#11标准。

Gnome-Keyring具有API 保存到钥匙扣和检索物品。

/* A callback called when the operation completes */
static void
found_password (GnomeKeyringResult res, const gchar* password, gpointer user_data)
{
  /* user_data will be the same as was passed to gnome_keyring_find_password() */
  // ... do something with the password ...
  /* Once this function returns |password| will be freed */
}

static void
find_my_password()
{
  gnome_keyring_find_password (GNOME_KEYRING_NETWORK_PASSWORD,  /* The password type */
                               found_password,                  /* callback */
                               NULL, NULL,     /* User data for callback, and destroy notify */
                               "user", "me", 
                               "server", "gnome.org",
                               NULL);
}

在Windows 7+上,使用“加密文件系统”(EFS)功能。所有文件都用证书加密,然后使用Windows密码保护。

不过,不要让您陷入错误的安全感。如果这是它正在运行的服务器,则如果某人可以访问网络访问该框,则他们也可以访问键盘数据本身。

设置授予访问权限的远程计算机

您可以设置可以使用公共和私钥对授予凭据或解锁密钥的机器吗?

在哈希上

如果使用用户名和密码,则不会将它们返回。哈希设计为单向功能。

你可以 编码 但是,混淆的数据,但我不建议这样做。

如果您哈希信息,则稍后无法检索。如果您对其进行加密,则需要将密钥存储在某个地方。除了物理限制对数据库的访问以消除恶意使用数据的潜力外,没有可靠的方法。

哈希可以防止所有可预见的方式使用原始数据。但是,您需要使用数据。设计了像SHA-256这样的加密哈希,因此在计算上很难(如果不制作不合理尺寸的查找表)来查找 m 给出 H(m) 在哪里 H 是您最喜欢的哈希功能。

如果您使用加密途径,则需要存储加密键,并且可以妥协或至少用作解密Oracle。您可以制作一个为您解密的服务经纪人,并同时使用客户端和服务器身份验证证书来确保安全。但是,如果有人妥协了授权的客户,那么您将在折衷和检测之间有一个时间窗口。但是,这种方法使您可以灵活地撤销证书并立即拒绝服务器访问权限,即使您不再访问妥协的客户端。

我建议设置仅通过直接连接(在同一物理开关上)可用的远程服务,该服务可以对客户端进行身份验证,并要求所有客户端进行身份验证。如果要妥协客户,限制可以进行的查询数量也有助于防止滥用。该服务将需要检查撤销证书 每一个 要求。

该服务还需要连接到远程伐木设施,该设施将用于独立审核系统。此记录服务需要再次验证客户端并使用客户端进行身份验证。记录服务接收数据并将其附加到日志上,它永远不允许进行修改或删除。当它收到日志条目时,它会在数字上签署时间戳日志条目并将其输入审核容器。

这类似于证书机构如何设置其纸质跟踪到审计证书发行的方式,以便为妥协提供最佳的恢复模型,因为防止妥协实际上是不可能的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top