我认为这可能是一个愚蠢的问题,但我已经变得非常困惑,不知道该怎么做才是最好的。
当对密码哈希进行加盐时,盐也应该被哈希还是保留明文?
注意:我正在使用SHA-256对密码进行哈希,并且盐是预定义字符串,因为一次只会存储一个密码。
TIA
Chris(Shamballa)。
没关系。
盐的作用是防止预先计算攻击。
无论如何,哈希盐或仅使用它,结果都将添加相同的数据作为盐。如果您对盐进行哈希处理,您实际上只是更改了盐。通过先对其进行哈希处理,您将其转换为不同的字符串,然后将其用作盐。没有理由这样做,但如果您这样做,它不会造成任何错误。
您只需要保持一致并每次使用相同的方法,否则您将得到不同的密码哈希值。
盐值不应该被哈希,因为在哈希之前需要将原始值与密码组合。
不,您不应该对盐进行哈希。盐是明文的,需要您重新计算密码并将其与存储在哈希密码文件中的密码进行检查。
但是,如果您需要一个强大的加盐过程,可以按照以下方式计算加盐密码:
SaltedHashedPwd = H(H(H(H(.....H(PWD-k+SALT-k)+SALT-k)+SALT-k).....)+SALT-k+N
H是哈希函数 SALT-k是您用作盐的k随机字符串 PWD-k是k密码 (每个密码都有不同的盐) N是您组成H函数的迭代次数
在PKCS#5标准中,它使用N = 1000!
这样一来,字典攻击就不可能了,因为对于字典中的每个单词和密码文件中的每个SALT,攻击者都需要计算哈希值。时间上太昂贵了!
我认为N = 100对您的用途足够了 :-)
由于盐需要与哈希值一起保存(或者至少必须能够与哈希值一起检索),攻击者可能会获取到盐和已哈希的密码。在我的一些应用程序中,我将盐以加密的方式存储在数据库中(使用应用程序唯一知道的密钥)。我的想法是,如果将未加密的盐与哈希密码一起存储,那么破解密码就会更容易,因为黑客可以检索密码表(并且知道或假设哈希算法),通过对字典中的每个单词进行哈希,然后加上他也可以访问的盐来查找众所周知的单词的哈希匹配(字典攻击)。如果盐被加密,除非他还可以访问应用程序知道的加密密钥,否则这样的攻击是不可能的。
(如果有人发现这种逻辑上的错误,请评论。)