Dee*_*ons 11 c# encryption passwords hash cryptography
如果您查看了asp.net成员资格系统的表模式,他们会将原始密码的哈希值与用于生成密码的盐一起存储.看下面的架构,
ApplicationId
UserId
Password
PasswordFormat
PasswordSalt
MobilePIN
Email
. . .
Run Code Online (Sandbox Code Playgroud)
如果攻击者掌握了数据库,他是否更容易从盐中打开原始密码并散列密码?
在查看一些记录之后,似乎为每个密码生成了新的盐.这有什么意义?
Yah*_*hia 13
有关ASP.NET密码/哈希/盐存储的详细信息,请参阅http://msdn.microsoft.com/en-us/library/aa478949.aspx
攻击者"被允许"知道盐 - 你的安全必须以一种方式设计,即使知道盐,它仍然是安全的.
盐有什么作用?
Salt使用预先计算的"彩虹表"帮助抵御暴力攻击.
对于攻击者来说,盐使蛮力更加昂贵(在时间/内存方面).
计算这样一个表是很昂贵的,通常只有当它可以用于多个攻击/密码时才会这样做.
如果您对所有密码使用相同的盐,则攻击者可以预先计算此类表,然后将密码暴力强制为明文...
只要您为每个密码生成一个新的(最好的密码强)随机盐存储哈希没有问题.
如果你想进一步加强安全性
你可以多次计算哈希值(散列哈希等) - 这不会花费你太多但是它使得暴力攻击/计算"彩虹表"更加昂贵. ..请不要发明自己 - 有经过验证的标准方法,例如http://en.wikipedia.org/wiki/PBKDF2和http://msdn.microsoft.com/en-us/library /system.security.cryptography.rfc2898derivebytes.aspx
注意:
使用这样的机制是这些天mandatrory因为"CPU时间"(可用于像彩虹表/蛮力等攻击)的越来越广泛使用(例如见的事实,亚马逊的云服务是最快的前50名中全世界的超级用户,任何人都可以使用相对较少的数量)!
盐的目标是减慢而不是完全阻止攻击数据库的可能性.但它大大减缓了黑客的速度!从几秒钟到几秒钟,取决于算法,盐的长度,以及其他因素,小时,月或宇宙寿命.
也就是说,您必须使用盐渍密码存储盐,否则无法在事后验证密码.
您可以采取一些措施来使整个事情更安全: