Sam*_*han 8 database security encryption
编辑
我碰到了这个,因为我还没有得到一个确定的答案(尽管一两个是关闭的).我正在寻找的基本上是一个是或否的答案,有一些信息支持它.
我们有一个系统存储由数据库中的通用系统密钥加密的用户密码.如果有DB访问权限的人掌握了该系统密钥,那么这可能是灾难性的(显然).
我们现在知道的正确方法(根据大多数(?))是在数据库中存储PW的盐渍哈希值,但是相对接近于版本我们希望最小化代码更改,因此认为非常简单防止有人从数据库中读出PW的方法是简单地反转过程并切换参数.
也就是说,我们将使用用户密码作为密钥加密每个系统(数百个)唯一盐渍字符串(每个加密添加随机尾部),将结果存储在数据库中.在PW验证中,我们将使用输入的PW对存储在DB中的字符串进行解密,并与系统密钥匹配以进行验证.
System key+randompassword在DB中使用存储进行加密encrypted key.
即用户密码永远不会被存储,并且在我们简单的思想中是不可挽回的.
但作为加密领域的新手,我们想知道在该领域有更多经验的人是否可以回答这个简单的问题 -
是否有可能从原始字符串和加密字符串中找出密钥?
我们认为这是一种很棒的方法,可以确保用户密码遭到入侵,但无法在线查找任何方法.这使我们对它不确定,因此要求这个伟大的社区.
( 蛮力不是一个充分的答案,因为(在这种情况下)是不可能保护的.)
编辑:
我会在这里粘贴我的一条评论(希望)让事情变得更清楚:
@zaph感谢您的意见,但我认为大多数人都忽略了这一点.我们将在几天内对即将发布的版本进行代码冻结,并且我已经实现了我在问题中提到的方法.在下一个版本发布之前,我将阅读有关该主题并实现第三方库,如scrypt或类似的.我真的只需要知道是否存在可行的反向过程算法,从而使我的新实现比旧的加密密码方法更糟糕.
我们有一个系统存储由数据库中的通用系统密钥加密的用户密码.
这是一个非常糟糕的做法,因为密码可能是可逆的.根据我的经验 - 数据泄露只是时间问题而且......你的潜在灾难性情景将会实现.
我们现在知道的正确方法(根据大多数(?))是在数据库中存储PW的盐渍哈希值,
今天最好的选择是使用"慢速哈希",请参阅https://security.stackexchange.com/questions/211/how-to-securely-hash-passwords/31846#31846
在PW验证中,我们将使用输入的PW对存储在DB中的字符串进行解密,并与系统密钥匹配以进行验证.
而且存在问题.一旦系统密钥泄露(或由内部人员使用),所有密码都可能受到损害.使用哈希更安全(代码的差异不应该那么大).
是否有可能从原始字符串和加密字符串中找出密钥?
使用任何当前的现代密码,当前不可能基于普通和加密值的知识来计算/猜测加密密钥.