我在C中创建一个允许用户注册和登录的程序。当用户注册时我想将他的用户名和密码保存在文件中。
据我所知,最好的方法是在密码末尾添加一个随机盐,然后存储盐渍密码的安全散列(例如SHA-1)。
我的问题是:如果我在本地存储文本文件中的用户名,哈希值和盐,那么是什么阻止攻击者只用他自己的盐将文件中的哈希和盐更改为他自己的SHA-1哈希,然后使用他的登录新密码?
感谢。
答案 0 :(得分:1)
您似乎只有一台服务器,它托管应用程序,还有用户名和哈希密码。在此配置中,没有针对攻击者为root的完美保护。
但是,您可以尝试使用一些好的功能:
答案 1 :(得分:1)
这取决于攻击者是否只能访问此密码文件,或者他是否也可以访问可执行文件。在后一种情况下,你只能更难以交换哈希值,但你不能完全阻止它。
对于第一种情况,on可以使用HMAC来验证存储的哈希值:
攻击者无法为自己的哈希生成正确的HMAC,只要他不知道您的应用程序中的密钥即可。所以我们得到的是,密码文件不能被改变,但是你的应用程序,安全性集中在你的应用程序的密钥。加密/解密密码文件也可以达到同样的效果。
P.S。请不要使用SHA - 来存储密码,而是使用带有BCrypt,PBKDF2或SCrypt等成本因子的哈希函数。*