No mundo corporativo de hoje, a segurança com os dados e informações é primordial.
O SQL Server se preocupa com isso e implementa alguns artificios em relação a criptografia e segurança
de dados.

SQL Server criptografa dados com uma criptografia hierárquica e infra-estrutura de gerenciamento de chaves. Cada camada criptografa a camada abaixo dela, usando uma combinação de certificados, chaves assimétricas, e as chaves simétricas. As chaves assimétricas e chaves simétricas podem ser armazenados fora do SQL Server em um módulo chamado Extensible Key Management (EKM).

A imagem baixo, retirada do site da TechNet, mostra a hierarquia de criptografia.

 

 

O acesso ao início da hierarquia é geralmente protegido por uma senha.

A figura mostra que tudo começa com a criptografia do Windows através da API Data Protection que proteje a Service Master Key (SMK) onde começa nossa aventura no mundo do SQL Server.

Service Master Key

Service Master Key forma a base para a hierarquia da criptografia no SQL Server e é necessária para que você possa criar categorias de certificados ou chaves assimétricas. A Master Key é gerada automaticamente na primeira vez que a instância é iniciada. Por padrão, Service Master Key é criptografada usando a API de proteção de dados do Windows e usa a chave da máquina local. Service Master Key só pode ser aberta pela conta de serviço do Windows em que ela foi criada, ou por uma entidade com acesso tanto ao nome da conta de serviço e sua senha. A Service Master Key é usada para criptografar qualquer database master key que é criado dentro da instância.

Regenerar ou recuperar a Service Master Key envolve descriptografar e re-criptografar a hierarquia de criptografia completa.

Database Master Key

Cada banco de dados tem uma Master Key diferentes, garantindo que um usuário com acesso a descodificar os dados em um database também não pode decifrar dados em outro database sem ser concedido permissão para ele executar essa tarefa.

A Database Master Key é usado para proteger todos os certificado, chave simétrica, ou chave assimétrica que são armazenadas detro de um database e é criptografada com o Triple DES e a senha fornecida pelo usuário. Uma cópia da Database Master Key também é criptografada usando a Service Master Key de tal forma que a descriptografia automática pode ser realizado dentro da instância.

Vamos demostrar a criação de uma Database Master Key, criei um database chamado CRIPTOGRAFIA”

USE [master]

GO

CREATE DATABASE [CRIPTOGRAFIA]

GO

A Database Master Key deve ser gerada explicitamente usando o seguinte comando:

USE [CRIPTOGRAFIA]

GO

CREATE MASTER KEY ENCRYPTION BY PASSWORD = ‘passwordDatabase’

GO

Para verifcar informações sobre chaves de criptografia, você pode consultar uma DMV (Dynamic Management View)

USE [master]

GO

SELECT * FROM sys.symmetric_keys

GO

 

Quando você faz uma solicitação para descriptografar dados, a Master Key é usada para descriptografar a Database Master Key, que é usada para descriptografar um certificado, chave simétrica, ou chave assimétrica, e por sua vez é usada para descriptografar os dados.

A razão dessa hierarquia é importante e que você deve ter cuidado quando for preciso mover backups contendo os dados criptografados entre instâncias do SQL Server. Para restaurar e ser capaz de decifrar os dados com sucesso, você também deve fazer backup da Database Master Key e depois gerar a Database Master Key em outra instância.

Certificados

Os certificados são chaves baseado no padrão X.509 que são utilizados para autenticar as credenciais da entidade. Você pode criar certificados públicos ou privados. Um certificado público é essencialmente um arquivo que é fornecido por uma autoridade de certificado que valida a entidade, através do certificado. Os certificados privados são gerados e utilizados para proteger os dados dentro de uma organização.

Para criar um certificado assinado no SQL Server, você deve usar o seguinte comando:

USE [CRIPTOGRAFIA]

GO

CREATE CERTIFICATE CertificadoBlog

ENCRYPTION BY PASSWORD = ‘passwordCertificado’

WITH SUBJECT = ‘Certificado Blog’,

EXPIRY_DATE = ’12/31/2010′;

GO

Assinaturas

Assinaturas permitem elevar a permissão de um usuário, mas para proporcionar isso o usuário deve estar executando um pedaço especificações de código ou seja, você so pode adicionar uma assinatura digital para um módulo de stored procedure, function, trigger e assemblies.

O processo para assinar digitalmente um código para gerenciar as permissões é o seguinte:

  • Criar uma Database Master Key.

    (repetindo o código acima)

USE [CRIPTOGRAFIA]

GO

CREATE MASTER KEY ENCRYPTION BY PASSWORD = ‘passwordDatabase’

GO

  • Criar um certificado no database

    (repetindo o código acima)

USE [CRIPTOGRAFIA]

GO

CREATE CERTIFICATE CertificadoBlog

ENCRYPTION BY PASSWORD = ‘passwordCertificado’

WITH SUBJECT = ‘Certificado Blog’,

EXPIRY_DATE = ’12/31/2010′;

GO

Criar um usuário mapeado para o certificado.

USE [CRIPTOGRAFIA]

GO

CREATE USER UserBlog FOR CERTIFICATE CertificadoBlog;

GO

  • Atribuir permissões em um objeto ou objetos para o usuário.

   Vou criar uma serie de objetos no database para demonstrar a assinatura.

USE [CRIPTOGRAFIA]

GO

CREATE TABLE dbo.Secretaria(

idSec int IDENTITY(1,1),

nomeSec nvarchar(300) NOT NULL,

responsavelSec nvarchar(300) NOT NULL,

CONSTRAINT Secretaria_PK PRIMARY KEY CLUSTERED (idSec) )

GO

USE [CRIPTOGRAFIA]

GO

CREATE PROCEDURE dbo.USP_LISTA_SECRETARIA AS

SELECT * FROM dbo.Secretaria

Depois de criar os objetos vou dar permissão ao usuario UserBlog que criamos para o certificado.

GRANT EXECUTE ON dbo.USP_LISTA_SECRETARIA TO UserBlog

  • Assinar digitalmente um módulo para o certificado.

      USE [CRIPTOGRAFIA]

GO

ADD SIGNATURE TO dbo.USP_LISTA_SECRETARIA BY CERTIFICATE CertificadoBlog WITH PASSWORD = ‘passwordCertificado’

Symmetric Keys

As chaves simétricas utilizam uma única chave de criptografia e descriptografia. Como apenas uma única chave é necessária para criptografar e descriptografar dados, a criptografia de chave simétrica não é tão forte como os certificado ou chave assimétrica baseada em criptografia. No entanto, as chaves simétricas proporcionar o melhor desempenho possível para o uso rotineiro de dados criptografados.

Legal, e agora? O que isso muda?

Vamos lá… vou mostrar o que isso muda e como faz diferença.

Vou aproveitar que já criamos uma Master Key e um Certificado e vou apenas criar uma Symmetric Keys

USE [CRIPTOGRAFIA]

GO

CREATE SYMMETRIC KEY EncriptaTabela

WITH ALGORITHM = TRIPLE_DES

ENCRYPTION BY CERTIFICATE CertificadoBlog

Vamos inserir alguns dados na tabela “Secretaria” que tambem já criamos utilizando a chave simetrica.

OPEN SYMMETRIC KEY EncriptaTabela

DECRYPTION BY CERTIFICATE CertificadoBlog WITH PASSWORD = ‘passwordCertificado’

insert into CRIPTOGRAFIA.dbo.secretaria

( nomeSec

,responsavelSec

)

values

( ENCRYPTBYKEY(KEY_GUID(‘EncriptaTabela’),‘Urbanismo’)

,ENCRYPTBYKEY(KEY_GUID(‘EncriptaTabela’),‘Fernado B.’)

)

insert into CRIPTOGRAFIA.dbo.secretaria

( nomeSec

,responsavelSec

)

values

( ENCRYPTBYKEY(KEY_GUID(‘EncriptaTabela’),‘Meio Ambiente’)

,ENCRYPTBYKEY(KEY_GUID(‘EncriptaTabela’),‘Ricardo G.’)

)

insert into CRIPTOGRAFIA.dbo.secretaria

( nomeSec

,responsavelSec

)

values

( ENCRYPTBYKEY(KEY_GUID(‘EncriptaTabela’),‘Educacao’)

,ENCRYPTBYKEY(KEY_GUID(‘EncriptaTabela’),‘Aline A.’)

)


Dessa forma meus dados estão todos criptografados. Como mostra a figura abaixo.

 

Ok.. você pode perguntar.. ele não usou a função para descriptografar. Tudo bem, vamos lá.

Hum.. e agora? Como eu recupero meus dados? Será que eles estão guardados?

Calma, seus dados estão lá. Para recuperar nos precisamos usar a mesma função para inserir dados.

 

Um detalhe importante. Não esqueça de fechar a chave, isso garante a segurança na hora de leitura dos dados!

Backup Master key e Certificates

Porque devemos fazer backup da Master Key e de Certificados?

A resposta é simples! São eles que permitem a criptografia dos seus dados e apenas eles podem descriptografar os dados.

Não adianta nada voce criptografar os dados se qualquer um pudesse abri-los em qualquer lugar.

A sintaxe genérica para fazer backup de um DMK é:

USE [CRIPTOGRAFIA]

GO

BACKUP SERVICE MASTER KEY TO FILE = ‘D:Bancos de DadosMasterKey’ ENCRYPTION BY PASSWORD = ‘password’;

Database Master Key (DMKs) são criadas antes de um certificado, uma chave simétrica, ou chave assimétrica. A DMK é a raiz da hierarquia de criptografia em um banco de dados. Para garantir que você pode acessar certificados, chaves assimétricas, e as chaves simétricas dentro de um banco de dados, você precisa ter uma cópia de segurança da DMK.

Antes que você pode fazer backup de um DMK, ela deve ser aberta. Por padrão, um DMK é criptografada com a chave mestra de serviço. Você deve abrir a DMK usando o seguinte comando:

USE [CRIPTOGRAFIA]

GO

OPEN MASTER KEY DECRYPTION BY PASSWORD = ‘passwordDatabase’;

Os certificados são usados para criptografar dados, bem como assinaturas digitais. Apesar de você poder criar um novo certifcado para substituir a assinatura digital, no caso da perda de um
certificado, você deve ter o certificado original para acessar todos os dados que foram criptografados com
ele. Você pode fazer backup somente da chave pública, usando o seguinte comando:

BACKUP CERTIFICATE CertificadoBlog TO FILE = ‘D:Bancos de DadosCertificado1’

CLOSE MASTER KEY

No entanto, se você restaurar um backup de um certificado, contendo apenas a chave pública, o SQL Server gera uma nova chave privada. Infelizmente, a chave privada é um componente importante de um certificado que é usado para criptografar e descriptografar dados no SQL Server. Portanto, é preciso assegurar que o backup contenha tanto chaves públicas e privadas para um certificado. Assim como Master Key, você deve fazer backup de um certificado imediatamente após a criação, utilizando o seguinte comando:

USE [CRIPTOGRAFIA]

GO

OPEN MASTER KEY DECRYPTION BY PASSWORD = ‘passwordDatabase’;

BACKUP CERTIFICATE CertificadoBlog TO FILE = ‘D:Bancos de DadosCertificado2’

WITH PRIVATE KEY ( DECRYPTION BY PASSWORD = ‘passwordCertificado’ ,

        FILE = ‘D:Bancos de DadosPrivateKey1’ ,

ENCRYPTION BY PASSWORD = ‘passwordBackup’ )

)

CLOSE MASTER KEY

Maníaco, entusiasta, fascinado, fanático por SQL Server e nas horas vagas um DBA que adora o que faz! Também possui certificações como: MCT, MCSE - Data Management and Analystics, MCSA - SQL Server 2014/2012

Responda