quinta-feira, 8 de julho de 2010

Dicas - Manipulação de Caminhos no ASP.NET

///<summary>
///Classe utilitária que oferece suporte a manipulação dos caminhos virtuais.
///</summary>
class System.Web.VirtualPathUtility

Referências:

quarta-feira, 7 de julho de 2010

Criptografia e Certificação Digital

Este artigo aplica-se aos seguintes produtos e tecnologias:

• Microsoft .Net Framework 2.0

Resumo

Este artigo apresenta uma visão geral das classes de criptografia e certificação digital do .Net Framework, fornecendo subsídios para auxiliar na escolha correta de um mecanismo para criptografia e segurança de dados.

Introdução

Em nossa área, são freqüentes as dificuldades em escolher ou até mesmo compreender alguns conceitos de criptografia no .NET. É de conhecimento notório para muitos programadores o namespace “System.Security.Cryptography”, todavia o que gera dúvidas é a correta utilização das classes de criptografia em cada um dos cenários que enfrentamos em nosso dia-a-dia. Desta forma, este namespace proporciona uma série de classes que dão suporte a criptografia e, até mesmo, a utilização de assinaturas digitais. O presente artigo abordará uma visão geral e introdutória sobre as classes de criptografia em que são utilizados os algoritmos simétricos, assimétricos, Hash e, por fim, as assinaturas digitais.

Princípios

Atualmente, utiliza-se a criptografia para assegurar três princípios básicos e inerentes à informação: Sigilo, Integridade e Autenticidade.

No que concerne ao sigilo, o objetivo é ocultar ou dificultar o acesso às informações confidenciais. Já em relação à integridade, busca-se assegurar que a informação é confiável e não foi alterada ou modificada de forma “maliciosa” e, por fim, no que se refere à autenticidade, visa-se garantir que a origem da informação seja conhecida e atestada.

Criptografia

Como citado no início, o namespace “System.Security.Cryptography” fornece uma série de classes que dão suporte aos mais diversos algoritmos de criptografia. Estas classes, porém são abstratas e, por sua vez, implementadas de acordo com os diagramas seguintes.

Ilustração 1 - Diagrama de classes para criptografia assimétrica

Os algoritmos assimétricos são indicados e se apresentam como os mais adequados para viabilizar a troca de informação em meios inseguros, nos quais cada participante possui um par de chaves, uma pública e outra particular.

Nesse caso, quem utiliza a chave pública para criptografar os dados deve utilizar a particular para descriptografar e vice-versa. Sendo assim, se o usuário distribuir a chave pública, qualquer pessoa poderá gerar informações, as quais somente o usuário que tem a chave particular poderá ler.

Por outro lado, se o usuário gerar os dados com a chave particular, todos que têm acesso a chave pública poderão descriptografar os dados.
Ilustração 2 - Diagrama de classes para criptografia simétricas

Por sua vez, o uso de algoritmos simétricos permite uma criptografia rápida, já que utiliza algoritmos de complexidade simples e chaves menores. Neste caso, cada usuário deverá utilizar a mesma chave para ler e gerar as informações.
Ilustração 3 - Diagrama de classes para criptografia Hash

Já os algoritmos de Hash oferecem suporte à integridade dos dados, garantido que a informação não tenha sido adulterada durante a sua passagem entre os diversos meios.

Certificados e Assinaturas Digitais

Dentro do namespace “System.Security.X509Certificates” encontramos as classes que dão suporte aos certificados digitais. Um certificado do tipo “X509” contém, além das informações de usuário, outros tipos de dados, como por exemplo, o e-mail, informações para assinatura digital e etc. Este tipo de certificado é assinado digitalmente por um terceiro (CA – Certification Authority) que garante a autenticidade deste certificado.

Existem muitos motivos para a utilização de certificados digitais. O usuário pode utilizar este tipo de certificado para autenticar serviços, aplicativos, clientes, assinar digitalmente documentos, sites e aplicações seguras (SSL), IPSec e etc.

Quando usamos um certificado digital para assinarmos digitalmente algum arquivo, um hash deste arquivo é gerado e criptografado com as informações contidas no certificado digital. Assim o receptor do arquivo garante autenticidade, pois confia em quem autenticou o certificado digital e sabe que a informação mantém-se íntegra, pois através do certificado consegue validar o hash do arquivo.

Conclusão

Considerando que o objetivo deste artigo é apresentar uma breve introdução das classes de criptografia do .NET, auxiliando os desenvolvedores na escolha do algoritmo conveniente no contexto do software e abrindo caminho para que nos próximos artigos sejam abordadas algumas de suas implementações, já podemos observar, de imediato, a versatilidade e o leque de opções disponíveis no .Net para segurança e criptografia de dados.

Links Relacionados


Bibliografia Utilizada

• Building Secure ASP.NET Applications, Microsoft Patterns & Practices