在密码学领域,RC4( 又名
ARC4
或者
ARCFOUR
)是应用最广泛的流加密算法,应用在安全套接字层(SSL)(用来保护网络上传输的数据)和WEP(无线网络数据保护)上。虽然它的最大亮点是算法的简单性和运行速度,但是因为它存在的弱点,在新的系统中使用时是有所争论的。the beginning of the output keystream
is not discarded(使用起始的输出keystream),使用非随机的或者相关性的keys,一个keysteream连续两次使用,这些使用方法都能使RC4加密方法显得特别脆弱,比如在WEP中RC4的一些使用方式就导致了非常不安全的情况。
历史
RC4是由RSA Security的Ron Rivest 在1987年开发出来的,虽然它的官方名是“Rivest Cipher 4”,但是首字母缩写RC也可以理解为Ron's Code。RC4开始时是商业密码,没有公开发表出来,但是在94年9月份的时候,它被人匿名公开在了
Cypherpunks
邮件列表上,很快它就被发到了
sci.crypt
新闻组上,随后从这儿传播到了互联网的许多站点。随之贴出的代码后来被证明是很有水平的,因为它的输出跟取得了RC4版权的私有软件的输出是完全的。由于算法已经公开,rc4也就不再是商业秘密了,只是它的名字“RC4”仍然是一个注册商标。RC4经常被称作是“ARCFOUR”或者"ARC4"(
A
lleged
RC4,所谓的RC4,因为RSA从来没有官方公布这个算法),这样来避免商标使用的问题。它已经成为一些广泛使用的协议和标准的一部分,比如,包括WEP和WPA的无线网卡和TLS。
让它如此广泛分布和使用的主要因素是它不可思议的简单和速度,不管是软件还是硬件,实现起来都十分容易。
描述
RC4产生一个伪随机比特流(a keystream),加密的时候,把它跟明文进行比特级别的异或处理,解密时进行一样的步骤(因为异或操作是对称的)。(这个类似于
Vernam cipher
,只不过后者不使用伪随机比特流而直接使用随机比特流)。为了产生keystream,本密码算法使用时需要两个数据的私有空间来保存内部状态:
1. 总共256个字节的序列(下面用“S"代替)
2.
两个8比特的索引指针(下面用“i”和“j”代替)
比特流序列的初始化是根据key的长度(key的长度通常在40到256比特之间),使用
key-scheduling
算法来进行的(KSA),一旦完成了初始化,比特流就可以根据伪随机生成算法(PRGA)来产生。
The key-scheduling algorithm (KSA)
key-scheduling
算法用来初始化数组“S”中的字节序列,“keylength”定义了key的字节长度,可能的范围是[1, 256], 典型的值是5到16之间,相应的key 长度就是40-128比特。首先,数组“S”被初始化成identity permutation(身份鉴别的序列),随后在PRGA的算法中进行256为周期的循环列举出来,每次处理的方式都是一样的,是联合key的字节进行的
。
for
i
from
0
to
255
S[i] := i
endfor
j := 0
for
i
from
0
to
255
j:= (j + S[i] + key[i
mod
keylength]) mod 256
swap(&S[i],&S[j])
endfor
伪随机生成算法(PRGA)
对于尽可能多的每个列举过程,PRGA算法修改内部的状态并输出keystream的一个字节。在每次循环中,PRGA把i加一,并把i所指向的S值加到j上去,然后交换S[i]和S[j]的值,最后输出S[i]和S[j]的和(取256的模)对应的S值。至多经过256次,S每个位置上的值都被交换一次。
i := 0 j := 0
while
GeneratingOutput:
i := (i + 1) mod 256
j := (j + S[i]) mod 256
swap(&S[i],&S[j])
output S[(S[i] + S[j]) mod 256]
endwhile
实现
许多流加密算法都是基于Linear feedback shift register(LFSRs, 寄存器线性反馈移位), 虽然在硬件上有效率但是在软件实现上却可能比较慢。RC4的设计避免了LFSRs的使用,对于软件实现是相当理想的,它只需字节操作,使用了256字节的状态数组(从S[0]到S[255]), k字节的key内存(从key[0]到key[k-1]),整数i,j和k。 进行256的取模操作可以用255的字节AND来进行(在有些平台上,只需简单地进行字节相加,忽略掉溢出即可)。下面是一个简单的C实现:
unsigned char S[256];
unsigned int i, j;
void swap(unsigned char *s, unsigned int i, unsigned int j) {
unsigned char temp = s[i];
s[i] = s[j];
s[j] = temp;
}
/* KSA */
void rc4_init(unsigned char *key, unsigned int key_length) {
for (i = 0; i < 256; i++)
S[i] = i;
for (i = j = 0; i < 256; i++) {
j = (j + key[i % key_length] + S[i]) & 255;
swap(S, i, j);
}
i = j = 0;
}
/* PRGA */
unsigned char rc4_output() {
i = (i + 1) & 255;
j = (j + S[i]) & 255;
swap(S, i, j);
return S[(S[i] + S[j]) & 255];
}
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define ARRAY_SIZE(a) (sizeof(a)/sizeof(a[0]))
int main() {
unsigned char *test_vectors[][2] =
{
{"Key", "Plaintext"},
{"Wiki", "pedia"},
{"Secret", "Attack at dawn"}
};
int x;
for (x = 0; x < ARRAY_SIZE(test_vectors); x++) {
int y;
rc4_init(test_vectors[x][0], strlen((char*)test_vectors[x][0]));
for (y = 0; y < strlen((char*)test_vectors[x][1]); y++)
printf("%02X", test_vectors[x][1][y] ^ rc4_output());
printf("\n");
}
return 0;
}
分享到:
相关推荐
Base64_RC4加密算法是计算机安全领域中常见的两种加密技术的结合。RC4是一种流密码(stream cipher)算法,而Base64则是一种数据编码方法。这两种技术在不同的场景下有着各自的用途。 首先,我们来详细了解一下RC4...
在本案例中,“RC4加密算法动态链接库”意味着开发者已经将RC4算法封装成一个DLL文件,其他应用程序可以通过调用DLL中的函数来实现RC4加密和解密功能,无需重复编写相同代码,提高了代码复用性和效率。 流加密算法...
### 实验3 C语言实现RC4加密算法报告 #### 实验背景及目标 本实验旨在通过C语言实现RC4加密算法来对任意文件进行加密和解密操作。实验任务要求能够通过命令行的方式进行文件的加解密工作,并且能够处理包括但不...
RC4加密算法是一种广泛应用的流密码算法,由Ron Rivest在1987年设计,最初是为了商业用途,但后来由于其简单性和高效性,它被广泛用于互联网协议,如WEP(无线等效加密)和SSL/TLS(安全套接层/传输层安全)协议。...
RC4加密算法的基本原理是基于一个名为“密钥流生成器”(Key Stream Generator)的过程。这个过程首先生成一个256字节的密钥表,称为S盒(S-Box)。S盒的初始化由密钥和一个预设的初始向量共同决定,这个过程称为键...
易语言模块RC4加密算法.rar 易语言模块RC4加密算法.rar 易语言模块RC4加密算法.rar 易语言模块RC4加密算法.rar 易语言模块RC4加密算法.rar 易语言模块RC4加密算法.rar
**RC4加密算法详解** RC4(Rivest Cipher 4)是一种经典的流密码算法,由Ron Rivest在1987年设计。它被广泛应用于数据加密,尤其是在早期的网络安全领域,例如SSL/TLS协议中。RC4以其简单、快速的特性而著称,但...
C++实现RC4加密算法,以2进制形式输出密钥流和密文到控制台并将结果记录至.txt文件。 用到KSA PRGA算法,最后用异或进行加密/解密。
RC4是一种广泛使用的流式加密算法,由Ronald Rivest在1987年设计,最初是为了商业用途,但后来由于其简洁性和高效性,它被广泛应用在许多领域,包括网络安全、软件保护以及无线通信等。这个算法因其简单易懂的特性,...
易语言模块RC4 加密算法 1.0.rar 易语言模块RC4 加密算法 1.0.rar 易语言模块RC4 加密算法 1.0.rar 易语言模块RC4 加密算法 1.0.rar 易语言模块RC4 加密算法 1.0.rar 易语言模块RC4 加密算法 1.0.rar
该“rc4加密算法演示程序”是为了帮助用户理解和学习RC4算法而设计的。通过这个程序,你可以直观地看到RC4如何将明文和密钥转化为密文的过程。下面我们将深入探讨RC4加密算法的工作原理和一些关键知识点。 1. **RC4...
RC4 加密算法在网络安全课程设计中的应用 网络安全课程设计旨在提高信息安全性,保护数据隐私和防止未授权用户窃密。RC4 加密算法作为一种流加密算法,具有高速、安全和可靠的特点,广泛应用于网络安全领域。本文将...
RC4加密算法是一种广泛应用的流密码算法,由Ron Rivest在1987年设计,最初是为了商业用途,因此有时也被称为Rivest Cipher 4。它的设计目标是快速、简单,适合硬件和软件实现。Java作为一种跨平台的编程语言,提供了...
RC4加密算法是一种广泛应用的流密码算法,由Ron Rivest在1987年设计,最初用于商业用途,因其高效性和简单性而受到欢迎。在这个“RC4加密算法演示程序”中,我们可以通过MFC(Microsoft Foundation Classes)框架来...
RC4加密算法的设计目的是为商业机密提供加密保护,它的工作原理相对简单,分为两大部分:初始化算法(KSA,Key-Scheduling Algorithm)和伪随机子密码生成算法(PRGA,Pseudo-Random Generation Algorithm)。...
RC4加密算法的实现 java代码实现 不错的哦
RC4加密算法是一种流加密算法,其设计简单,运行速度快,在软件开发领域中被广泛使用。本篇将结合易语言源码RC4加密算法的知识点进行详细讲解。 RC4算法由罗恩·里维斯特(Ron Rivest)于1987年设计,最初是商业...