Ir para o conteúdo

Configuração de Criptografia de Dados

O Vinyl usa criptografia de dados para duas finalidades:

  • Proteger tokens de segurança, como cookies de sessão.
  • criptografia de coluna em nível de aplicativo.

Ambos usam a mesma tecnologia subjacente de criptografia de dados. Especificamente, eles usam a API ASP.Net Data Protection. Embora o Vinyl tente configurar a biblioteca de proteção de dados automaticamente, configurações adicionais podem ser necessárias.

Nota

Este artigo se aplica ao Vinyl 3.0 e versões anteriores. Consulte Configuração de criptografia de dados artigo para Vinyl 3.1+.

Armazenamento de Chave de Criptografia de Dados

Chaves de criptografia de dados (DEKs) são chaves de criptografia simétricas usadas para proteger dados. Como as DEKs são usadas para criptografar dados armazenados no banco de dados, as próprias DEKs não podem ser armazenadas no banco de dados. O Vinyl oferece suporte a diversas políticas de armazenamento DEK configuráveis. Os administradores devem escolher a política de armazenamento apropriada para seu ambiente. O Vinyl oferece suporte às seguintes políticas de armazenamento:

  • Sistema de arquivo
  • S3

A política de armazenamento é configurada via AppSettings. Consulte Configuração .Net personalizada para obter informações adicionais sobre AppSettings.

Armazenamento do Sistema de Arquivos

No Vinyl 3.1+ a criptografia de dados é configurada em AppSettings.json.

Configuração Exemplo Notas
DataEncryptionKeyStorage Sistema de arquivos Indica que o Vinyl deve armazenar DEKs no sistema de arquivos. Este é o valor padrão.
DataEncryptionKeyDirectory C:\inetpub\wwwroot\Vinyl\App_Data\Keys Identifica o diretório no qual os DEKs serão armazenados. O padrão é o diretório App_Data\Keys, abaixo do diretório de instalação do Vinyl. O usuário do pool de aplicativos deve ter controle total desse diretório.
KeyEncryptionKeyCertificateThumbprint C123B3E899807189F11F0EC4AC320760F00ECE34 Opcional. Impressão digital X.509 da chave de criptografia (KEK). O certificado KEK deve ser registrado no armazenamento de certificados pessoais do computador local. A impressão digital pode ser encontrada observando as propriedades do certificado.

Exemplo de Configuração de AppSettings

<?xml version="1.0" encoding="utf-8" ?>
<appSettings>
  <add key="DataEncryptionKeyStorage" value="FileSystem" />
  <add key="DataEncryptionKeyDirectory" value="C:\inetpub\wwwroot\Vinyl\App_Data\Keys" />
  <add key="KeyEncryptionKeyCertificateThumbprint" value="C123B3E899807189F11F0EC4AC320760F00ECE34" />
</appSettings>

Armazenamento Amazon S3

Como o armazenamento local da instância do EC2 não pode ser usado para armazenamento de longo prazo, os DEKs devem ser armazenados em outro lugar. O Vinyl oferece suporte ao armazenamento de DEKs em buckets S3. As configurações a seguir configuram o armazenamento S3 DEK.

Configuração Exemplo Notas
DataEncryptionKeyStorage S3 Indica que o Vinyl deve armazenar DEKs no Amazon S3.
DataEncryptionKeyS3BucketEndpoint https://s3.amazonaws.com/vinyl-data-encryption-keys
-ou-
https://vinyl-data-encryption-keys.s3.amazonaws.com/
Identifica a região AWS e o bucket S3 nos quais as chaves S3 serão armazenadas. A URL deve ter um dos seguintes formatos:
  • https://s3{-aws-region}.amazonaws.com/{bucket}
  • https://{bucket}.s3{-aws-region}.amazonaws.com
Para obter mais informações, consulte o seguinte documento: http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingBucket.html
DataEncryptionKeyS3KeyPrefix desenvolvedor Opcional. Permite que vários ambientes armazenem DEKs no mesmo bucket, isolando as chaves por prefixo.

Exemplo de Configuração de AppSettings.json

<?xml version="1.0" encoding="utf-8" ?>
<appSettings>
  <add key="DataEncryptionKeyStorage" value="FileSystem" />
  <add key="DataEncryptionKeyDirectory" value="C:\inetpub\wwwroot\Vinyl\App_Data\Keys" />
  <add key="KeyEncryptionKeyCertificateThumbprint" value="C123B3E899807189F11F0EC4AC320760F00ECE34" />
</appSettings>

Configuração do Elastic Beanstalk

O Vinyl vem com um script .ebextensions que registra automaticamente as propriedades do ambiente para armazenamento S3 DEK.

Cuidado

O Vinyl não iniciará com as propriedades padrão do ambiente do Elastic Beanstalk. Você deve alterar o DataEncryptionKeyS3BucketEndpoint e DataEncryptionKeyS3KeyPrefix valores.

Conceder Acesso aos Ambientes do Elastic Beanstalk aos Buckets do S3

Armazenar chaves de acesso no servidor web é desaconselhável.

As instâncias do EC2 em um ambiente do Elastic Beanstalk são atribuídas a uma papel. Considere usar políticas de papel para conceder às instâncias do EC2 acesso a um bucket S3. O exemplo de política a seguir concede acesso a um bucket do S3.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::{bucket-name}/*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListAllMyBuckets",
                "s3:GetBucketLocation",
                "s3:ListBucket"
            ],
            "Resource": "*"
        }
    ]
}

Provedores de Criptografia

Em .Net, as implementações de algoritmos criptográficos podem ser fornecidas por um dos três provedores de criptografia.

  • Crypto Service Provider (CSP) - O Crypto Service Provider é um wrapper em torno da API de criptografia do Windows (CAPI). CAPI foi descontinuado. Este provedor, portanto, não é compatível.
  • Criptografia de próxima geração (CNG) - Os algoritmos implementados pelo provedor de CNG são normalmente compatíveis com FIPS. No entanto, o CNG não é totalmente compatível com o Windows Server 2008. Este é o provedor de criptografia padrão.
  • Gerenciado - Os algoritmos implementados por este provedor normalmente não são compatíveis com FIPS. Eles podem ser mais lentos que implementações equivalentes de CNG. No entanto, as implementações gerenciadas são fornecidas com o .Net Framework e, portanto, estão disponíveis em todas as plataformas.

O provedor de criptografia é configurado por meio de AppSettings.json.

Exemplo de Configuração de AppSettings

<?xml version="1.0" encoding="utf-8" ?>
<appSettings>
    <add key="DataEncryptionCryptoProvider" value="Managed" />
</appSettings>