我正在用 C 编写一个程序,允许用户注册和登录。当用户注册时,我想将他的用户名和密码保存在一个文件中。
据我所知,最好的方法是在密码末尾添加一个随机盐,然后存储加盐密码的安全哈希值(例如 SHA-1)。
我的问题是:如果我在本地将用户名、散列和盐存储在文本文件中,是什么阻止了攻击者仅将文件中的散列和盐更改为他自己的 SHA-1 散列和他自己的盐,然后使用他的登录新密码?
谢谢。
最佳答案
这取决于攻击者是否只能访问此密码文件,或者他是否也可以访问可执行文件。在后一种情况下,您只能使交换哈希变得更加困难,但不能完全阻止它。
对于第一种情况,on 可以使用 HMAC验证存储的散列:
- 然后您的应用程序将包含一个 secret 的强 key ,并将使用该 key 计算散列的 HMAC。
- 此 HMAC 可以与文件中的密码哈希一起存储。
- 在读取哈希进行验证时,软件会再次计算HMAC,并与存储的进行比较。
只要攻击者不知道您应用程序中的 key ,他就无法为自己的哈希生成正确的 HMAC。所以我们得到的是,密码文件不能被你的应用程序更改,安全性集中在你的应用程序的 key 中。同样可以通过加密/解密密码文件来实现。
附言请不要使用 SHA- 来存储密码,而是使用具有成本因子的哈希函数,如 BCrypt、PBKDF2 或 SCrypt。*
关于c - 在本地安全地存储密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40504841/