这是一个关于我的安全过程是否适合我存储的信息的问题。
我正在使用带有 SQL后端的 ASP.NET 4.0 构建一个网站,并且需要知道我的安全性在密码和哈希等方面将如何保持。
我不存储有关某人的任何关键信息 - 没有real names, addresses, credit card
细节或类似的东西......只是email and username
。
现在,我故意省略一些细节,因为我不确定告诉你它们是否会削弱我的安全性,但如果不是,我可以稍微透露更多。
这是我的做法:
50 chars
用户使用他们的电子邮件和一个唯一的用户名注册,最长可达- 他们创建一个密码(最少
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
?- 通过透露我如何加入密码和
salt
在一起,这会削弱我的安全性吗?