是否有可能从原始字符串和加密字符串中找出密钥?

Sam*_*han 8 database security encryption

编辑

我碰到了这个,因为我还没有得到一个确定的答案(尽管一两个是关闭的).我正在寻找的基本上是一个否的答案,有一些信息支持它.


我们有一个系统存储由数据库中的通用系统密钥加密的用户密码.如果有DB访问权限的人掌握了该系统密钥,那么这可能是灾难性的(显然).

我们现在知道的正确方法(根据大多数(?))是在数据库中存储PW的盐渍哈希值,但是相对接近于版本我们希望最小化代码更改,因此认为非常简单防止有人从数据库中读出PW的方法是简单地反转过程并切换参数.

也就是说,我们将使用用户密码作为密钥加密每个系统(数百个)唯一盐渍字符串(每个加密添加随机尾部),将结果存储在数据库中.在PW验证中,我们将使用输入的PW对存储在DB中的字符串进行解密,并与系统密钥匹配以进行验证.

System key+randompassword在DB中使用存储进行加密encrypted key.

即用户密码永远不会被存储,并且在我们简单的思想中是不可挽回的.

但作为加密领域的新手,我们想知道在该领域有更多经验的人是否可以回答这个简单的问题 -

是否有可能从原始字符串和加密字符串中找出密钥?

我们认为这是一种很棒的方法,可以确保用户密码遭到入侵,但无法在线查找任何方法.这使我们对它不确定,因此要求这个伟大的社区.

( 蛮力不是一个充分的答案,因为(在这种情况下)是不可能保护的.)

编辑:

我会在这里粘贴我的一条评论(希望)让事情变得更清楚:


@zaph感谢您的意见,但我认为大多数人都忽略了这一点.我们将在几天内对即将发布的版本进行代码冻结,并且我已经实现了我在问题中提到的方法.在下一个版本发布之前,我将阅读有关该主题并实现第三方库,如scrypt或类似的.我真的只需要知道是否存在可行的反向过程算法,从而使我的新实现比旧的加密密码方法更糟糕.

gus*_*to2 6

我们有一个系统存储由数据库中的通用系统密钥加密的用户密码.

这是一个非常糟糕的做法,因为密码可能是可逆的.根据我的经验 - 数据泄露只是时间问题而且......你的潜在灾难性情景将会实现.

我们现在知道的正确方法(根据大多数(?))是在数据库中存储PW的盐渍哈希值,

今天最好的选择是使用"慢速哈希",请参阅https://security.stackexchange.com/questions/211/how-to-securely-hash-passwords/31846#31846

在PW验证中,我们将使用输入的PW对存储在DB中的字符串进行解密,并与系统密钥匹配以进行验证.

而且存在问题.一旦系统密钥泄露(或由内部人员使用),所有密码都可能受到损害.使用哈希更安全(代码的差异不应该那么大).

是否有可能从原始字符串和加密字符串中找出密钥?

使用任何当前的现代密码,当前不可能基于普通和加密值的知识来计算/猜测加密密钥.

  • @ClasG:正确的方法是 - 存储密码的缓慢哈希密码,当用户登录时,读取盐,创建提供的密码的缓慢哈希并比较哈希值.要比较密码,您不需要解密它们,只需比较哈希值即可.使用PW作为加密密钥通常不是最好的想法,它们具有低熵(短且不够随机).你为什么强迫自己使用加密,没有哈希?为此目的更好地哈希 (2认同)

Mat*_*hew 0

通过快速谷歌,我找到了这个Stack Exchange 线程

尝试根据明文和密文找出密钥称为已知明文攻击。大多数加密算法不易受到这种攻击。