Security .NET3.5-使用System.Cryptography对密码进行哈希运算

Security .NET3.5-使用System.Cryptography对密码进行哈希运算,security,.net-3.5,encryption,cryptography,passwords,Security,.net 3.5,Encryption,Cryptography,Passwords,我对安全问题有点生疏,尤其是密码学 在我们正在构建的应用程序(基于.net 3.5构建的ASP.net应用程序)中,我们目前正在使用数据库来保存用户身份验证信息(此时不选择AD等)。 其目的是使用SHA256Managed on user creation对密码进行单向盐析散列,然后使用相同的方法验证用户。 理想情况下,我们不希望使用任何第三方dll的哈希算法,除非绝对必要,以避免任何不必要的依赖关系 问题:- 1.有没有比盐腌单向散列更好的选择? 2.SHA256是合理可靠/安全的选择,还是我

我对安全问题有点生疏,尤其是密码学

在我们正在构建的应用程序(基于.net 3.5构建的ASP.net应用程序)中,我们目前正在使用数据库来保存用户身份验证信息(此时不选择AD等)。 其目的是使用SHA256Managed on user creation对密码进行单向盐析散列,然后使用相同的方法验证用户。 理想情况下,我们不希望使用任何第三方dll的哈希算法,除非绝对必要,以避免任何不必要的依赖关系

问题:- 1.有没有比盐腌单向散列更好的选择? 2.SHA256是合理可靠/安全的选择,还是我们应该考虑其他选择? 3.SHA256在System.Cryptography中的管理实现在it速度等方面是否足够好,或者我们是否应该考虑第三方替代方案


任何关于方法/实现的指针都会有帮助。

是的,SHA256没有问题,当然,对于大多数用例,SHA256Managed将“足够快”(我相信你不会期望每秒验证1000次登录请求,即使你验证了,网站的其余部分仍然会使登录请求相形见绌……)

但是,您考虑过框架内置的东西吗?他们已经完成了安全存储凭据以及实现所有支持功能(如密码重置等)方面的所有艰苦工作

  • 是的,视网膜扫描(只是开玩笑)。将密码存储为盐散列是正确的方法
  • SHA256很好。显然,我不知道您正在使用的应用程序的类型,但SHA256适合绝大多数项目。如果需要,您可以选择更高的密钥长度(384512)。请咨询您的安全架构师
  • SHA256Managed(我们说的是.net,对吗?)很好。我们在项目中使用它
  • 请考虑阅读以下内容:

    那天我做了一些研究,大家一致认为BCrypt是进行单向散列的最佳方法之一

    您可以在此处看到C#实现:

    此外,BCrypt的优点在于,您可以决定希望它通过多少轮

    例如,你可以让加密大约需要1秒。对于一个用户来说,这是一个可以接受的等待时间,但是对于试图用暴力攻击你的人来说,1秒是永恒的

    我不是安全专家,所以请把我在这里说的话当作一句话。你可以将一句话发送到你的BCrypt方法:)

    此外,阿特伍德在这方面提出了一些建议:

    更新

    自回答此问题以来,NuGet使使用BCrypt变得更加容易:


    我不能保证那里有任何特定的实现,所以请看一下代码,但这会使使用和集成BCrypt变得更容易。

    使用salt存储密码散列,使其正确无误。然而,很容易出错。当然,现在SHA256可以阻止坏人,但再过几年。突然之间,SHA256似乎不再那么安全了。您需要使用一种未来的哈希算法

    只做一次SHA256的问题是速度太快,而且一个具有强大硬件的程序可以轻松为大量盐生成彩虹表……要解决这个问题,您需要执行关键点拉伸……kI不会给您上关键点拉伸的课,但人们谈论的bcrypt实现会执行关键点拉伸。如果您想要一个比bcrypt更现代的替代品,它在.NET中使用HMACSHA256或512,我建议您使用以下API:


    谢谢CubanX,我肯定会查找比bcrypt弱一点的BCryptA,但它已经是.net框架的一部分:PBKDF2-SHA-1使用.Yes。我指的是一个.NET实现。感谢您的链接。您好,因为有一个偏好使用内置算法作为.NET框架本身的一部分,我认为这可能是我现在将要使用的选项。谢谢你的帮助。关于是否使用SHA256Managed/SHA512Managed的决定尚待决定。-1因为声称SHA-2适用于密码哈希。太快了。使用PBKDF2、bcrypt或scrypt代替。嗯,我在2.5年前回答了这个问题。SHA256在当时被认为是好的。我同意密码散列算法需要明智地选择,你的所有建议都是有效的(但微软需要做得更好,使所有这些算法作为标准框架的一部分随时可供开发人员使用)事实上..我听说过会员资格的东西,但还没有真正探讨它。你的评论提醒我,我需要这样做。谢谢!:-)