首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于RC4算法的问题

关于RC4算法的问题
EN

Software Engineering用户
提问于 2015-02-23 12:51:07
回答 1查看 540关注 0票数 1

我开始从一本书中读到RC4,但无法正确理解一些短语。

RC4算法非常简单,易于理解。可变长度键从1到256字节用于初始化256字节状态向量S。S在任何时候都包含从0到255的所有8位数的排列。

根据上面的解释,如果假设我们使用Java作为我们的编程语言

  1. 每个字符为2个字节,键长可从1到128(256/2)长。
  2. 创建了一个向量/可扩展数组。但是数组的长度是多少?数组的大小是256吗?
  3. 在任何时候,数组S都包含从0到255的所有8位数的排列?有人能给我解释一下吗。

请帮助我,因为我感到迷失在我的第一章学习密码学。

EN

回答 1

Software Engineering用户

回答已采纳

发布于 2015-02-23 13:17:54

RC4是按顺序应用的,不管简单字符的长度是多少。有时一个字符是一个字节,但今天这些(旧的)字符意味着字节。为了与当前实现保持一致,对于ASCII-字符(序数小于128的字符),您应该切分包含零的(上)字节。“密码”的长度为8,将在初始排列步骤中应用32次。否则,如果只有“第二个”字节被有效地用于排列,排列数组将包含工件。

RC4的KSA

代码语言:javascript
复制
for i from 0 to 255
    j := (j + S[i] + key[i mod keylength]) mod 256
    swap values of S[i] and S[j]
endfor

如果您每个ascii char使用2个字节,其中一个字节将包含一个"0“的每秒钟字节。对于每秒钟的密码字节,密钥调度算法将减少到:

代码语言:javascript
复制
for i from 0 to 255
    j := (j + S[i] + 0) mod 256
    swap values of S[i] and S[j]
endfor

他使S的排列和内心状态得到了充分的利用。如果第一个密码字节为空,则S0将与S0交换,这根本不是交换。我建议你在这个问题上做一些实验--这对你来说可能很有趣-- S0以后可能会被交换,但也许不会。它也可以与其他不幸的字节中的一个进行交换。这可能导致S我的某些值或多或少地保持不变的排列值。

该算法的安全性依赖于S.的排列的保密性,但如果你能通过知道一些密码属性来猜出S的一些字节,就可以有效地减少攻击者的不确定性.

流密码本身是按字节顺序应用的。RC4伪随机流是字节流,要加密的数据是字节流。

  • “一直以来,数组S都包含从0到255的所有8位数的排列”

数组S的长度为256个字节,它只包含每一个可能的字节(8位=> 2^8)一次。从一开始,S就这样被命令,S0=0 ..S255=255。每个密码字节将相互交换两个元素。从0到255的所有元素仍然存在,但不像以前那样在位置上。S是应用密码后的内部状态(这个状态是隐藏的/秘密的,除了你以外任何人都不知道)。您的密码是关键,如何创建这个特殊的,希望唯一的排列。

hth。请问我是否漏掉了什么解释。

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

https://softwareengineering.stackexchange.com/questions/274142

复制
相关文章

相似问题

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