Criptografia de dados – Alexandre Ricardo (Sherman) Di Primio


Em um periodo complicado de escrever novos posts para ajudar as pessoas, um grande amigo, Alexandre Ricardo Di Primio (Twitter: @ardp) me ajudou com um post dele, que com muito prazer, irei postar aqui para que possa ser utilizado por quem precise.

O assunto deste, é criptografia de dados em si, e não sobre os arquivos de dados, como expliquei em outros posts sobre TDE.

Creio que, assim como eu recebi o documento, ja esta bem explicado e seguindo um passo-a-passo.

1. Executar o seguinte script para criação de chave de criptografia comum as duas bases:

CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'Senha Master do SQL utilizada para criptografar os cerificados armazenados no servidor';

CREATE CERTIFICATE myCERTIFICATE WITH SUBJECT = 'Nome do Certificado para identificação caso esse venha a ser exportado', EXPIRY_DATE = '20990621'

CREATE SYMMETRIC KEY mySymKey WITH
    KEY_SOURCE = 'Senha Primária da chave',
    ALGORITHM = TRIPLE_DES, 
    IDENTITY_VALUE = 'Senha de identificação da chave'
    ENCRYPTION BY CERTIFICATE myCERTIFICATE;

2. A chave para criptografar os dados deve ser criada apenas uma vez, e com ela criada rodar a seguinte sequencia de comandos para criptografar os dados e extraí-los no formato texto em hexadecimal:

declare 
      @Nome       char(50)
,     @NomeCrypt  varbinary(500)
,     @NomeHex    varchar(500)
select @Nome = 'Nome ou texto a ser criptografado'
OPEN SYMMETRIC KEY mySymKey DECRYPTION BY CERTIFICATE myCERTIFICATE
select @NomeCrypt =  ENCRYPTBYkey(KEY_GUID('mySymKey'), @Nome)
      -- A linha abaixo converte um varbinary em uma string com valores expressados em hexadecimal
      -- isso é necessário pois não é possível gravar um varbinary diretamente num arquivo texto comum
      -- seria possível gravar em um arquivo padrão UNICODE porém isso gera uma série de inconvenientes.
      -- Uma observação imporante é que a função sys.fn_varbintohexsubstring não é documentada
      --então deve-se ter cuidado ao usá-la pois essa pode ser descontinuada a qqr momento
select @NomeHex  = sys.fn_varbintohexsubstring(0, @NomeCrypt,1,0)
close symmetric key mySymKey
select @NomeHex, @Nome

3. Para descriptografar a informação no outro servidor rodar a seguinte sequencia da comandos:

declare 
      @Nome       char(50)
,     @NomeHex    varchar(500)
,     @NomeCrypt  varbinary(500)
,     @sql        nvarchar(max)

OPEN SYMMETRIC KEY mySymKey
DECRYPTION BY CERTIFICATE myCERTIFICATE
select @NomeHex = 'Valor criptografado em hexadecimal exatamente como saiu no select da variavel @NomeHex'

      -- Quando lemos o valor criptografado do arquivo precisamos converte-lo de hexadecimal para varbinary
      -- uma forma fácil de fazer isso é usando o sp_executesql dessa forma.
select @sql = 'select @NomeCrypt = 0x' + @NomeHex
exec sp_executesql @sql, N'@NomeCrypt varbinary(500) output', @NomeCrypt output
select @Nome =  DeCRYPTBYkey(@NomeCrypt)
close symmetric key mySymKey
select @NomeCrypt, @Nome

Anúncios
Post a comment or leave a trackback: Trackback URL.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: