No
campo da criptografia simétrica RC4 é um acrônimo para Rivest Cipher Four, cujo Ronald Linn Rivest é o desenvolvedor e o 4
significa que é a quarta geração do algoritmo. O RC4 é uma marca registrada e
foi desenvolvido dentro dos laboratórios da RSA Security que é uma divisão de
segurança da EMC Corporation, que cuida da segurança da comunicação do governo
Americano. O cifrador foi desenvolvido em 1987 e é dentre os cifradores
simétricos (de acordo com a fonte) o mais utilizado, cujo seu uso se estende
até o protocolo Secure Socket Layer
ou apenas SSL que é a camada do canal de segurança de navegação na internet, e
também a WEP cujo acrônimo está para Wired
Equivalent Privacy que é o algoritmo de navegação segura criptografada em
redes sem fio.
O RC4 foi inicialmente um segredo
comercial, mas em setembro de 1994 uma descrição do mesmo foi publicada
anonimamente em uma lista de discussão do Cypherpunks que é um movimento
ativista que defende o uso generalizado da criptografia “pesada” como uma rota
de mudança social e política. O algoritmo chamou atenção, e tão logo passou a
ser parte de listas de discussão de vários outros sites, e o código fonte do
algoritmo vazou na internet, e foi confirmado que era de fato genuíno quando a
saída foi comparada com a de um código fonte de um software proprietário e
licenciado RC4. Agora o RC4 era legal ou ilegal de domínio público e já não era
mais um segredo de comércio, porém a RSA Security nunca distribuiu oficialmente
seu código fonte do algoritmo.
Os fatores principais para o grande
sucesso do RC4 na sua grande utilização em softwares e protocolos de
comunicação se dá pela simplicidade do código e da rapidez que o mesmo é
executado, ou seja, pela rapidez na criptografia de mensagens de tamanhos
variados, e a implementação do mesmo em softwares e hardwares é relativamente
fácil de codificar.
O RC4 gera um fluxo de bits
pseudo-randômico, uma chave do fluxo, assim como ocorre com outros cifradores
de fluxo. Esta chave é o que permite a criptografia de mensagens, fazendo a
combinação dista com um texto legível utilizando bit a bit com “ou exclusivo”.
A operação de decifração da mensagem ilegível ocorre de maneira idêntica, uma
vez que o “ou exclusivo” é uma operação simétrica. Para geração da chave do
fluxo o cifrador faz uso do estado interno que consiste de duas partes, são
elas;
1 – Uma permutação de todas as 256
possibilidades de um byte;
2 – 8-bits com índices de ponteiros.
A
permutação é inicializada com o tamanho variável da chaves, tipicamente dentro
da faixa de 40 a 245 bits, usando a “chave de agendamento” do inglês key-scheduling denominado algoritmo KSA.
Uma vez que completado esta fase do KSA o fluxo de bits é gerado utilizando o
Algoritmo de Geração Pseudo-randômica do original pseudo-random genaration algorithm que está para algoritmo PRGA.
O KSA e o PRGA são funções de rotina
ou métodos para o sucesso o ato da cifra ou decifração de uma mensagem. O KSA é
utilizado para inicializar a permutação de um vetor, sendo este vetor
geralmente denominado vetor “S”. O tamanho da chave é uma variável, e é
definida como o número de bits existentes na chave que deve estar em um
intervalo de 1 a 256 inclusive. O vetor “S” que naturalmente tem um tamanho de
256 deve ser inicializado com valor da posição correspondente, ou seja, na
posição 0 terá o valor 0, na posição 1 terá o valor 1, na posição 2 terá o
valor 2, e assim respectivamente, até que o vetor esteja completamente
populado. Logo após o vetor “S” deve ser submetido a um processamento de 256
iterações de maneira semelhante ao PRGA, mas ao mesmo tempo mistura bytes na
sua chave. O KSA tem o seguinte pseudocódigo:
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 values of S[i] and S[j]
endfor
O PRGA por conta das suas várias
iterações necessárias para sua execução, modifica o estado da saída da chave de
fluxo. Em cada iteração, o PRGA incrementa “i”, adicionando valores dos
ponteiros do vetor “S” de “i” para “j”, modificando os valores de “S[i]” e
“S[j]”, e ainda da saída dos elementos de “S” na localização “S[i] + S[j]”.
Cada elemento do vetor “S” é trocado no mínimo uma vez a cada 256 iterações. O
pseudocódigo da função do PRGA é o seguinte;
i := 0
j := 0
while GeneratingOutput:
i := (i + 1) mod 256
j := (j + S[i]) mod 256
swap values of S[i] and S[j]
K := S[(S[i] + S[j]) mod 256]
output K
endwhile
O RSA diferentemente de vários
cifradores simétricos é excelente para ser utilizado em softwares, isto por que
alguns cifradores são mais bem empregados em desenvolvimento de hardwares de
segurança. O RC4 é então excelente neste contexto, pois o mesmo faz apenas a
manipulação bits e bytes. A seguinte tabela apresenta a implementação do RC4 na
linguagem de programação 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
int main() {
int k, output_length;
unsigned char key[] = "Secret"; // key hardcoded to "Secret"
output_length = 10; // number of bytes of output desired
rc4_init(key, 6); // length of key is 6 in this case
while (k < output_length) {
printf("%c", rc4_output());
k++;
}
}
Diferentemente de alguns cifradores
modernos, o RC4 não faz separação de uma palavra utilizada uma vez ao lado da
chave, isto significa que se uma única chave é utilizada por um longo prazo
para efetuar a criptografia de vários fluxos de mensagens, o sistema
criptográfico deveria especificar como combinar o uso de um longo prazo, para
gerar um fluxo RC4. Uma abordagem para tal assunto é efetuar uma atualização da
chave RC4 de uma chave de longo prazo, porém, muitas aplicações que utilizam o
RC4 simplesmente concatenam a chave do fluxo, que é gerada uma única vez, e
isto é uma programação fraca de chave RC4, podendo dar origem a uma variedade
de problemas de segurança. Na criptografia RC4, fazer uso desta abordagem torna
o sistema fraco, e não é uma fraqueza do RC4, mas sim do próprio sistema de
criptografia. Para prevenir estes problemas, o esquema de criptografia deveria
utilizar justamente um forte código de autenticação de mensagem.
Nenhum comentário:
Postar um comentário
Obrigado por deixar seu comentário. Volte sempre.