

| com exemplos em VB |
| Componente para deixar forms em Vb semelhantes às telas do winnamp |
| Componente para colocar sua aplicação VB no Systray |
| Componente para transformar sua aplicação VB em serviço |
| Ferramentas úteis para quem usa Olap Server |
| |

![]() |
||||||||
|
|
||||||||
Por Dennes
Torres dennes@bufaloinfo.com.brDennes Torres possui as certificações MCAD, MCSD,MCSE, MCDBA e MCT. Atualmente atua Como diretor da Búfalo Informática, líder do grupo de usuários DevASPNet no Rio de Janeiro e membro da liderança dos grupos getWindows e devSQL, também do Rio de Janeiro, podendo sempre ser encontrado na lista de discussão do grupo DevASPNet (devaspnet-subscribe@yahoogrupos.com.br) bem como nas reuniões do grupo. Mantém dois blogs em http://cidadaocarioca.blogspot.com |
|
|
|
|
| Criptografando o web.config no .NET 2.0 | |
|
|
|
Os arquivos de configuração do .NET 2 possuem agora a possibilidade de criptografar quase todas as chaves dos arquivos de configuração.
O uso da criptografia funciona de forma totalmente transparente para a aplicação, que continuará lendo ou escrevendo nas chaves sem nem ao menos perceber que as chaves que estão sendo manipuladas encontram-se criptografadas.
Algumas chaves dos arquivos de configuração, porém, não podem ser criptografadas. São elas :
A criptografia pode ser feita com uso da ferramenta de prompt aspnet_regiis. Veja como fica a instrução para criptografar a chave connectionStrings dentro de um web.config :
aspnet_regiis -pef "connectionStrings" "C:\Projects\CestaCompras"
Observe que apontamos diretamente o diretorio em que se encontra o site e, também, o web.config deste site.
Veja o resultado dentro do web.config :
<connectionStrings configProtectionProvider="RsaProtectedConfigurationProvider">
<EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Element"
xmlns="http://www.w3.org/2001/04/xmlenc#">
<EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc" />
<KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
<EncryptedKey xmlns="http://www.w3.org/2001/04/xmlenc#">
<EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" />
<KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
<KeyName>Rsa Key</KeyName>
</KeyInfo>
<CipherData>
<CipherValue>cBaeS9TFrvcmIEOYkzbkZ/pBSFtttBX+CO6/VQyTF6FPBKUG7J2QbfcjvTuPFSzyZMd5hGQSiV2QeT1kgEDSTmHK0wVet3uaDRegUpsM3xk5tkQIq6VtmgMjiR7QFT4GbDHesvpkPzwdq5QPguyYOtxnI5n8B/KaK38WyAtrqac=</CipherValue>
</CipherData>
</EncryptedKey>
</KeyInfo>
<CipherData>
<CipherValue>Bd9mBN03jCF3SmSfx8exYZQmtZMw4au/MLePbq1ZIIwFDbdWFWmdTPd23BAnBHb37tBVq9n0o8e/hHksZ/ttPWETaVn8GamEAP8vrmyS3y8rpVvEKgViWwyeZyF5Id2TuaMTFxEt1mBm7cHZ3XRdG40XbXbyaSTXHNRZs4D0DpKfsC+XFA2Ylb9b4C+zMAd4sRY4U+HRa5oGWLEUDkYRFdyhEzls4LymlLOLHItMe/XNKAWVUUYwwBIA5BBYQuOrjCT6bhBfFWl+kSAWbKWh/bN8Kv61eywWKJhO0wzEs0/jwoKp04yTFAvFvAAJgwOYTrgKx2DSzdxk+ay/7F1J2ZReK5amYS7/1FipDSUcyx4GA5YQaQ4erd+dwYlNTK1ga0GzXEqi11hxPc1y1EVL67VVIVOUNVKHvH8n9AQ6Y6sTJP7W9+/CbDXMt2beoDV4IvnhXqQkU+cjgGDuLhHOw0AEtxjCK5QdmuDs6eae1GQ=</CipherValue>
</CipherData>
</EncryptedData>
</connectionStrings>
O fato deste trecho do web.config estar criptografado não muda em nada a execução da aplicação. A aplicação continua podendo ser executada normalmente, sem notar que parte das informações que utiliza estão criptografadas. O ASP.NET se encarrega de descriptografar a string ao entrega-la para a aplicação.
Vamos a alguns detalhes a mais sobre a criptografia :
Vamos ver então algumas variações na forma de criptografia.
Utilização de uma entropia
Conforme explicado no artigo acima, sobre DPAPI, entropia é uma informação personalizada fornecida pela aplicação e que será utilizada pelo DPAPI na formação da chave de criptografia. A entropia garante que uma outra aplicação, na mesma máquina que a nossa, não conseguirá descriptografar nossos dados, pois as entropias das aplicações serão diferentes.
Para definir uma entropia para nossa aplicação precisaremos redefinir o provider de criptografia e utilizar o novo provider para criptografar os dados.
Precisaremos adicionar a configuração do novo provider no web.config, veja como fica :
<configProtectedData>
<providers>
<add useMachineProtection="true" keyEntropy="CodigoMinhaApp" name="MyUserDataProtectionConfigurationProvider"
type="System.Configuration.DpapiProtectedConfigurationProvider, System.Configuration, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a" />
</providers>
</configProtectedData>
Tendo feito essa configuração no web.config, utilizamos a seguinte instrução para criptografar :
aspnet_regiis -pef "connectionStrings" "C:\Projects\CestaCompras" -prov "MyUserDataProtectionConfigurationProvider"
Desta forma apesar das outras aplicações utilizarem a mesma chave de criptografia que a nossa, a entropia será diferente e portanto não poderão descriptografar os dados gerados por essa aplicação.
Mas a entropia está aberta dentro do web.config, desta forma ela poderia ser capturada. Não temos como criptografar a entropia. O passo seguinte de segurança é fazer com que a aplicação utilize a segurança DPAPI isolada por usuário e não a segurança de máquina.
Proteção de dados por usuário
Assim como fizemos no exemplo anterior, configuraremos um provider personalizado, só que agora iremos alterar o parâmetro useMachineProtection para false.
<configProtectedData>
<providers>
<add useMachineProtection="false" keyEntropy="CodigoMinhaApp" name="MyUserDataProtectionConfigurationProvider"
type="System.Configuration.DpapiProtectedConfigurationProvider, System.Configuration, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a" />
</providers>
</configProtectedData>
A criptografia das configurações é feita de forma identica. O que muda é que a aplicação precisará estar rodando com a mesma identidade de usuário que nós utilizarmos para criptografar. Então é bem possível que tenhamos que definir um usuário utilizando o runAS. A execução do CMD precisa ser no seguinte formato :
Runas /profile /user:domain\user cmd
Depois deveremos garantir que a aplicação esteja utilizando este mesmo usuário durante sua execução.
Criptografia com provedores
Se estivermos utilizando um provedor de hospedagem, nada disso vai funcionar. Simples : Não conseguiremos executar nada disso diretamente no servidor do provedor.
A solução é simples : Criar uma página web temporária para fazer a criptografia. Veja um exemplo de código para isso :
69 Imports System.Web.Configuration
70 Partial Class _Default
71 Inherits System.Web.UI.Page
72
73 Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
74
75
76 Dim config As System.Configuration.Configuration = _
77 WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath)
78
79
80 config.ConnectionStrings.SectionInformation.ProtectSection("DataProtectionConfigurationProvider")
81
82
83
84 config.Save()
85 End Sub
86 End Class
Descriptografia
Para descriptografar os dados, basta alterar o parâmetro utilizado na instrução de prompt :
aspnet_regiis -pdf "connectionStrings" C:\Projects\MachineDPAPI
Já em código basta utilizar o método UnprotectSession
Veja abaixo os comentários já enviados :
| Nome : luiz fernando | E-Mail : luizfg56@gmail.com |
| Dennes,gostei muito deste artigo, me ajudou a fazer um trabalho na faculade, estudo na faculade bennett metodista, onde assisti algumas palestras suas, gostaria que vc me explicasse se não for tomar seu tempo, alguns topicos de segurança da informação 1- o que são algoritmos fortes 2 - o que é uso inseguro de algoritmos fortes 3- o que são informações sensiveis em sistema de armazenamento 4- uso de algoritmos caseiros obrigado pela atenção abços |
|