Esse artigo faz parte da revista SQL Magazine edição 50. Clique aqui para ler todos os artigos desta edição

zip">Clique aqui para ler essa revista em PDF.imagem_pdf.jpg

Mão na Massa

Criptografando dados no Microsoft SQL Server 2005

 

Garantir o sigilo das informações é um dos principais papéis do administrador de banco de dados, e a criptografia se encaixa nesse contexto como um poderoso artifício para assegurar que as informações sejam acessadas somente por pessoas autorizadas. Pensando nisso, a Microsoft incluiu na versão 2005 do SQL Server um conjunto de funcionalidades que permitem criptografar e decriptografar dados, de forma prática, através de comandos Transact-SQL. Neste artigo serão utilizados os recursos de criptografia do SQL Server 2005, para implementar o banco de dados de uma aplicação de gerenciamento pessoal de senhas.

A arquitetura de criptografia do SQL Server 2005

No SQL Server 2005 é possível criptografar e decriptografar dados através de quatro técnicas: senhas fornecidas pelo usuário, chaves simétricas, chaves assimétricas e certificados digitais.

A criptografia através de senhas é a mais simples, pois transfere ao usuário toda a responsabilidade de armazenamento e manutenção da senha. Isso permite que o usuário utilize senhas fracas e armazene a senha em locais inadequados como uma folha de papel, agenda ou um arquivo em texto plano. No modelo de chaves simétricas uma única chave é utilizada para criptografar e decriptografar os dados. Esse modelo possui um custo baixo de processamento, mas não é tão eficaz quanto o modelo de chaves assimétricas. As chaves assimétricas utilizam um modelo de chave pública e privada. Os dados podem ser criptografados com a chave privada e quem possuir a chave pública poderá decriptografar a informação, garantindo assim a autenticidade do autor. Outra opção é criptografar os dados com a chave pública e somente aquele que possuir a chave privada poderá decriptografar a informação, garantindo o sigilo da informação. Já os certificados digitais são mecanismos de identificação que associam uma chave pública a uma pessoa, serviço ou dispositivo que possui a chave privada correspondente. A autenticidade do dono do certificado é garantida através de autoridades certificadoras (AC), da mesma forma que um documento de identificação pessoal (RG) é emitido e garantido pela Secretaria de Segurança Pública.

A arquitetura de criptografia do SQL Server 2005 se baseia em um conjunto de chaves e certificados organizados de forma hierárquica, conforme ilustra a Figura 1. Isso significa que cada camada da arquitetura utiliza chaves simétricas, assimétricas ou certificados digitais, para criptografar o nível imediatamente inferior.

 

Figura 1. Hierarquia de chaves do SQL Server 2005.

 

O elemento raiz da estrutura apresentada na Figura 1 é a service master key, uma chave de criptografia criada automaticamente através de uma API do Windows chamada DPAPI (Data Protection API). A service master key é criptografada usando a senha da conta de serviço do Windows utilizada para execução do SQL Server 2005. Usando o algoritmo Triple DES, a service master key permite criptografar a database master key, chave utilizada pelo SQL Server 2005 para armazenar, de forma segura, em cada banco de dados, as chaves assimétricas e certificados criados pelo usuário. Ao contrário da service master key, a database master key precisa ser criada manualmente, em cada banco de dados, conforme será apresentado neste artigo. Na camada inferior da arquitetura estão as chaves simétricas, assimétricas e certificados digitais utilizados para criptografar os dados do usuário ou criptografar outras chaves de criptografia. Analisando novamente a Figura 1 é possível realizar as seguintes afirmações:

·         Chaves simétricas, assimétricas ou certificados podem ser utilizados para criptografar os dados do usuário ou para criptografar outras chaves simétricas;

·         As chaves simétricas precisam ser criptografadas utilizando um certificado ou uma chave assimétrica. Isso reforça a segurança do mecanismo de criptografia;

·         As chaves assimétricas e os certificados digitais dependem somente da database master key para serem utilizadas;

·         A criptografia através de senha fornecida pelo usuário não depende dos elementos descritos na Figura 1.

 

Essas considerações serão fundamentais durante a execução dos exemplos deste artigo.

O banco de dados de exemplo

O banco de dados de exemplo adotado neste artigo serve de base para uma aplicação de gerenciamento pessoal de senhas. Nesse banco de dados será possível criptografar e armazenar as senhas de serviços utilizados no dia-a-dia, como correio eletrônico, portais, blogs, etc.

A Figura 2 apresenta o diagrama ER do banco de dados utilizado, composto por três tabelas: usuario, onde ficarão registrados os usuários da aplicação; servico, onde serão armazenados os serviços utilizados; usuario_servico, que associa cada usuário da aplicação aos seus respectivos serviços. As informações de login e senha serão armazenadas na tabela usuario_servico e o campo senha será criptografado para garantir o sigilo da informação. O código SQL para criação do banco de dados em questão é apresentado na Listagem 1. Uma observação importante é que o campo a ser criptografado precisa ser do tipo varbinary, em virtude do retorno das funções de criptografia do SQL Server 2005.

 

Figura 2. Diagrama ER do banco de dados de exemplo.

 

Listagem 1. Script de criação do banco de dados de exemplo.

/* Criação das tabelas e chaves primárias */

 

CREATE TABLE servico (

         cod_servico            SMALLINT NOT NULL,

         nome_servico                    VARCHAR(30) NOT NULL,

         url_servico              VARCHAR(50)

...

Quer ler esse conteúdo completo? Tenha acesso completo