2009-02-02 55 views
0

我有点奇怪的困境。当我试图解释它时,请耐心等待!Forms Auth - 如何防止只知道扩展用户信息的用户帐户?

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

我只希望每个SSN有1个用户帐户。使用盐值会破坏这一点。

我看到它的唯一方法就是对SSN使用通用的加密算法。当用户输入时,我应用相同的加密算法并查看用户扩展属性表中是否有值匹配。

这样安全吗?

+0

为什么要加密SSN呢? – Treb 2009-02-02 17:18:48

+0

我认为你有一个与加密混淆的哈希。 – 2009-02-02 22:58:18

回答

0

每次使用相同的盐。然后你可以比较加密值。

1

而不是使用相同的盐值,基于其他用户信息生成盐,以便它可以重建。因此,您可以在用户应用后重新生成盐,并且您可以生成期望的哈希值并在单个查询中完成工作。

1

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

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

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

相关问题