27/01/2019
/* Criptografia - Parte V */
A Criptografia de Chave Única pode ser uma solução para os casos em que a mensagem não seja tão valiosa para ambos: emissor e receptor. Mas, como o termo “valiosa” é muito relativo, o ideal é dar à mensagem a melhor proteção possível; pois, é melhor acertar por excesso do que errar por omissão! E a forma mais eficiente de fazer isto é utilizar uma Criptografia de Chave Dupla, em que são utilizadas duas chaves para tratar a mensagem: uma só para encriptar e outra só para decriptar. A chave de encriptação é chamada “chave pública”; e como o termo sugere, pode ser do conhecimento de todos. Já a chave para decriptar, chamada de “chave privada”, é usada somente para decriptar a mensagem; e deve ser preservada dos olhos alheios! Um desses métodos, utilizado pela maioria dos profissionais, é conhecido como Sistema RSA; cuja sigla foi retirada da primeira letra dos sobrenomes de seus criadores: Ronald Rivest, Adi Shamir e Leonard Adleman. O Algoritmo deste método pode ser resumido nos seguintes passos:
1) Selecionar a mensagem a ser codif**ada.
2) Fazer uma pré-codif**ação da mensagem, caractere por caractere, baseada em uma tabela (que pode ser a tabela ASCII, ou outra qualquer) que faça a correspondência de um número com cada caractere da mensagem.
3) Escolher dois números primos (p, q) bem grandes e não sequenciais.
4) Criar um número n=p*q. (p e q devem ser mantidos secretos, embora n possa ser tornado público).
5) Quebrar a mensagem em blocos numéricos tal que cada bloco seja menor que n, e certif**ar que nenhum deles comece com 0 (zero).
6) Selecionar um número e que seja coprimo com a Função de Euler φ(n) para criar a chave pública (e,n) que irá codif**ar a mensagem.
O passo 4 do algoritmo diz que n pode ser publicado, mas p e q têm que ser mantidos secretos (apenas quem codif**a a mensagem pode conhecê-los); e para conhecê-los uma solução seria “fatorar n”; mas isto se tornaria inviável para números muito grandes. É aí que está a eficiência do método RSA: fatorar um número muito grande pode levar anos; e por incrível que pareça, uma mensagem encriptada com uma chave pública de 1024 bits (números de 309 dígitos) poderia levar dezenas de milhares de anos para ser decriptada, e mesmo utilizando cluster de computadores!
Como exercício da teoria, vamos analisar o exemplo de codif**ação/decodif**ação da mensagem “O BEBE BABA”.
1 - Etapa de pré-codif**ação
1.1 - Selecionar a mensagem a ser codif**ada: “O BEBE BABA”
1.2 - Pré-codif**ar a mensagem de acordo com uma tabela; por exemplo, a tabela 1.
Note que na tabela 1 foram consideradas apenas letras maiúsculas, e mais o espaço cujo código foi convencionado como 55. Então, a mensagem pré-codif**ada f**a assim: 2455111411145511101110
1.3 - Considerar dois números primos: p e q: exemplo, 17 e 23 (como exemplos).
1.4 - Fazer n = p*q = 391
1.5 - Separar mensagem em blocos de tamanho menor que n:
245 51 114 11 145 51 110 11 10 (separados em nove blocos)
Atenção: Para uma maior segurança é importante que cada bloco não indique nenhuma unidade ou sequência linguística que possa ser conhecida num idioma; por exemplo, 65 66 67 (o que seria ABC no código ASSCII); isto deve ser evitado. E os blocos não precisam ser, necessariamente, todos de um mesmo tamanho, mas não podem começar com 0 e nenhum deles pode exceder a n .
2 - Etapa de Codif**ação
2.1 - Cada bloco b (0