RC4加密原理及其弱密钥推导

RC4简介

rc4加密由Ron Rivest 于1987年为RSA Security公司设计,是一种可变密钥长度,面向字节的流密码 ,广泛应用于 web SSL/TLS, wireless WEP/WPA等

1.RC4算法原理

用一个长度为1到256个字节(8~2048位)的可变长度密钥来初始化一个256个字节的状态向量S,S的元素记为S[0],S[1],…S[255],从始至终S包含所有从0到255的数字
在这里插入图片描述

a.RC4密钥调度

首先初始化状态向量S[i],同时由可变密钥K生成中间向量T

/*  
初始化S同时生成中间向量T  
*/
for i = 0 to 255 do
	S[i] = i
	T[i] = K[i mod keylen]	

(初始化过程一旦完成,密钥K将不再被使用)
然后由中间向量T对S做进行初始置换来打乱S的顺序

/*
对S进行初始置换
*/
j = 0
for i = 0 to 255 do 
		j = (j + S[i] + T[i]) (mod 256) 
		swap (S[i], S[j])

b.密钥流的生成及加密

继续加密扰乱S的顺序,对每个S[i]将其与S中的另一字节交换,再将两个被扰乱的值进行相加,得到流密钥在数据S的位置,最后使用流密钥去加/解密消息字节

i = j = 0 
for each message byte Mi
	//继续加密扰乱S的顺序
	i = (i + 1) (mod 256)
	j = (j + S[i]) (mod 256)
	
	//交换S[i]与S[j]的位置
	swap(S[i], S[j])
	
	//两个被扰乱的值进行相加,得到流密钥在数据S的位置
	t = (S[i] + S[j]) (mod 256) 
	
	//使用流密钥S[t]去(加/解密)异或下一消息字节Mi
	Ci = Mi XOR S[t]

2.RC4弱密钥及其推导

RC4存在弱密钥使得其在初始置换后S的顺序不变即密钥失去作用
初始置换的代码如下

/*
对S进行初始置换
*/
j = 0
for i = 0 to 255 do 
		j = (j + S[i] + T[i]) (mod 256) 
		swap (S[i], S[j])

已知S中的元素不会重复,若使交换S[i], S[j]的顺序后S的顺序并未发生改变,则i = j,即i = (j + S[i] + T[i]) (mod 256),这里我们可以只推导其中的一组弱密钥,则可以认为i = (j + S[i] + T[i])

i =0 --> j+S[0]+T[0] = 0,此时j = 0,则T[0] = 0,j = j+S[0]+T[0] = 0;
i =1 --> j+S[1]+T[1] = 1,此时j = 0,则T[1] = 0,j = j+S[1]+T[1] = 1;
i =2 --> j+S[2]+T[2] = 2,此时j = 1,则T[1] = 255,j = j+S[2]+T[2] = 2;

i = 255 --> j+S[255]+T[255]=255,此时j = 254,则T[255] = 2,j = j+S[255]+T[255] = 255;
又因为T是由K推导出来的,则可以认为K[0] = 0,K[1] = 0,K[2] = 255,…,K[255] = 2是RC4的一组弱密钥

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值