【问题标题】:Best Encryption technique [duplicate]最佳加密技术 [重复]
【发布时间】:2013-07-06 23:27:00
【问题描述】:

我正在使用 PHP。我想要一个安全快速的密码加密系统。将密码散列一百万次可能更安全,但也更慢。如何在速度和安全之间取得良好的平衡? 我想知道php中最好的加密方法以及如何应用它。

【问题讨论】:

  • 对密码进行一百万次散列比简单地散列一次既慢又不安全
  • 哇,这么多糟糕的答案,人们说 MD5 不好,却没有提供解释原因的资源。加密不是散列。如果你加密了一些东西,你可以解密它。意思是,你可以获得原文。散列的要点是没有人知道原始文本是什么。每个散列算法都容易受到彩虹表攻击,这对于某些算法来说是不可行的,因为不存在足够的计算能力。此外,较慢的哈希算法 = 好。如果它对您来说很慢,那么对攻击者来说也很慢。这就是你想要的。
  • @user2386164 - 慢是好的,同意;但在反复散列反复减少熵时不会(deadliestwebattacks.com/category/crypto
  • 来自维基百科的来源:en.wikipedia.org/wiki/MD5#Collision_vulnerabilities :- “在 2005 年,研究人员能够创建具有相同哈希的 PostScript 文档 [24] 和 X.509 证书 [25] 对。那年晚些时候, MD5 的设计师 Ron Rivest 写道,“md5 和 sha1 显然都被破坏了(就抗碰撞性而言)。”[26]”

标签: php mysql passwords password-hash


【解决方案1】:

使用 SHA512 http://php.net/manual/en/function.hash.php。 SHA512 未破解。我建议使用盐:在散列之前附加到密码的一些随机字符串。如果攻击者获得对包含密码和盐的数据库的访问权限,这可以防止预先计算的彩虹表,但不能防止字典攻击。 SHA512(密码+盐)->哈希 在数据库中存储哈希和盐 检查密码时,检索用户对应的盐,将其与密码连接,散列并与存储的散列进行比较。 在这里阅读:How long to brute force a salted SHA-512 hash? (salt provided)

回想一下您的问题,尤其是您的陈述“将密码散列一百万次可能更安全,但也更慢。如何在速度和安全性之间取得良好的平衡”。事实上,重复散列将保护您免受字典攻击,因为计算字典中的所有散列的计算成本非常高。我在这里没有教你任何东西。从我给你的第一个链接来看,计算一个 SHA512 哈希大约需要 46 毫秒,这比较长。当你处于军备竞赛的环境中时,我能想到以下可能影响你决定的因素: - 增加计算能力(更多的 CPU 核心和 GPU 计算) - 随着时间的推移改进算法 - 攻击者可用的金额 - 如果被破解,离开您的网站的价值(如果低,则不值得努力) 反对 - 您可以使用的 CPU 处理能力 根据经验,我会尽可能多地散列,以免影响我的网站性能。考虑到每秒的登录次数,您可以粗略地计算出在不影响网站性能的情况下您可以负担的 CPU 电量。

最后一条评论:假设黑客已经可以访问包含用户名和散列密码的表,此时您可能会更担心他们可以在您的网站上做的所有坏事。

【讨论】:

  • 为什么是 SHA512 而不是漩涡?
  • 是的,确实,您可以使用任何强哈希算法。
  • 没错。那么,如果有数十种缓慢、大而安全的算法,为什么要推荐一个特定的算法呢?为什么是 SHA512 而不是其他的?如果您指定 ONE,那么它背后的原因是什么?个人喜好,在web环境等方面真的很好用吗?是的,sha512 很棒,但也有类似的。为什么将您的答案限制在 1 种算法上?
  • 我提出了一个解决方案,但没有声称它是唯一的解决方案。当您指出这一点时,我立即承认您确实是对的。现在,我真的没有任何隐藏的议程、偏好或任何个人利益从提出 SHA512 而不是任何其他算法。为了满足您的询问,我最多只能承认我在智力上忽略了提及替代方案。我猜这个网站的目的是帮助,在我们犯错时互相纠正,而不是仔细检查人们的缺陷和失败,尤其是当他们诚实地承认自己的错误时。
  • 我的母语不是英语,所以我的 cmets 可能会显得粗鲁,这不是我的本意。我真的以为你在选择算法时有个人偏好或类似的东西。
【解决方案2】:

您不是在寻找加密 - 您在寻找散列。

我建议 openwalls phpass http://www.openwall.com/phpass/

如果您使用的是 PHP5.5,他们有一个密码拥有 API http://uk3.php.net/password

了解更多信息。

MD5(无盐)已经使用了一段时间,周围有大量查找列表,结合现代硬件每秒获得 700K + 密码,“反转”密码根本不需要很长时间。

加了盐更安全,但仍然可以快速破解

【讨论】:

  • 请解释为什么要避免使用 MD5。
  • 我更喜欢 phpass crypt 或 hash 中的哪种方法。
  • HashPassword($password) 对它进行散列和 CheckPassword($password, $hash) 对其进行检查
  • 您可能不会反转密码但会发现冲突(导致相同 MD5 哈希的密码。
  • “反向”是指字典攻击通过尝试许多输入来找到输出
【解决方案3】:

我建议使用新的PHP 5.5 password API。它提供了一种安全的密码散列方法,同时速度足够快。

如果您没有可用的 PHP 5.5,则有一个适用于 PHP 5.3.7+ 的 polyfillhttps://github.com/ircmaxell/password_compat

【讨论】:

    【解决方案4】:

    使用PHPass,它是一个优秀的哈希框架,非常好用!

    【讨论】:

    • pronounced "pH pass"suuuuuure...
    猜你喜欢
    • 2012-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-10
    • 2017-05-24
    • 2011-07-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多