所以我有一个应用程序,我希望用户能够在离线时使用。因此在线时会有密码,当用户离线时我会使用相同的密码。
这不是一个超级隐私敏感的应用程序,但我仍然不会在磁盘上本地存储整个哈希盐渍密码。所以我想,我只是哈希密码并在磁盘上存储生成的哈希的前4位数字。这样,用户仍然可以在线或离线输入相同的密码。
这是一个好主意还是我被误导了?
答案 0 :(得分:1)
一般来说,这个功能是一个坏主意。攻击者甚至不需要SQL注入来破坏密码哈希。
如果存储结果哈希的前4位数字,则可能会产生大量可能的密码。基数16的4位数是16 ^ 4或只有65536个密码,或换句话说它总是需要不超过65536次猜测来获得一些正确的密码......这是可怕的不安全。
加密文件系统也存在类似问题。他们必须能够验证密码,并且他们希望防止脱机暴力。他们通常使用键拉伸,使用bcrypt,scrypt甚至pbkdf2来花费相当数量的RAM和CPU来验证密码是否正确。几千轮的bcrypt应足以防止大多数脱机攻击。
答案 1 :(得分:1)
在本地存储密码哈希时没有任何问题,只需确保您需要像BCrypt这样的慢键派生函数来创建哈希。
没有必要通过互联网传输哈希值,可能的过程可能如下:
这样本地密码哈希看起来与服务器密码哈希不同,你没有透露有关服务器密码哈希的任何信息。由于成本因素较高,暴力破解本地密码需要更多时间。既然你想在本地存储一些东西,最好存储一个安全的哈希,而不是哈希的不安全部分。