Criptografia Numaboa
Algoritmos básicos da criptografia atual
Dom 28 Ago 2005 21:24 |
- Detalhes
- Categoria: Assuntos Gerais
- Atualização: Segunda, 13 Abril 2009 13:36
- Autor: vovó Vicki
- Acessos: 27336
Um método para cifrar e decifrar é chamado de cifra. Alguns métodos criptográficos baseiam-se no segredo dos algoritmos. Algoritmos deste tipo têm apenas interesse histórico e não são adequados para as necessidades do mundo atual. Todos os algoritmos modernos usam uma chave para controlar a cifragem e a decifração, onde uma mensagem só pode ser decifrada se a chave corresponder à chave de cifragem.
As classes de algoritmos com chave
Existem duas classes de algoritmos baseados em chaves: os simétricos, ou com chave secreta, e os assimétricos, ou de chave pública. O que os diferencia é que os algoritmos simétricos utilizam a mesma chave tanto para cifrar quanto para decifrar, enquanto que os algoritmos assimétricos usam chaves diferentes e a chave decifradora não pode ser derivada da chave cifrante.
Cifras simétricas
Os algoritmos simétricos podem ser divididos em cifras de fluxo ou sequenciais e em cifras de bloco. As cifras de fluxo encriptam um texto claro bit a bit, ao passo que as cifras de bloco usam conjuntos com um número fixo de bits (geralmente 64 bits nas cifras modernas) como unidades de cifragem.
Cifras assimétricas
As cifras assimétricas, também chamadas de algoritmos de chave pública ou, genericamente, de criptografia de chave pública, permitem que a chave seja de domínio público, podendo ser publicada na Internet, em jornais ou revistas. Qualquer pessoa pode, então, cifrar mensagens utilizando a chave, mas apenas o destinatário e real proprietário da chave será capaz de decifrar o texto porque é o único que conhece a chave decifrante. A chave cifrante também é chamada de chave pública e a chave decifrante de chave privada ou chave secreta.
Os algoritmos atuais
Os algoritmos criptográficos modernos estão muito distantes das chamadas cifras de lápis e papel. Algoritmos criptográficos fortes são projetados para serem executados por computadores ou por dispositivos especializados de hardware. Na maioria das aplicações, a criptografia é realizada através de software de computador.
De modo geral, os algoritmos simétricos são executados muito mais rapidamente que os assimétricos. Na prática, muitas vezes são utilizados em conjunto. Por exemplo, um algoritmo de chave pública é utilizado para cifrar uma chave cifrante gerada randomicamente e esta chave é usada para cifrar a mensagem com um algoritmo simétrico. Este processo, em alguns casos, é denominado cifragem híbrida.
A descrição de muitos algoritmos criptográficos de excelente qualidade é facilmente encontrada em livros, bibliotecas científicas, escritórios de patentes ou mesmo na Internet. As cifras simétricas mais estudadas, e provavelmente as mais disseminadas, são o DES e seu substituto mais provável, o AES. O RSA é provavelmente o algoritmo assimétrico mais conhecido.
ASSINATURAS DIGITAIS
Alguns algoritmos de chave pública podem ser utilizados para gerar assinaturas digitais. Uma assinatura digital é uma pequena quantidade de dados que foram criados usando-se alguma chave secreta. Através de uma chave pública é possível verificar se a assinatura realmente foi gerada com o uso da chave privada correspondente. O algoritmo usado para gerar a assinatura precisa garantir que, se a chave secreta não for conhecida, não seja possível criar uma assinatura válida.
As assinaturas digitais são usadas para verificar se uma mensagem realmente foi enviada pelo remetente declarado. Também podem ser usadas para datar documentos: uma pessoa de confiança assina o documento, a data e a hora com sua chave secreta, atestando que o documento existia no momento indicado.
Assinaturas digitais também podem ser usadas para testemunhar (ou certificar) que determinada chave pública pertence a uma determinada pessoa. Isto é feito assinando-se a combinação da chave e a informação sobre o proprietário através de chave de confiança. A assinatura digital de terceiros de confiança (proprietários de chaves de confiança), a chave pública e a informação a respeito de seu proprietário são geralmente chamadas de certificados.
A confiança numa chave de terceiros pode ser obtida através de uma nova assinatura por outra chave de confiança, e assim por diante, formando uma hierarquia de confiança. Independentemente do número de assinaturas, é preciso existir uma raiz nesta hierarquia, isto é, a confiança não se deve a alguém, mas sim porque se acredita a priori que determinada chave seja de confiança. Numa infraestrutura centralizada de chaves existem poucas raízes na rede de confiança, por exemplo, as agências governamentais de confiança. Estas raízes também são chamadas de autoridades de certificação. Numa infraestrutura distribuída não existe a necessidade da existência de quaisquer raízes universalmente aceitas e cada pessoa pode ter raízes de confiança diferentes. Este é o conceito de teia de confiança usado, por exemplo, no PGP.
A assinatura digital de um documento qualquer é tipicamente criada computando-se um resumo do texto do documento, concatenado a informações sobre o assinante, data e hora, etc. A string resultante é então cifrada usando-se um algoritmo apropriado e este bloco de bits cifrados é a assinatura. Geralmente esta é distribuída juntamente com a chave pública utilizada. Para conferir a assinatura, o destinatário precisa determinar inicialmente se acredita que a chave pertence à pessoa à qual se imagina que deve pertencer (usando a teia de confiança ou um conhecimento a priori) e depois decifrar a assinatura usando a chave pública da referida pessoa. Se a assinatura puder ser decifrada corretamente e a informação corresponder à mensagem (resumo apropriado, etc), a assinatura é aceita como válida.
Existem vários métodos para gerar e verificar assinaturas digitais. O algoritmo mais conhecido é o RSA.
FUNÇÕES HASH
A tradução literal de hash é "picar, misturar, confundir". Funções criptográficas hash são usadas em vários contextos, por exemplo, para computar um resumo de mensagem ao criar uma assinatura digital. Uma função hash comprime os bits de uma mensagem com um valor hash de tamanho fixo, distribuindo equitativamente as mensagens possíveis entre os valores hash possíveis. Uma função hash dificulta extremamente a tarefa de adequar uma mensagem qualquer a um valor hash particular.
Funções hash costumam produzir valores hash de 128 bits ou mais. Este número, 2128, é muito maior que o número de mensagens diferentes que possam ser trocadas no mundo todo. O motivo pelo qual se necessita mais de 128 bits baseia-se no paradoxo do aniversário. A grosso modo, o paradoxo do aniversário afirma que, se uma determinada função hash mapear qualquer mensagem num resumo hash de 128 bits, podemos esperar que o mesmo resumo será computado duas vezes quando 264 mensagens randomicamente selecionadas tiverem sido "hasheadas".
Muitas funções hash podem ser obtidas gratuitamente. As mais famosas são as da família MD, especialmente a MD4 e a MD5. A MD4 já foi quebrada e a MD5, apesar de ainda ser muito utilizada, também deveria ser considerada insegura. A SHA-1 e a RipeMD-160 são dois exemplos do que ainda se considera o estado da arte.
GERADORES DE NÚMEROS RANDÔMICOS
Geradores de números randômicos geram números randômicos para uso em aplicações criptográficas como, por exemplo, chaves. Geradores de números randômicos convencionais, encontrados na maioria das linguagens de programação ou ambientes de programação, não são apropriados para aplicações criptográficas porque foram planejados para usar randomicidade estatística e não resistem à criptoanálise.
Numa situação ótima, os números randômicos baseiam-se em fontes físicas verdadeiras de randomicidade que não possa ser prevista. Tais fontes podem incluir ruídos de um dispositivo semicondutor, bits menos significativos de uma entrada de audio ou os intervalos entre interrupções de dispositivos ou da digitação de um usuário. O ruído obtido de uma fonte física é então "destilado" por uma função hash para que cada bit dependa de todos os outros bits. Com alguma frequência, um grande reservatório de alguns milhares bits é usado para conter a randomicidade e faz-se com que cada bit do conjunto se torne dependente da entrada de ruído e de cada um dos outros bits do reservatório.
Quando não for possível contar com uma randomicidade física, é preciso usar números pseudo-randômicos. Esta não é uma situação desejável mas, com frequência, ocorre em computadores de uso geral. Sempre é desejável obter algum ruído ambiental - mesmo sendo os de latências de dispositivos, estatísticas de utilização de recursos, estatísticas de rede, interrupções de teclado ou qualquer outro. O importante é que os dados precisam ser imprevisíveis para qualquer observador externo e, para atingir este objetivo, o conjunto randômico precisa ter no mínimo 128 bits de entropia verdadeira.
A característica dos geradores de números pseudo-randômicos é que possuem um grande reservatório ("valor da semente" ou "seed value") com randomicidade. Obtém-se bits deste reservatório tirando dados do reservatório e opcionalmente passando estes dados por uma função hash para evitar que o conteúdo do reservatório seja revelado. Quando houver necessidade de mais bits, o reservatório é misturado cifrando seu conteúdo com uma cifra adequada de chave randômica (que pode ser retirada de uma parte não utilizada do reservatório) de modo que cada bit do reservatório fique dependente de cada um dos outros bits. É aconselhável inserir novos ruídos ambientais no reservatório antes de misturá-lo para fazer com que a previsão de valores passados ou futuros se torne ainda mais impossível.
Apesar de não ser muito difícil criar geradores de números randômicos criptograficamente fortes, com freqüência eles não são devidamente valorizados. A importância dos geradores randômicos precisa ser enfatizada - se mal projetados, podem se tornar o ponto mais fraco de todo um sistema.
Fonte
- SSH Communications Security - Cryptography A-Z
Texto publicado pela primeira vez na Aldeia em 12 Novembro de 2003.