【发布时间】:2013-05-23 04:43:58
【问题描述】:
这是一个关于我的安全流程是否适合我存储的信息类型的问题。
我正在使用带有 SQL 后端的 ASP.NET 4.0 构建一个网站,并且需要知道我的安全性在密码和哈希值等方面的表现如何。
我不存储任何关于某人的重要信息 - 没有 real names, addresses, credit card 详细信息或类似的东西......只是 email and username。
目前,我故意省略了一些细节,因为我不确定告诉你它们是否会削弱我的安全性,但如果不是,我可以稍微透露更多信息。
这是我的做法:
- 用户使用他们的电子邮件和唯一的用户名进行注册,最高可达
50 charslong - 他们创建密码(最少
6 chars)使用键盘上的任何字符(我对输入进行HTMLEncode 并使用parameterized存储过程,所以我不限制字符) - 我向他们发送了一封电子邮件,其中包含一个链接以验证他们是真实的。
- 我使用 FormsAuthentication 来设置身份验证 cookie,但我目前没有使用
SSL...我了解通过普通http发送身份验证详细信息的含义,但我已要求我的主机添加证书所以它应该很快就准备好了。
这是我需要确定的哈希位!
我从以下字符集中创建了一个随机的 100 字符盐(我只使用 System.Random 类,什么都没有cryptographic) - abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ0123456789!£$%^*()_{}[]@~#<,>.?
然后将其与密码合并,然后使用 SHA-512 (SHA512Managed class) 散列数万次(需要将近 2 seconds on my i7 laptop 来生成最终散列)。
这个最终的哈希然后被转换为base64 字符串,并与数据库中已经哈希的密码进行比较(盐也存储在数据库的另一列中)
几个问题(暂时忽略SSL的缺失,我只是还没有购买证书,但它会在一周左右准备好):
您觉得这是否足够安全?我知道存在一定程度的安全性,只要有足够的时间和资源,任何东西都可能被破坏,但鉴于我不存储关键数据,这似乎足够了吗?
透露我对密码进行哈希处理的实际次数会削弱我的安全性吗?
-
100字符盐与20字符 1 相比有什么不同吗? - 通过透露我如何将密码和
salt连接在一起,这会削弱我的安全性吗?
【问题讨论】:
-
我会说这么多次散列并不能真正提高安全性。如果您仍然想这样做,请查看此页面以防止伤害自己:programmers.stackexchange.com/questions/115406/…
-
您可能会在security.stackexchange.com得到更好的答案...
-
@DennisJaheruddin 它绝对有助于提高安全性 - 它使蛮力强制哈希变得更慢。此外,您提供的链接的答案非常糟糕 - 只需坚持使用众所周知的散列方案,如 bcrypt,一切都很好。
-
@sAnS 感谢您通过编辑帖子来改进 SO。但是,there's really no reason 用于任意粗体强调,您似乎introduce in various posts。它只会引入噪音,实际上可以被认为是有害的。
-
@Xavi López 感谢您的说明,我只是试图指出帖子中的目标。下次我将尝试仅指出编码部分。您还可以指出我们需要的一些场景在帖子中使用粗体强调..
标签: asp.net security passwords