首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >密码安全

密码安全
EN

Stack Overflow用户
提问于 2013-05-19 11:43:03
回答 1查看 232关注 0票数 1

目前,我正在使用一种特殊的方案来保护密码,我认为我有一些改进的地方。实现是用Java实现的,所以我更喜欢使用SHA-2 512作为加密形式。

目前,我有一个客户机-服务器模型,因此这些事情可以发生:

  • 客户端想要登录,他会通过网络发送密码,并使用一次普通的SHA-2 512加密。
  • 服务器将密码存储在数据库中,例如SHA-2_512(SHA-2_512(密码)+ salt),内部SHA-2_512(密码)是它通过网络接收到的“加密”密码。
  • 密码检查是在服务器端进行的,没有办法从服务器泄漏任何东西,唯一可能的漏洞是有人可以读出我认为的RAM。

我有以下问题:

  • 当攻击者想要破解密码时,通常会造成碰撞攻击。然而,碰撞攻击是如何足够的?如果密码需要用于其他应用程序,如Outlook.com、Facebook或其他应用程序(可能会使用另一种盐,因为它们与我的应用程序无关),那么碰撞攻击是如何足够的呢?你不需要真正的密码吗?
  • SHA-2512已经使用迭代了吗?即使是这样,我是否应该改变我的加密方法以自动使用多个迭代加上多少迭代是首选的呢?我还读过关于使用随机次数的迭代(在一个范围内),我如何确定地存储随机因子?
  • 我应该为服务器代码中的每一个迭代存储系统机密吗?见http://blog.mozilla.org/webappsec/2011/05/10/sha-512-w-per-user-salts-is-not-enough/。我可以存储一个数组,它可以保存每个迭代的静态秘密,第n个秘密用于第n次迭代。没有人能够知道秘密,它们只计算一次(我想是加密一些随机字符串),然后基本上存储在服务器的RAM中。
  • 目前,我只将输入的密码从客户机发送到服务器,作为SHA-2_512(密码),这个过程应该改进吗?如果应该的话,如何改进?我不能使用盐,因为客户没有可用的盐。

致以问候。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-19 11:53:01

TLDR:您需要使用加密通道(如TLS )发送密码。考虑使用bcrypt进行密码散列。

沙-2 512不是加密算法,而是一种消息摘要算法.加密算法需要密钥和消息来加密。它产生密文。重要的是加密算法有解密算法。

代码语言:javascript
复制
ciphertext = E(key, plaintext);
plaintext = D(key, ciphertext);

消息摘要获取一段明文并生成消息摘要。没有相应的反向机制来获取消息摘要并检索原始消息。也没有秘密钥匙。

代码语言:javascript
复制
digest = hash(plaintext);

如果攻击者能够使用散列访问数据库,攻击者可以通过蛮力强制检索原始密码,并尝试使用哈希算法进行大量猜测。

代码语言:javascript
复制
digest1 = hash(guess1);
digest2 = hash(guess2);    //repeat with lots of guesses

首先,通过网络发送哈希是不安全的。它需要通过一些安全的通信机制(如SSL )发送。如果攻击者能够通过通信拦截哈希,他们可能会找到原始密码。

散列碰撞与强行强制密码不一样。当两个不同的消息生成相同的消息摘要时,会导致哈希冲突。

代码语言:javascript
复制
digest1 = hash(plaintext1);
digest2 = hash(plaintext2);
if ( ( plaintext1 != plaintext2 ) && ( digest1 == digest2 ) )  
    // hash collision

沙-512没有设计用来防止蛮力的迭代.SHA算法集的设计是有效的。在散列密码时添加迭代的原因是为了增加强制密码所需的时间。与拥有数百万密码的攻击者相比,执行合法登录尝试和执行100次迭代所需的成本很小,每个密码都需要100次迭代。增加更多的迭代有助于减少提高处理器速度的影响(这将帮助攻击者更快地尝试更多的迭代)。

您应该将迭代次数作为针对每个用户存储的可配置限制。因此,您存储每个用户的密码哈希、salt和迭代计数。这意味着,在未来,您可以增加迭代次数,以考虑到硬件功率的增加。

以明文方式发送SHA-2 512是不安全的。您应该在加密通道(如SSL )中发送它。

尽管如此,SHA-2并不是设计成一个密码哈希算法.它是为消息验证而设计的,并且是高效的。考虑使用目的构建的密码哈希算法。bcrypt就是一个例子。它被设计成计算困难,并内置盐和迭代。

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

https://stackoverflow.com/questions/16634295

复制
相关文章

相似问题

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