Esse artigo faz parte da revista .NET Magazine edição 63. Clique aqui para ler todos os artigos desta edição

Clique aqui para ler essa revista em PDF.imagem_pdf.jpg

Criptografia

 

Conceitos, padrões e um pouco de história

Apesar de bastante presente hoje em dia, o estudo da criptografia não é algo novo. É uma ciência estudada desde a Roma Antiga, época em que os algoritmos usados para criptografar informações eram bem simples. Desde então essa ciência vem se desenvolvendo até chegarmos aos sofisticados e complexos algoritmos de encriptação e decriptação de hoje, estudada por teóricos e cientistas da informação, matemáticos, e até físicos.

Nos dias de hoje a criptografia se concentra no estudo de algoritmos que possam ser implementados em computadores. Estes algoritmos fazem o embaralhamento da informação a partir de uma chave ou um par de chaves. No nosso caso essas chaves são sequências de bits que nos permitem encriptar e decriptar informações. A encriptação feita com apenas uma chave é chamada de encriptação simétrica. Aquela feita com um par de chaves é chamada de encriptação assimétrica.

E aos programadores que precisam proteger informações sigilosas em seus sistemas, a boa notícia é que alguns algoritmos, simétricos e assimétricos já estão implementados na plataforma .NET, prontos para serem usados.

Neste artigo não trataremos da complexidade e da teoria, apenas faremos uma introdução conceitual e prática sobre criptografia e como a plataforma .NET a implementa. Também daremos algumas dicas de políticas de uso da criptografia e de alguns exemplos implementados.

 

Encriptação com chave simétrica

Encriptação com chave simétrica, também conhecida como encriptação com chave secreta, é uma técnica que consiste no uso de uma única chave secreta para encriptar e decriptar dados. Os algoritmos usados nessa técnica processam documentos utilizando essa chave, o texto encriptado não pode ser restaurado ao seu formato original de maneira fácil, sem a posse da chave secreta. As Figuras 1 e 2 mostram como funciona a encriptação e a decriptação usando chave simétrica.

 

Figura 1. Encriptação

 

 

Figura 2. Decriptação

 

A principal vantagem dos algoritmos simétricos é que eles são rápidos e adequados à encriptação de grandes arquivos. Mas embora este tipo de encriptação seja bastante segura, uma pessoa mal intencionada com conhecimentos técnicos suficiente pode recuperar o arquivo original, se ele tiver tempo suficiente. Basta usar algoritmos de força bruta para gerar todas as chaves simétricas possíveis. Esse tempo é tipicamente da ordem de centenas de anos, pois o cracker (pessoa que tenta quebrar uma emcriptação) deve tentar, no mínimo,  possibilidades. Note que dessa forma algoritmos simétricos seguros usam chaves grandes, pois o tempo para quebrar o nosso código, varia exponencialmente com o tamanho da chave. Essencialmente, quanto maior a chave usada para encriptar e decriptar, maior será o tempo necessário para decifrar informação criptografada.

 

Nota do DevMan

Os algoritmos de criptografia implementados na plataforma .NET não foram criados pela Microsoft. Eles foram criados e testados à exaustão, tanto pela indústria quanto pelo meio acadêmico. Sendo assim, você não precisa projetar seus próprios algoritmos de criptografia. Basta usar aqueles fornecidos pelo Framework .NET.

 

A desvantagem da encriptação de chave secreta, é que ela assume que duas ou mais pessoas concordaram no uso de uma determinada chave. Tal acordo pode ser um problema, pois a chave em si, geralmente não é encriptada. Sendo assim, os usuários deste tipo de encriptação devem encontrar um modo seguro de trocar chaves secretas. Após isso, informações encriptadas podem ser trocadas entre todos os usuários deste sistema. Uma dica para manter tal sistema de troca de informações é mudar a chave periodicamente, da mesma forma que mudamos periodicamente nossas senhas mais importantes.

A dica é fazer com que os usuários transfiram tanto a mensagem encriptada quanto a chave para decriptá-la usando diferentes protocolos de comunicação. Isso dará uma maior segurança na prevenção de um possível ataque à infra-estrutura de troca de mensagens sigilosas.

 

Classes que implementam algoritmos simétricos

As funcionalidades de criptografia da plataforma .NET podem ser encontradas sob o namespace System.Security.Cryptography. Nele temos as implementações de cinco algoritmos simétricos. Duas delas são implementadas nativamente na plataforma e as outras três são adaptações que acessam código não-gerenciado, devendo assim ser evitadas. Mas independentemente disso todas as implementações herdam da classe SymmetricAlgorithm. Eles estão descritos logo a seguir:

 

· RijndaelManaged - É a implementação do algoritmo de Rijndael, também conhecido como AES, que significa Advanced Encription Standard (Padrão Avançado de Criptografia). É o padrão de criptografia do governo norte-americano e aceita chaves de 128 a 256 bits. É um algoritmo inteiramente implementado pela plataforma .NET.

 

AesManaged – É essencialmente o algoritmo de Rijndael, com um tamanho fixo de blocos (128 bits). Embora sejam tecnicamente diferentes é comum encontrar textos que tratam desses dois algoritmos como sendo exatamente iguais.

· DES - Significa Data Encription Standard (Padrão de Encriptação de Dados), e aceita chaves pequenas, da ordem de 56 bits. É na verdade um wrapper, que acessa código não-gerenciado. Melhor usá-lo apenas quando integração com bases legadas for essencial. ...

Quer ler esse conteúdo completo? Tenha acesso completo