首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RC2,RC4,RC5密钥长度

RC2,RC4,RC5密钥长度
EN

Cryptography用户
提问于 2013-08-11 20:32:02
回答 2查看 6.6K关注 0票数 6

在RC4上阅读Wiki页面时,我注意到键大小必须在40-2,048位之间。那么我应该这样理解,我可以有一个长度为333位的密钥吗?(任何在40-2048之间的十进制数?)输入长度如何?

假设我可以要求用户给我输入长度(例如,1027)和keylength (比如说,359),我可以使用它们吗?

关于RC2的相同问题-键大小必须在8-128 比特和RC5的范围内-键大小必须在0-2040 比特范围内。

我可以使用在给定范围内的任意键长度吗?即使是异国情调的,比如,我不知道,879或123位作为键的长度?

EN

回答 2

Cryptography用户

发布于 2013-08-25 18:51:19

是的,您可以拥有该范围的任意长度的键(只要它是一个整数字节),但实际上,为什么呢?绝对没有理由这么做。

  • 如果密钥是均匀分布的,超过256位的任何东西都是完全过分的和完全没有意义的。
  • 如果密钥不是均匀分布的(可能是密码或其他什么的),则不应该将其直接用作RC4密钥。相反,您应该先散列它(最好使用像PBKDF2这样的慢速散列),并将结果用作RC4键;哈希的输出将类似于128位或256位,所以范围也不重要。

底线:如果您需要询问密钥长度的确切范围,您可能使用RC4不正确。相反,坚持使用128-256位长的密钥,并且使用加密质量的伪随机数生成器或使用合适的散列/KDF函数均匀分布和生成密钥。

更新:显然,根据Henno的评论,RC2确实允许任意的键位长度(谢谢!)然而,这并没有改变底线。我不建议使用不寻常的长度键。坚持普通长度,比如128位或256位。

票数 7
EN

Cryptography用户

发布于 2013-08-25 02:19:10

简而言之,短键容易受到某种类型的攻击,2048位以上的密钥信息正在被丢弃,而外来密钥(那些与字节不对齐的键)实际上要么通过您的实现与字节对齐,要么只是一个非常糟糕的主意,视情况而定。

RC4是一个相当简单的算法,让我们通过初始化来看看会发生什么。

首先,准备一个256字节的增量数组,例如:

代码语言:javascript
复制
sbox[]
for i in 0 to 255:
  sbox.append(i)

然后取一些键k并准备一个256个字节的单独数组key_array,只需循环这个键来填充它。

代码语言:javascript
复制
key_index = 0
while len(key_array) < 256:
  key_array.append(key[key_index])
  key_index = key_index + 1
  if key_index > len(key):
    key_index = 0

因此,任何超过2048位(即256字节)的东西都会被丢弃。

现在,您将遍历这两个数组,从0到255,将每个数组中的索引求和,并将该和添加到计数器(mod 256)中。然后在sbox中交换两个值,使用该运行计数器作为一个值的索引,使用当前的索引步骤作为另一个值。

代码语言:javascript
复制
for i in 0 to 255:
  j = (j + self.sbox[i] + key_array[i]) mod 256
  swap(self.sbox[j], self.sbox[i])

现在,当你看前几个i's,还没有太多的移动。这些字节可能会再次被洗牌,但如果你能做一些假设,你可能能够检测到键和前几个字节之间的偏差,在初始化后。

就这样,这种攻击对5字节及以下的键特别有效,所以这可能就是避免40位以下键的警告之处。有趣的是,这种攻击并不仅仅停留在五个字节,成功的概率随着密钥大小的增加而下降,直到对超过16个字节的密钥变得根本不实用为止。

至于外来的键,大多数简单的实现只需要字节。因此,如果你提供333位,它可能只是解释为一个336位(42字节)的键,也许有一些填充的0。

如果实现没有将输入放入最近的字节,而只是将其循环到键数组中的2048个可用位,那么您可能已经有效地提供了一个2048位密钥。由于333与8不共享公共因子,所以在我们的键数组满后很长时间内,它将不会对齐一个偶数字节,直到2668位。因此,在333位键中保存重复模式,您可能无意中生成了相当于256字节的密钥。

另外,256字节的键听起来很棒,但实际上并不像你想象的那样能给你带来更多的熵。sbox的初始化结果是用信息填充256位字节,并设置两个计数器ij。该键提供了填充256字节、255字节或254字节等选项。因此,256可能不一定提供任何额外的熵以上的键,只有180字节。

另外,请注意,很多研究都涉及重复的密钥攻击,因此正如DW所指出的,采取一些步骤以确保不重复密钥是非常重要的。Ri背心建议接受(键,初始化向量)并通过散列函数传递它,因此即使是重复的初始化向量也不会导致后续键之间的任何关系。另一个研究领域是研究PRNG的偏见,直到它“解决”为止。大多数实现都建议在初始化中添加另一个值,即在安装过程中丢弃的PRNG的几个回合(Rivest建议丢弃前256个字节)。

RC4是最简单的一种,因此也是研究最深入的流密码之一。很难跟上所有不同类型的攻击,并确定哪种理论攻击具有实际的适用性。所以,不要把这当作RC4永远安全的保证,继续检查研究。

针对大密钥的

相关密钥攻击:

  • 陈俊杰,A.一种新的实用密钥恢复攻击在相关密钥模型下对流密码RC4的攻击。“计算机科学讲座说明”(LNCS),诉6584,第62-76页。2011年。
  • RC4的相关密钥密码分析。技术报告-000-358,赖斯大学计算机科学系。2000年。(注: 256字节键特别糟糕。)

使用密钥调度算法对小密钥的

攻击:

  • 保罗,G.,Maitra,S.排列后的RC4密钥调度恢复秘密密钥。LNCS,诉4876,第260-377页。2007年。
  • Carmeli,Y.内部州RC4密钥的有效重建LNCS,诉5086,第270-288页。2008年。
  • 阿克贡,M.,Kavak,P.,Demirci,H. RC4关键调度算法的新结果。LNCS,诉5365,第40-52页。2008年。

其他弱点

  • RC4关键调度算法的弱点,在2001年第八届密码学选定领域年度研讨会上作了介绍。

Ri背心对RC4

的辩护

  • 针对RC4密钥调度算法中存在的弱点,提出了RSA安全策略。技术笔记RSA实验室。2002年。
票数 4
EN
页面原文内容由Cryptography提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

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

复制
相关文章

相似问题

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