0

我有点奇怪的困境。请耐心等待我尝试解释它!

我正在使用表单身份验证并将其他用户信息存储在另一个表中(从 Forms Auth 引用的 UserID、加密的 SSN、Salt 值)。当用户注册到该站点时,我会询问 SSN、DOB 和 LName,并在他们创建帐户之前对我们的系统进行验证。我想确定该 SSN 在表单身份验证中是否有与之关联的帐户。由于 SSN 是使用盐值加密的,因此我无法在不查看每一行的情况下进行查找。

我只想要每个 SSN 1 个用户帐户。使用盐值会破坏这一点。

在我看来,解决这个问题的唯一方法是对 SSN 使用通用加密算法。当用户输入它时,我应用相同的加密算法并查看用户扩展属性表中是否存在值匹配。

这足够安全吗?

4

3 回答 3

1

如果您希望加密(而不是散列) SSN 值,那么将密钥存储在 Natso 指出的同一个表中并不是一个好习惯。这是充满危险的,因为密钥不会与它们保护的数据一起存储 - 如果攻击者设法获得您的数据库的转储,他将能够解密加密的内容,因为密钥是一起存储的。

应用程序应从安全密钥存储中获取密钥,然后可以使用该密钥对信息进行加密/解密。这样,您可以继续将敏感信息存储在数据库中,从而保护您的信息,并应用不同的机制(通常是文件系统安全性)来保护您的密钥存储。

这当然是假设您的要求是以安全的方式将数据存储在数据库中,并在稍后的时间点恢复相同的数据。但是,如果数据一旦通过算法就无法恢复,则应该探索哈希的使用。

于 2009-02-02T22:54:49.087 回答
1

与其使用相同的盐值,不如根据其他用户信息生成盐,以便可以对其进行重构。因此,一旦用户申请,您就可以重新生成盐,并且您可以生成预期的哈希并在单个查询中完成工作。

于 2009-02-02T18:30:42.100 回答
0

Use the same salt every time. Then you can compare the encrypted values.

于 2009-02-02T17:15:24.140 回答