首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RC4 Keylength极限

RC4 Keylength极限
EN

Cryptography用户
提问于 2012-07-04 15:28:06
回答 2查看 13.1K关注 0票数 5

在RC4上阅读Wiki页面时,我注意到键大小必须在40-2,048位之间。

为什么会这样呢?它不能长得更短或更长,有什么原因吗?

EN

回答 2

Cryptography用户

发布于 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可能是有史以来最漂亮的密码,我很喜欢它。我很喜欢它,因为它太漂亮了。

琼恩

票数 5
EN

Cryptography用户

发布于 2017-04-13 19:23:07

如果你不得不多次使用这个键,就加一个盐。salt是一个随机数,它被添加到密码中,然后(以明文形式)传输到接收方。接收者使用密码中的盐分,并获取原始流。因为盐是不同的,因为每一个包的破裂变得更加困难。

示例:

用户密码:测试(一个非常常见的密码)

Salt1: 42

Key1: 42测试

Packet1: 42加密数据

Salt2: 23

Key2: 23测试

分组2 23加密数据

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

https://crypto.stackexchange.com/questions/3137

复制
相关文章

相似问题

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