论文首页哲学论文经济论文法学论文教育论文文学论文历史论文理学论文工学论文医学论文管理论文艺术论文 |
For i=0 to 2n-1 i=0,j=0
S[i]=i Generation Loop:
j=0 i=i+1
Scrambling: j=j+S[i]
For i=0 to 2n-1 Swap(S[i],S[j])
j=j+S[i]+K[i mod l] Output z=S[S[i]+S[j]]
Swap(S[i],S[j])
其中,l为密钥的长度。
1.2 RC4算法安全性能分析
仔细研究RC4的算法流程,不难发现:
状态盒S从一个统一的2n个字的转置开始,对其进行的唯一操作是交换。S始终保存2n个字的某个转置状态,而且转置随着时间而更新。这也是RC4算法的强度所在。算法的内部状态存储在M=n2n+2n比特中,由于S为一个转置,此状态大约保存了log2(2n!)+2n≈1700bit的信息。
状态盒的初始化状态仅仅依赖于加密密钥K,因此,若已知加密密钥就可完全破解RC4。加密密钥完全且唯一确定了伪随机数序列,相同的密钥总是产生相同的序列。另外,RC4算法本身并不提供数据完整性校验功能,此功能的实现必须由其他方法实现(例如WEP中的数据完整性校验向量,即ICV)。
下面考虑一些特殊的攻击模型,这些模型均与要讨论的RC4的安全问题密切相关。
RC4算法属于同步流密码算法中的一种,由于其伪随机数发生器PRNG(Pseudo Random Number Gernerator)的输出完全由加密密钥确定,所以对于一个设计良好的流密码算法必须满足两个条件:输出的每个比特应该依赖于所有加密密钥的所有比特;而且,任意一个比特或者某些比特同加密密钥之间的关系应该极其复杂。
上述第一个条件意味着输出的每个比特依赖于加密密钥所有比特的值。密钥中任意比特值的改变均有1/2的几率影响到输出的每一个比特。如果满足此条件,那么,破解此加密需要尝试所有可能的密钥值,输出值同加密密钥之间几乎不存在任何联系。
如果上面的条件得不到满足,那么就可被利用来对其进行攻击。举例来说,假设输出的某8个比特仅仅依赖于加密密钥的某8个比特,那么就可以简单地进行对此8比特密钥的所有可能值进行尝试,并与实际输出相比较获取此8比特密钥的值,这样就大大降低了穷举攻击所需的计算量。
因此,如果输出以比较高的概率由密钥的某些比特所确定,那么此信息就可被利用来对此流密码进行攻击。
第二个条件意味着即使已知两个加密密钥之间的联系,也无法得出PRNG输出之间的联系。此信息也可用来降低穷举攻击的搜索空间,从而导致加密强度的降低。
RC4算法属于二进制异或流密码,相同的密钥总是产生相同的PRNG输出。为解决密钥重用的