【发布时间】:2019-02-02 21:20:14
【问题描述】:
编辑
我正在解决这个问题,因为我还没有一个决定性的答案(虽然一两个很接近)。我正在寻找的基本上是 yes 或 no 答案以及一些信息来支持它。
我们有一个存储用户密码的系统,该系统由数据库中的通用系统密钥加密。如果具有 DB 访问权限的人持有该系统密钥,那可能是灾难性(显然)。
我们现在知道的正确方法(根据大多数(?))是将 PW 的加盐哈希存储在数据库中,但相对接近我们想要的版本最小化代码更改,因此认为防止有人从数据库中读取 PW 的一种非常简单的方法是简单地反转过程并切换参数。
也就是说,我们将使用用户密码作为密钥对每个系统(数百个)唯一的加盐字符串(每个加密添加随机尾部)进行加密,并将结果存储在数据库中。在 PW 验证时,我们将使用输入的 PW 对存储在 DB 中的字符串进行解密,并与系统密钥匹配以进行验证。
System key+random加密,password存储在 DBencrypted key。
即用户密码永远不会被存储,并且在我们简单的头脑中是无法恢复的。
但作为加密领域的菜鸟,我们想知道在该领域有更多经验的人是否可以回答简单问题 -
能否从原始字符串和加密字符串中找出密钥?
我们认为这是一种出色 ;) 确保用户密码不被泄露的方法,但在网上找不到任何关于该方法的内容。这让我们不确定,因此询问了这个伟大的社区。p>
(并且蛮力不是一个充分的答案,因为(在这种情况下)无法避免。)
编辑:
我将在此处粘贴我的一个 cmets 以(希望)使一些事情更清楚:
@zaph 感谢您的意见,但我认为大多数人都忽略了这一点。几天后我们对即将发布的版本进行了代码冻结,我已经实现了我在问题中提到的方法。在下一个版本之前,我将阅读该主题并实现第三方库,如 scrypt 或类似的。我真的只需要知道是否有现有的可行算法来反转这个过程,从而使我的新实现比旧的加密密码方法更糟糕。
【问题讨论】:
-
它是什么类型的数据库?如果是 MySQL,您应该在 甚至触及数据库之前加密数据(无论采用何种方法)。不要在数据库输入之前加密。
-
再问:我怎么读到你所做的只是在经典加密过程中交换了值/密钥角色。
-
(And brute force is not a adequate answer, since that's (under the circumstances) is impossible to protect from.)哦该死。好吧,考虑到您的个人资料泄露了您的公司,而您刚刚告诉我们您的密码系统使用了不良做法,并且您没有合适的暴力保护……拉起躺椅观看... -
@Martin 这是 MSSQL。并且所有加密都是在数据库写入之前完成的。而且 - 是的,这样存储在数据库中的是我们的加密系统盐,而不是用户的 PW。
-
@ClasG 是的,建议的方法极易暴露大多数用户密码。您必须决定哪个更重要:代码冻结(任意)或用户的安全(绝对)。不是新方法比以前更好,而是新方法是否安全并使用当前经过验证的实践以有意义的方式保护您的用户。您处于这个可怕点的原因是因为直到最后一刻才解决安全问题。你会选择哪一个?
标签: database security encryption