【问题标题】:RC4 Safe to use plaintext as the key to encrypt itself?RC4 使用明文作为密钥加密自己安全吗?
【发布时间】:2013-11-01 17:41:39
【问题描述】:

基本上就是标题所说的。如果我有密码,比如说“APPLEPIE”,当我 RC4 时使用“APPLEPIE”作为密钥是否安全?当您知道密钥和明文或简短且相同时,是否有可能破解 RC4 加密?

【问题讨论】:

  • 你将如何解密它?
  • 我不明白第二句话;如果您知道密钥,则几乎没有理由“破解 RC4 加密”。
  • @GregS 我不明白,加密方式相同。这是为了访问 PIC 芯片。我有一个密码,例如上面的例子,然后我用它自己 RC4 密码。如:messtoEncrypt = toArray("MyPassword") key = toArray("MyPassword") rc4 = new ARC4(key); rc4.encrypt(messtoEncrypt); base64String = messtoEncrypt
  • @owlstead 对于必须的人来说是的,但是总是有原因的。如果我忘记了密码,并且我知道密钥和明文相同,是否有可能仅知道这一点来解密它。
  • 啊;这是您正在谈论的伪代码。是的,如果看起来像这样,暴力破解绝对是最简单的方法。那应该是微不足道的。你破解它的速度可能比你打字的速度还要快……

标签: encryption rc4-cipher


【解决方案1】:

这应该使用像PBKDF2 这样的密钥生成算法来处理,这将允许您以适合密码验证的方式安全地从您的密码生成哈希(我假设您正在这样做)。

虽然可以通过这种方式生成一个 RC4 安全的系统(通过使用良好的 KDF(例如 PBKDF2)将密码转换为 RC4 密钥,然后生成随机随机数),但这很多无用的开销。对于相同的安全级别,您最终会得到更长的最终密文,并且生成它需要更长的时间。最后,您将刚刚创建了一个极其复杂的安全哈希函数(其第一步是“无论如何都要做您唯一需要做的事情)。您可能会在此过程中犯错,使系统不安全. RC4 可能很难正确执行,并且已知相关密钥攻击;因此 WEP 被破解。

【讨论】:

  • 感谢您的回答,这将位于安全位置,因此加密不需要太完美。我只是想知道是否以我提到的方式使用 RC4 有一个弱点,我可以找到明文,知道密钥和明文在哪里相同。请参阅上面的伪代码。
  • 这取决于您如何使用 RC4。如果您正确使用 RC4,那么不会,它受到了合理的保护。但是,如果您正确使用 RC4,这是一个非常复杂的解决方案。您需要做的第一步是运行 KDF(如 PBKDF2)。到那时,您已经实现了目标。此时添加 RC4 只会降低系统的安全性。如果您跳过 KDF 并错误地使用 RC4,那么是的,该系统提供的安全性很差。您自己加密密码的事实只会使情况变得更糟,但即使这样做也是不安全的。
  • 试图完全清楚:以这种方式使用 RC4 不如更简单的解决方案安全。这种方式不应该使用加密算法,但是在加密算法中,RC4 是一个特别糟糕的选择,因为它具有众所周知的相关密钥攻击。你想散列你的密码。使用哈希算法。为此,我推荐使用 PBKDF2。
  • 正如您从伪代码中看到的那样,我相信我会错误地使用它。但是我并不担心,我更感兴趣的是因为它很弱,而且因为RC4基本上是一个XOR实现,是一种我也可以使用的方法,在我忘记密码的情况下,我可以恢复吗它只知道我所知道的。 Key和Plaintext是一样的,都是短的,在Rc4之后唯一做的就是Base64。所以我只是解码 Base64 并得到原始输出。明白我的意思了吗?
  • (你没有发布伪代码)如果你希望它是可破解的,为什么不使用简单的混淆? ROT-13 它或 Base64 对其进行编码。如果您只想混淆,为什么要使用 RC4?如果您希望它是超级机密的混淆,只需对其进行 ROT-10 或 Base60 编码(即将值更改为某个“超级机密”数字)。或者您是否试图打破执行不力的现有系统?如果密码相当短且可键入,则只需暴力破解即可。我可能会像这个人那样基于 John the Ripper 的代码:github.com/kholia/RC4-40-brute-pdf/blob/master/RC4-40-brute.c
猜你喜欢
  • 2011-06-29
  • 1970-01-01
  • 2011-11-10
  • 1970-01-01
  • 2014-02-27
  • 1970-01-01
  • 2012-10-11
  • 1970-01-01
  • 2017-08-11
相关资源
最近更新 更多