在RC4上阅读Wiki页面时,我注意到键大小必须在40-2,048位之间。
为什么会这样呢?它不能长得更短或更长,有什么原因吗?
发布于 2012-07-10 20:14:47
为了增加fgrieu所说的内容,可以把RC4看作是一个自调整转子.想象一个轮子上面有小瓷砖,就像拼字砖,但标记为0x00到0xff (或0到255)。每次你提出一个值,你翻转一些瓷砖转子和棘轮它一个地方。
您可以通过旋转一次来初始化车轮,使用您的键作为值来控制瓷砖如何翻转。2048位是旋转的车轮,一个完整的旋转,并使用您自己的控制位,每次点击车轮。
很明显,您可以使用任何大小控制字符串(键)来完成这个任务,但是它显然没有那么大的价值来完成一次以上的彻底革命。因此,正如按照惯例,键至少有8字节(40位),最大为256字节。
我们称RC4's初始化为“密钥调度”,但它不是密钥调度,就像密钥调度用于分组密码那样。通常,一个分组密码有许多子密钥,它们在密码运行时混合在一起,子密钥是从基本密钥派生出来的,这就是我们所说的密钥调度。RC4有一个初始化--转子被初始化,然后你就像一个伪随机数生成器一样运行它,然后把它们转到纯文本上。
RC4有一个缺点,即初始化很弱。加强它的典型建议是生成流的N个字节(通常为256或512字节)并将它们丢弃。这是一次或两次转动转子,只是为了更多的混合。
WEP以一种非常虚假的方式使用RC4,但这是一个完全不同的讨论,因为WEP不应该做的事情之一就是使用流密码。流密码遵循创建PRNG,然后针对明文创建XORing的模型。如果您对每个数据包使用相同的流( WEP ),那么如果您知道明文,则可以派生密钥流字节,然后在后续的每个数据包上解密该字节。然后,您只需猜测其余的明文,以获得整个流。
你永远不应该在任何流密码上使用相同的密钥两次。不是RC4,也不是计数器模式的分组密码,什么都没有。此攻击框架(使用已知明文来猜测密钥流字节,然后猜测更多明文)适用于任何具有任意大小密钥的流密码。
当我在做的时候,RC4有很多小洞。你应该把它从一个使用它的地方取出来,这并不坏(而且有些地方的替代品也有自己的问题),但是在一个新的项目中,你应该做一些像计数器模式这样的事情,它具有更好的特性。
尽管如此,在我看来,RC4可能是有史以来最漂亮的密码,我很喜欢它。我很喜欢它,因为它太漂亮了。
琼恩
发布于 2017-04-13 19:23:07
如果你不得不多次使用这个键,就加一个盐。salt是一个随机数,它被添加到密码中,然后(以明文形式)传输到接收方。接收者使用密码中的盐分,并获取原始流。因为盐是不同的,因为每一个包的破裂变得更加困难。
示例:
用户密码:测试(一个非常常见的密码)
Salt1: 42
Key1: 42测试
Packet1: 42加密数据
Salt2: 23
Key2: 23测试
分组2 23加密数据
https://crypto.stackexchange.com/questions/3137
复制相似问题