Introdução a criptografia
Este artigo não descreve algoritmos de criptografia nem ensina a quebrá-los. Trata-se de uma introdução. Se você não sabe a diferença entre chave e senha, ou entre algoritmos simétricos e assimétricos, se não sabe o que é o ataque de força bruta e quantos bits precisa ter para ser seguro, então este artigo poderá lhe ser útil.
Parte 7: Conclusões
Este artigo é apenas uma introdução para, quem sabe, ser continuado em artigos futuros. Muita coisa ficou de fora, como os tipos de cifras (de bloco, de fluxo), algoritmos de HASH e até mesmo a descrição dos algoritmos. Entender o funcionamento de um RSA por exemplo é muito gratificante, embora não interesse a maioria. Para nós o mais importante é saber como empregá-los e não os seus princípios matemáticos. Se os matemáticos dizem que que é inviável, que seja. A gente acredita, implementa e usa!
Deve-se dizer que os algoritmos assimétricos são extremamente onerosos, ou seja, consomem muita CPU. Seu uso deve ser evitado ou, pelo menos, minimizado pois o processador agradece. Como os simétricos são absolutamente seguros e rápidos, sendo seu único problema a troca de chave, é comum usar um assimétricos apenas para trocar a chave convergindo após para um simétrico. O protocolo SSL é exatamente assim (quem está por trás do SSH e o HTTPS, dentre outros).
De forma muito resumida, o que o SSL faz é mais ou menos o seguinte:
Esta é a ideia, usar o oneroso algoritmo assimétrico apenas o necessário, nada além disto.
Outras aplicações muito populares usam vários tipos de cifras, cada uma dentro do seu contexto, de forma que os assimétricos não estão ai para substituir os simétricos, mas sim para complementá-lo. Um exemplo disto é quanto a assinatura digital que emprega algoritmo assimétrico e um de HASH, igualmente para poupar esforço (pense em assinar um documento de 1GB. Rodar um assimétrico sobre 1G é oneroso. Mas rodar ele sobre um HASH de 256 bits é bem mais prático).
Deve-se dizer que os algoritmos assimétricos são extremamente onerosos, ou seja, consomem muita CPU. Seu uso deve ser evitado ou, pelo menos, minimizado pois o processador agradece. Como os simétricos são absolutamente seguros e rápidos, sendo seu único problema a troca de chave, é comum usar um assimétricos apenas para trocar a chave convergindo após para um simétrico. O protocolo SSL é exatamente assim (quem está por trás do SSH e o HTTPS, dentre outros).
De forma muito resumida, o que o SSL faz é mais ou menos o seguinte:
- Cliente e servidor concordam em qual algoritmo simétrico irão utilizar. Exemplo: AES128;
- Cliente solicita a chave pública do servidor (na prática chama-se certificado, mas como disse, estou descrevendo de forma muito resumida);
- Cliente escolhe aleatoriamente uma chave k de sessão;
- Cliente cifra a chave que ele escolheu com a chave pública do servidor;
- Cliente envia k cifrado para o servidor. Até ai se usou o algoritmo assimétrico;
- Servidor recebe k cifrado, decifra com a sua chave privada;
- Cliente e servidor agora conversam usando o AES128 usando a chave simétrica k.
Esta é a ideia, usar o oneroso algoritmo assimétrico apenas o necessário, nada além disto.
Outras aplicações muito populares usam vários tipos de cifras, cada uma dentro do seu contexto, de forma que os assimétricos não estão ai para substituir os simétricos, mas sim para complementá-lo. Um exemplo disto é quanto a assinatura digital que emprega algoritmo assimétrico e um de HASH, igualmente para poupar esforço (pense em assinar um documento de 1GB. Rodar um assimétrico sobre 1G é oneroso. Mas rodar ele sobre um HASH de 256 bits é bem mais prático).
http://www.vivaolinux.com.br/artigo/Criptografia-chave-simetrica-de-bloco-e-de-fluxo