首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在数据库中存储之前对盐渍密码哈希进行加密

在数据库中存储之前对盐渍密码哈希进行加密
EN

Security用户
提问于 2020-08-11 12:49:30
回答 1查看 539关注 0票数 0

我读过这里这里,与其使用胡椒,不如在存储到数据库之前对散列/盐渍密码进行加密。尤其是使用Java,因为没有盐分/胡椒库,而只是用于盐分散列,而且我也不会以任何方式实现自己的密码。对此有疑问:

  1. 是真的吗?如果db服务器在另一台物理计算机上,并且加密密钥存储在应用服务器的fs上,它会增加安全性吗?
  2. 如果是的话,可以使用RSA进行哈希加密吗?
  3. 在这种情况下,要检查密码,最好是从DB读取加密密码,对其解密,然后将其与用户输入的哈希/盐渍密码进行比较,还是加密输入的哈希/盐渍密码,然后与数据库中的加密值进行比较?在这种情况下,它是否与使用另一个哈希相同,因为加密的哈希从未解密过?

我现在用来获取散列的代码示例:

代码语言:javascript
运行
复制
KeySpec ks = new PBEKeySpec(password, salt, 10, 512);
SecretKeyFactory kf = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA512");
SecretKey sk = kf.generateSecret(ks);

byte[] hash = sk.getEncoded();

我要添加一个代码:

代码语言:javascript
运行
复制
Cipher cipher=Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, privateKey);
byte [] encryptedHash=cipher.doFinal(hash);
EN

回答 1

Security用户

回答已采纳

发布于 2020-08-11 13:08:20

  1. 加密散列密码并不比添加胡椒更好,尽管你在引用的答案中看到了什么。它在功能上是等价的,但在计算上更密集(浪费),它增加了引入bug的机会。
  2. 你不需要一个特殊的库来添加胡椒粉。因为您有一个处理salt的库,所以您只需要用hashPassword(thePassword, theSalt)替换代码hashPassword(thePassword, the128bitRandomPepper + theSalt)+是Java中的字符串连接操作符。
  3. RSA是一种非对称加密算法。在这种情况下,这一点都不适合。只是不要加密。但是如果你真的需要,使用AES-GCM (对于那些想知道为什么GCM:它主要是强迫OP正确处理IV)。然后在这里张贴你的完整计划,让它进行审查,因为你可能仍然会犯错误。
  4. 只是不要加密,而是使用您的库,如第1点所述。

要回答您引用的两个链接中的声明:

  • 从堆叠溢出来自security.SE:可以旋转加密密钥。然而,一旦数据库被破坏,这是无用的:要么加密是好的,更改密码或旋转密钥是无用的;要么加密是弱的,密码需要更改。
  • 从堆叠溢出:加密比散列更安全。这是错误的。
  • 从堆叠溢出“因为他知道盐和输出,他可以用暴力强迫胡椒”同样适用于加密。这不是把胡椒当作钥匙来处理的问题。
票数 4
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/236924

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档