首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我的密码存储技术是否足够强大?

我的密码存储技术是否足够强大?
EN

Stack Overflow用户
提问于 2013-05-28 09:13:50
回答 2查看 280关注 0票数 1

这是一个关于我的安全进程是否足以满足我所存储的信息类型的问题。

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

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

现在,我故意遗漏一些细节,因为我不确定是否告诉您会削弱我的安全性,但如果不是,我可以透露更多。

我就是这样做的:

  1. 用户使用他们的电子邮件和唯一的用户名注册到50 chars long
  2. 他们创建一个密码(使用键盘上任何字符的最小6 chars) (我使用输入,并且正在使用parameterized存储过程,这样我就不会限制字符)
  3. 我给他们发了一封带有链接的电子邮件,以验证他们是真实的。
  4. 我使用FormsAuthentication来设置一个auth cookie,但我现在不使用SSL .我理解在普通http上发送auth细节的含义,但是我已经要求我的主机添加证书,所以它应该很快就准备好了。

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

我从下面的char集合创建一个随机的cryptographic)字符盐类(我只使用System.Random类,nothing 100 - abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ0123456789!£$%^*()_{}[]@~#<,>.? )。

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

然后将最后的散列转换为base64字符串,并将其与数据库中已经散列的密码进行比较( salt也存储在DB的另一列中)。

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

  1. 你觉得这样够安全吗?我知道有一定程度的安全性,只要有足够的时间和资源,任何事情都是可以打破的,但考虑到我没有存储关键数据,这看起来足够吗?
  2. 泄露密码的实际次数会削弱我的安全性吗?
  3. 100字符盐与20字符盐有什么区别吗?
  4. 通过揭示我是如何将密码和salt连接在一起的,这会削弱我的安全性吗?
EN

回答 2

Stack Overflow用户

发布于 2013-05-28 15:42:43

所以,让我们试着逐一回答你的问题:

你觉得这样够安全吗?我知道有一定程度的安全性,只要有足够的时间和资源,任何事情都是可以打破的,但考虑到我没有存储关键数据,这看起来足够吗?

不是的。这是绝对没有“足够安全”。

如果没有看到代码,就很难说得更多。但是,您正在做的是一个直接的SHA512而不是一个HMAC,这说明了一个问题。这并不是因为您需要使用HMAC,而是因为大多数为此目的而设计的算法都在幕后使用HMAC (出于几个原因)。

而且似乎您正在做的hash = SHA512(hash) (只是从您的措辞),这是被证明是不好的。

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

泄露密码的实际次数会削弱我的安全性吗?

不,不应该。如果是的话,你在算法的其他地方就有问题了。

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

不是的。salt所做的就是使哈希惟一(迫使攻击者单独攻击每个密码)。你所需要的只是一个足够长的盐,在统计上是独一无二的。由于有了生日问题,128个位足以满足1/10^12的碰撞机会。对我们来说已经够多了。因此,这意味着16个字符是盐有效性的上限。

这并不意味着用更长时间的盐是不好的。它只是意味着使它超过16个字符并不能显著增加它所提供的安全性.

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

如果是这样的话,你的算法就有严重的缺陷。如果是这样的话,它就相当于默默无闻

真正的答案

真正的答案是不要重新发明轮子。像PBKDF2和BCRYPT这样的算法正是为此目的而存在的。那就用它们吧。

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

  • YouTube视频密码存储与黑客攻击
  • 博客帖子-彩虹桌死了
  • Blog Post -正确地发送密码
  • 散列RFC
  • 博客帖子-七种搅乱BCrypt的方法
票数 4
EN

Stack Overflow用户

发布于 2013-05-28 09:25:51

  1. 从理论上讲,你的散列计划听起来不错。在实践中,听起来您有翻滚你自己的密码,这是不好的。使用bcrypt氪石pbkdf2。所有这些都是由安全专家设计的。
  2. 不完全是,但我不认为任何人都需要知道。
  3. 不是的。它只需要对每个用户都是独一无二的。salt的目的是防止预计算散列/彩虹表攻击。
  4. 一旦你使用了bcrypt (或者氪星或pbkdf2),这就不适用了。

http://security.stackexchange.com有一些关于这个主题的话题,你应该去看看它们。

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

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16788202

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档