我有点奇怪的困境。我试着解释一下,请耐心等待我!
我正在使用表单身份验证,并将其他用户信息存储在另一个表中(从Forms Auth引用的UserID,加密的SSN,Salt值)。当用户注册到该站点时,我会询问SSN,DOB和LName,并在创建帐户之前验证我们的系统。我想确定该SSN是否在表单身份验证中具有与之关联的帐户。由于SSN使用salt值加密,因此我不能在不查看每一行的情况下进行查找。
我每个SSN只需要1个用户帐户。使用盐值会破坏这一点。
我看到它的方式,唯一的方法是使用SSN的通用加密算法。当用户输入时,我应用相同的加密算法,并查看用户扩展属性表中是否存在值匹配。
这足够安全吗?
答案 0 :(得分:1)
不是使用相同的salt值,而是根据其他用户信息生成salt,以便可以重建它。因此,您可以在用户应用后重新生成salt,并且可以生成预期的哈希并在单个查询中完成工作。
答案 1 :(得分:1)
如果您希望加密(而不是哈希)SSN值,那么将密钥存储在Natso指出的同一个表中并不是一个好习惯。这充满了危险,因为密钥不会与他们保护的数据一起存储 - 如果攻击者设法获得数据库的转储,他将能够解密加密的内容,因为密钥存储在旁边。
应用程序应从安全密钥库获取密钥,然后可用于加密/解密信息。这样,您可以继续在数据库中存储敏感信息,从而保护您的信息,并应用不同的机制(通常是文件系统安全性)来保护您的密钥库。
这当然是假设您的要求是以安全的方式将数据存储在数据库中,并在以后的某个时间恢复。但是,如果数据在通过算法后无法恢复,则应探索哈希的使用。
答案 2 :(得分:0)
每次使用相同的盐。然后,您可以比较加密值。