【问题标题】:What is PBEWithMD5AndDes?什么是 PBEWithMD5AndDes?
【发布时间】:2019-07-09 23:54:43
【问题描述】:

我正在学习 Java 中的加密算法,偶然发现了这个算法:

  SecretKey key = SecretKeyFactory.getInstance(
                    "PBEWithMD5AndDES").generateSecret(keySpec);

我知道它代表使用 MD5 和 DES 算法的基于密码的加密。 我知道 MD5 和 DES 是两个独立的算法加密密钥,但 PBEWithMD5AndDes 作为算法究竟意味着什么?

网上没有太多资源可以很好地解释这个“算法”。

我希望有人可以简单而简短地解释这与普通 MD5 或普通 DES 算法有何不同。

【问题讨论】:

  • 它比说只使用MD5更安全?
  • MD5 碰撞可以很快找到,如果可能的话不要再使用它了
  • 那么结合MD5和DES是如何解决这个问题的呢?
  • 它减慢了穷举搜索的速度,并且使查找 MD5 冲突变得有些困难,尽管尽可能尝试使用更现代的 PBE 算法,例如 PBKDF2、SHA256withAES、Argon2、..
  • 是的@Daredevil 像瘟疫一样避免它。不安全且过时。

标签: java encryption


【解决方案1】:

扩展上一个答案

PBEWithMD5AndDes 作为算法究竟意味着什么?

PBE 使用由密码、随机盐和迭代次数生成的加密密钥,请参阅 KeySpec 参数。

KeySpec pbeSpec = new PBEKeySpec(password.toCharArray(), psswdSalt, PBKDF_INTERATIONS, SYMMETRIC_KEY_LENGTH)

这个想法是 - 密码往往很短且不够随机,因此很容易猜到。使用迭代次数应该会使猜测变得更加困难。

PBEWithMD5AndDes正在使用 MD5 和 DES 生成密钥,请参阅example code。现实生活中的实现应该使用更多的迭代次数

这与仅使用 MD5 或仅使用 DES 有何不同?这就是我想知道的。

理论上 - 你可以使用纯 MD5 或 DES,但今天的计算机可以很快猜出密码。

请注意,DES 和 MD5 现在已过时。 MD5 冲突可以在一分钟内在商品硬件上发现,而 DES 使用的是 64 位密钥,这在今天被认为是安全的。

【讨论】:

  • 所以结合使用MD5和DES更安全?
  • @Daredevil 组合可能比纯哈希更安全,但如果没有其他证明,我认为它通常不够安全
  • MD5 和 DES 是针对不同事物的不同算法。 MD5是散列算法,DES是对称加密算法。这不像你可以使用其中一个。你必须同时使用两者。您可以做的是,对两者使用更好的算法,例如 SHA256 + AES。在实践中,您可以检查 PBKDF2 算法以获得更好的 PBE 实现。
【解决方案2】:

Java 加密基础结构中的 PBEWithMD5AndDES 是https://docs.oracle.com/javase/9/docs/specs/security/standard-names.html#cipher-algorithm-names 中描述的算法。该算法是 PKCS#5 (https://www.rfc-editor.org/rfc/rfc2898#section-6.1.1) 中描述的算法。

基本上,在第一步中,算法将密码转换为密钥。这称为密钥派生,并使用 MD5 作为“加扰”功能。输出提供了适合CBC模式下DES的IV和密钥,用于第二步加密。

该算法不再安全,主要是因为 DES 仅使用 56 位密钥,这对于现代攻击来说太短了(例如https://crack.sh/)。尽管 MD5 容易发生冲突,但这实际上可能不是问题(冲突只会为给定密钥提供替代密码,但不会传递密钥)。

【讨论】:

    【解决方案3】:

    PBE 代表“基于密码的加密”,一种从密码(文本)派生加密密钥(二进制数据)的方法。

    【讨论】:

    • 这与仅使用 MD5 或仅使用 DES 有何不同?这就是我想知道的。
    • @Daredevil 加密需要密钥,而不是密码。 DES 提供(不安全的)加密,但为了加密,您需要一个加密密钥。人们可能会尝试对密码进行哈希处理以导出加密密钥。这称为密码基密钥派生 (PBKDF)。 MD5 是一种散列函数,但它不安全,尤其不适用于 PBKDF——安全性的主要要求之一是 PBKDF 需要很慢,以便攻击者无法暴力破解它们。 MD5 不满足此要求。请参阅littlemaninmyhead.wordpress.com/2017/04/22/… 中的第 6 点。
    • PBEWithMD5AndDes 的 jasypt 库实现默认使用 8 字节随机盐加上 1000 次哈希算法迭代。此外,默认情况下,未加密的盐作为前缀输出加密字节以使其可用于解密。我不清楚这些措施是否足以克服 MD5 和 DES 算法的固有弱点。这可能就是为什么 PBES1 被新应用程序弃用而支持 PBES2 的原因(参见 RFC2898)。
    猜你喜欢
    • 2010-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-23
    • 2014-08-01
    • 1970-01-01
    相关资源
    最近更新 更多