domingo, 17 de março de 2013

Assinatura e Certificação Digital - RC4

... Ainda dentro de criptografia Simétrica ....

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.