Gerando chaves para os atributos validationKey e decryptionKey

Como comentei no post anterior, precisamos ter uma chave única para que seja possível sincronizar os algoritmos de criptografia que o ASP.NET utiliza. Sendo assim, é necessário criar estas chaves e espeficá-las no arquivo Web.Config, como é mostrado abaixo:

<?xml version=”1.0″?>
<configuration>
  <system.web>
    <machineKey
        validationKey=”73…7B”
        decryptionKey=”CF…3B”
        validation=”SHA1″
        decryption=”AES” />
  </system.web>
</configuration>

Uma classe para auxiliar na geração destas chaves está aqui. É importante dizer que está seção é extremamente sensível, o que obriga voce a manter essas informações fora do alcance de todos.

Protegendo a seção machineKey

Uma vez que voce customiza a seção machineKey no arquivo Web.Config, é importante que as informações que nela constam sejam protegidas para que as chaves não caiam em mãos erradas.

Como sabem, o utilitário aspnet_regiis.exe permite-nos encriptar seções do arquivo Web.Config e, a aplicação irá trabalhar de forma transparente, sendo inteligente o bastante para saber se a mesma está ou não criptografa e, quando estiver, aplicará o algoritmo correto para recuperar os respectivos valores. A sintaxe para encriptar esta seção é simples:

C:>aspnet_regiis -pef system.web/machineKey “C:ExtraindoPasswordMembership” -prov “DataProtectionConfigurationProvider”

No atributo -pef informamos a seção do arquivo que queremos encriptar incluindo o caminho físico até a pasta que consta o arquivo Web.Config e, através do atributo -prov, informamos qual será o provider de criptografia a ser utilizado pelo utilitário. O resultado fica algo como:

<?xml version=”1.0″?>
<configuration>
  <system.web>
    <machineKey configProtectionProvider=”DataProtectionConfigurationProvider”>
      <EncryptedData>
        <CipherData>
          <CipherValue>AQAAANCMn….+m2p8oLI=</CipherValue>
        </CipherData>
      </EncryptedData>
    </machineKey>
  </system.web>
</configuration>