1

这是一个关于我的安全过程是否适合我存储的信息的问题。

我正在使用带有 SQL后端的 ASP.NET 4.0 构建一个网站,并且需要知道我的安全性在密码和哈希等方面将如何保持。

我不存储有关某人的任何关键信息 - 没有real names, addresses, credit card细节或类似的东西......只是email and username

现在,我故意省略一些细节,因为我不确定告诉你它们是否会削弱我的安全性,但如果不是,我可以稍微透露更多。

这是我的做法:

  1. 50 chars用户使用他们的电子邮件和一个唯一的用户名注册,最长可达
  2. 他们创建一个密码(最少6 chars)使用键盘上的任何字符(我对输入进行 HTMLEncode 并使用parameterized存储过程,所以我不限制字符)
  3. 我向他们发送了一封带有链接的电子邮件,以验证他们是真实的。
  4. 我使用 FormsAuthentication 设置身份验证 cookie,但我SSL目前没有使用...我了解通过普通方式发送身份验证详细信息的含义,http但我已要求我的主机添加证书,以便它应该很快准备好。

这是我需要确定的哈希位!

100我从以下字符集中创建了一个随机字符盐(我只使用 System.Random 类,什么都没有cryptographic) -abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ0123456789!£$%^*()_{}[]@~#<,>.?

然后将其与密码合并,然后使用SHA-512 (SHA512Managed class)数万次散列(几乎2 seconds on my i7 laptop需要生成最终散列)。

然后将这个最终哈希转换为base64字符串,并与数据库中已经哈希的密码进行比较(盐也存储在数据库的另一列中)

几个问题(SSL暂时忽略,我只是还没有买证书,但它会在一个星期左右准备好):

  1. 这让你觉得足够安全吗?我知道存在一定程度的安全性,只要有足够的时间和资源,任何东西都是易碎的,但考虑到我不存储关键数据,这似乎足够了吗?

  2. 透露我对密码进行哈希处理的实际次数会削弱我的安全性吗?

  3. 100字符盐对字符盐有什么影响吗20
  4. 通过透露我如何加入密码和salt在一起,这会削弱我的安全性吗?
4

2 回答 2

4

因此,让我们尝试一一回答您的问题:

这让你觉得足够安全吗?我知道存在一定程度的安全性,只要有足够的时间和资源,任何东西都是易碎的,但考虑到我不存储关键数据,这似乎足够了吗?

不,它绝对不够“安全”。

没有看到代码,很难说更多。但是,您正在做顺子SHA512而不是做 HMAC,这一事实表明存在一个问题。不是因为您需要使用 HMAC,而是因为大多数为此目的而设计的算法都在后台使用 HMAC(出于多种原因)。

而且似乎您正在做的事情hash = SHA512(hash)(仅从您的措辞来看)被证明是不好的。

所以没有看到代码,很难确定,但它没有指向正确的方向......

透露我对密码进行哈希处理的实际次数会削弱我的安全性吗?

不,不应该。如果是这样,那么您在算法的其他地方有问题。

100 个字符的盐与 20 个字符的盐有什么区别吗?

没有。salt所做的只是使哈希值唯一(迫使攻击者分别攻击每个密码)。你所需要的只是一种足够长的盐,在统计上是独一无二的。多亏了生日问题,128 位对于 1/10^12 的碰撞机会已经绰绰有余。这对我们来说已经足够了。所以这意味着 16 个字符是盐效力的上限。

这并不意味着使用更长的盐是不好的。这只是意味着使其长度超过 16 个字符并不会显着提高它提供的安全性......

通过揭示我如何将密码和盐结合在一起,这会削弱我的安全性吗?

如果是这样,那么您的算法存在严重缺陷。如果是这样,它就相当于通过默默无闻的安全性

真正的答案

真正的答案是不要重新发明轮子。像 PBKDF2 和 BCRYPT 这样的算法正是为了这个目的而存在的。所以使用它们。

更多信息(请注意,这些都是关于 PHP 的,但这些概念 100% 适用于 ASP.NET 和 C#):

于 2013-05-28T15:42:43.420 回答
2
  1. 理论上,您的哈希方案听起来不错。在实践中,听起来你已经推出了自己的加密货币,这很糟糕。使用bcryptscryptpbkdf2。所有这些都是由安全专业人员设计的。
  2. 不是真的,但我不认为任何人都需要知道这一点。
  3. 不,它只需要对每个用户都是唯一的。salt的目的是防止预先计算哈希/彩虹表攻击。
  4. 一旦您使用 bcrypt(或 scrypt 或 pbkdf2),这将不适用

http://security.stackexchange.com有一些关于该主题的主题,您应该查看它们。

一些额外的注意事项 - 严重的攻击者会比你的笔记本电脑更快地破解 sha512 哈希。例如,您可以从 Amazon 或类似设备租用带有几个 Tesla GPU 的服务器,然后以每秒数十亿哈希的速度开始破解。Scrypt 努力通过使用内存密集型操作来防止这种情况发生。

密码最少 6 个字符是不够的,至少要 8 个。相关图像,我没有验证时间,但它给出了粗略的估计并给了你大致的想法(不包括字典攻击,它可以针对更长的密码): 密码破解次数

于 2013-05-28T09:25:51.150 回答