Entenda o Transparent Data Encryption(TDE)!

Posted on junho 20, 2011

2


Segurança de um Banco de Dados

Os bancos de dados são utilizados para armazenar diversos tipos de dados, como:

Informações bancárias, email ou informãções pessoais, senha de cartão, quantidade de vendas de um determinado produto, valor total de vendas no ano, informações de seguro, de vida dentre outros.

A grande preocupação é, manter esses dados de forma segura, integre e que gere assim a confiabilidade em um sistema.

Toda essa segurança não depende somente do banco de dados, mais sim da rede na qual o banco está hospedado, os logins de acesso, o firewall e outros mecanismos que podem ajudar a manter seu dados seguro dentro de um  banco de dados.

Criptografia dos Dados

A criptografia de dados é um recurso bastante utilizado por empresas na qual possuem dados sensitivos ou seja,  dados no qual são cruciais para a empresa e não podem ser tocados por pessoas não autorizadas.

A criptografia é um estudo de técnicas matemáticas que fazem com que a informação original possa se tornar ilegível para pessos qua não possuem acesso a mesma.

TDE – Transparent Data Encryption

Dentro do SQL Server, temos alguns modos de realizar a criptografia, dentre elas temos o TDE ou seja a criptografia de dados transparente, que possibilita que os arquivos físicos, como os de backup, arquivos de dados (.mdf), arquivos de log (.ldf) sejam criptografados e protegido por uma chave que é utilizada para criptografar o dados junto com o certificado.

Esse novo recurso do SQL Server 2008 realiza em real-time a criptiografia e decriptografia dos dados nos arquivos de log e de dados. A criptografia utiliza a chave (DEK) que é armazenada na inicialização do banco de dados para isso.

O DEK é a chave simétrica usada pelo certificado e armazenada no banco de dados master.

A figura a seguir mostra como o TDE realiza a criptografia do banco de dados.

image

Service Master Key – É a chave de criptografia do SQL Server. Essa chave é gerada automaticamente na primeira vez que é utilizado a criptografia de alguma chave dentro da instância. Por padrão a chave é criptografada pela a API do Windows (DPAPI). A chave só pode ser aberta pela conta que realizou a criação.

Master Key – Chave que precisa ser criada para que a Service Master Key criptografe a chave dentro do banco de dados master.

Os procedimentos para a realização do TDE são:

  1. Criação da Master Key.
  2. Criação de um certificado dentro do banco master.
  3. Backup do certificado
  4. Criar uma chave de criptografia para o banco de dados e vinculá-la ao certificado criado.
  5. Habilitar o TDE.

Para visualizarmos melhor essa solução, façamos o seguinte:

–1-Create Database Master Key

USEmaster

GO

 

CREATE MASTER KEY ENCRYPTION BY PASSWORD = ‘@dmin153624’

GO

 

CREATE CERTIFICATE TdeEcnryption WITH SUBJECT = ‘My TDE Database Encryption’

GO

 image

–2-Backup Certificate

BACKUP CERTIFICATE TdeEcnryption

TO FILE = ‘c:\temp\tde_encrypt_key.cer’

WITH PRIVATE KEY (FILE  = ‘c:\temp\tde_encrypt_key.key’, ENCRYPTION BY PASSWORD = ‘@dmin153624’

–3-Create Encryption Key – Database TransparentDataEncryption

USE TransparentDataEncryption

GO

 

CREATE DATABASE ENCRYPTION KEY

WITH ALGORITHM = AES_128

ENCRYPTION BY SERVER CERTIFICATE TdeEcnryption

image

–4-Enable Encryption on Database

ALTER DATABASE TransparentDataEncryption

SET ENCRYPTION ON

GO

Dando uma olhada

sys.dm_database_encryption_keys

image

Depois de realizar esse passos, temos o TDE aplicado no banco de dados, o campo encryption_state = 3 mostra que os arquivos estão utilizando a criptografia,  sendo assim a partir de agora os arquivos .mdf, .ndf estão protegidos e consequentemente os backups tambêm.

O banco de dados TEMPDB será criptografado no caso de algum banco de dados da instância estiver usando o TDE, como podemos ver acima o database_id = 2 é justamente o banco de dados TEMPDB

Restore do Banco de Dados em outro servidor

Tendo agora os arquivos desse banco de dados protegidos, se terntarmos restaurá-lo em outro servidor temos:

RESTORE DATABASE TransparentDataEncryption

FROM DISK = ‘c:\temp\TransparentDataEncryption.bak’

WITHNORECOVERY

Msg 33111, Level 16, State 3, Line 1
Cannot find server certificate with thumbprint ‘0xC68044FDF5DD2C38B38282031C461ABB518CBE20’.
Msg 3013, Level 16, State 1, Line 1
RESTORE DATABASE is terminating abnormally.

Isso acontece porque não temos o A MASTER KEY e nem certificado instalado no servidor no qual desejamos restaurar o backup, para isso como já realizamos o backup do certificado, crie os dois

 

USE [master]

GO

CREATE MASTER KEY ENCRYPTION BY PASSWORD = ‘@dmin1536245’;

GO

 

CREATE CERTIFICATE TdeEncryption

 FROM FILE = ‘c:\temp\tde_encrypt_key.cer’

 WITH PRIVATE KEY (

 FILE = ‘c:\temp\tde_encrypt_key.key’

 , DECRYPTION BY PASSWORD = ‘@dmin153624’

 )

Agora podemos realizar o restore do banco de dados

RESTORE DATABASE TransparentDataEncryption

FROM DISK = ‘c:\temp\TransparentDataEncryption.bak’

WITHNORECOVERY

14 percent processed.
23 percent processed.
33 percent processed.
42 percent processed.
52 percent processed.
61 percent processed.
70 percent processed.
80 percent processed.
94 percent processed.
100 percent processed.
Processed 168 pages for database ‘TransparentDataEncryption’, file ‘TransparentDataEncryption’ on file 1.
Processed 2 pages for database ‘TransparentDataEncryption’, file ‘TransparentDataEncryption_log’ on file 1.
RESTORE DATABASE successfully processed 170 pages in 0.196 seconds (6.741 MB/sec).

Dando uma olhada em

sys.dm_database_encryption_keys

image

Fizemos o restore  o banco de dados e o mesmo ainda continua utilizando o TDE.

No BOL temos: “

Encrypted data compresses significantly less than equivalent unencrypted data. If TDE is used to encrypt a database, backup compression will not be able to significantly compress the backup storage. Therefore, using TDE and backup compression together is not recommended.

Realizando alguns testes temos que:

  • Backup FULL sem compressão, sem TDE = 8.03 GB
  • Backup FULL com compressão, sem TDE = 1.47 GB
  • Backup FULL sem compressão, com TDE= 8.03 GB
  • Backup FULL com compressão, com TDE = 8.03 GB

Ou seja, quando utilizamos o TDE não temos uma compressão de dados efetiva.

Se desabilitarmos o TDE e tentarmos realizar o restore, teremos problema?

ALTER DATABASE TransparentDataEncryption

SET ENCRYPTION OFF

 

BACKUP DATABASE TransparentDataEncryption

TO DISK = ‘c:\temp\TransparentDataEncryptionNOTDE.bak’

WITH INIT, COMPRESSION

 

RESTORE DATABASE TransparentDataEncryptionNOTDE

FROM DISK = ‘c:\temp\TransparentDataEncryptionNOTDE.bak’

WITH RECOVERY, STATS,

 MOVE ‘TransparentDataEncryption’ TO ‘c:\temp\TransparentDataEncryptionNOTDE.MDF’,

 MOVE ‘TransparentDataEncryption_log’ TO ‘c:\temp\TransparentDataEncryptionNOTDE

Msg 3283, Level 16, State 1, Line 2
The file “TransparentDataEncryption_log” failed to initialize correctly. Examine the error logs for more details.
Msg 3013, Level 16, State 1, Line 2
RESTORE DATABASE is terminating abnormally.

Sim teremos, mesmo desabilitando o TDE, ainda temos de alguma forma a refêrencia do certificado ao banco de dados, por isso temos o problema durante o processo de restore do banco de dados.

Conclusão

Como vimos, o TDE funciona bem, porém temos alguns problemas na utilização dele, é relativamente fácil de habilitá-lo, porém tome cuidado, faça alguns testes, leia esse Whitepaper: http://msdn.microsoft.com/en-us/library/cc278098.aspx ele tirará algumas dúvidas que você possa ter.

Gostou do post, deixe seu comentário.

Att,