首页 文章

存储盐以及散列密码的安全性如何

提问于
浏览
10

如果您查看了asp.net成员资格系统的表模式,他们会将原始密码的哈希值与用于生成密码的盐一起存储 . 看下面的架构,

dbo.aspnet_Membership

ApplicationId
UserId
Password
PasswordFormat
PasswordSalt
MobilePIN
Email
. . .
  • 如果攻击者掌握了数据库,他是不是更容易从盐中打开原始密码并散列密码?

  • 在查看一些记录之后,似乎为每个密码生成了新的盐 . 这有什么意义?

  • 您是否会在代码中推荐这种方法或硬编码常量盐

相关

Are salts useless for security if the attacker knows them?

3 回答

  • 7

    有关ASP.NET密码/哈希/盐存储的详细信息,请参阅http://msdn.microsoft.com/en-us/library/aa478949.aspx

    攻击者知道盐 - 你的安全必须以一种方式设计,即使知道盐,它仍然是安全的 .

    What does the salt do ?

    Salt使用预先计算的"rainbow-tables"帮助抵御暴力攻击 .
    对于攻击者来说,盐使蛮力更加昂贵(在时间/内存方面) .
    计算这样一个表是很昂贵的,通常只有当它可以用于多个攻击/密码时才会这样做 .
    如果您对所有密码使用相同的盐,则攻击者可以预先计算此类表,然后将您的密码暴力破解为明文...
    只要你为每个密码生成一个新的(最好的cryptogrpahically强)随机盐,你想存储哈希就没有问题 .

    IF you want to strengthen the security further
    您可以多次计算哈希值(散列哈希值等) - 这并不是自己发明的 - 有经过验证的标准方法可以这样做,请参阅例如http://en.wikipedia.org/wiki/PBKDF2http://msdn.microsoft.com/en-us/library/system.security.cryptography.rfc2898derivebytes.aspx

    NOTE:

    现在使用这种机制是因为"CPU time"(可用于彩虹表/蛮力等攻击)正在变得越来越广泛(例如,亚马逊的 Cloud 服务是世界上最快的超级计算机之一,任何人都可以使用相对较少的数量)!

  • 0

    盐的目标是减慢而不是完全阻止攻击数据库的可能性 . 但它大大减缓了黑客的速度!从几秒钟到几秒钟,取决于算法,盐的长度,以及其他因素,小时,月或宇宙寿命 .

    也就是说,您必须使用盐渍密码存储盐,否则无法在事后验证密码 .

    您可以采取一些措施来使整个事情更安全:

    • 切勿使用相同的盐 . 每个密码应该不同

    • 使用长盐 . GUID通常是一种流行的选择 . 我通常通过获取随机数的MD5哈希来生成它们

    • 如果需要,可以多次运行哈希算法 . 这会延长强制密码所需的时间 .

  • 13

    我不会使用MD5 SHA1更安全 . 但说实话,如果您对安全性和加密技术一无所知,那么这些功能就是一种方式 . 因此,没有人会失去那么多时间来攻击那些不会给他一些钱的东西:D . 如果您认为使用RSA不安全,但使用非常非常长的数字作为密钥 .

相关问题