Criptografando dados em tempo real com Função HashBytes e Algortimos de Hashing.

Pessoal, boa tarde.

Tudo bem? Recentemente em minhas aulas e consultorias um dos assuntos que mais tenho recebido perguntas e questionamentos, esta relacionado as ferramentas, técnicas e recursos de segurança e criptografia de dados existente no SQL Server.

Pois bem, com base neste cenário, comecei a procurar mais informações e como de costume encontrei na minha biblioteca de Scripts e Materias de Apoio, um pequeno código que pode ser bastante útil e de fácil compreensão.

Mas antes de destacar este código, gostaria de apresentar uma Visão geral das exigências de regulamentações relacionadas a Segurança e Criptografia com base em Leis e Normais Nacionais e Internacionais. Conforme destaco a seguir:

Como outras empresas, a Microsoft vem reavaliando as estruturas de segurança atuais para garantir que as estruturas de segurança cumpram as leis federais, estaduais e internacionais recentes que definem as obrigações de conformidade com as regulamentações relativas às informações pessoais. Nos Estados Unidos, essas leis incluem as seguintes leis federais e estaduais:

  • Lei Sarbanes-Oxley de 2002;
  • GLBA (Gramm-Leach-Bliley Act) de 1999;
  • HIPAA (Health Insurance Portability and Accountability Act, Lei de Portabilidade e Responsabilidade dos Seguros Saúde) de 1996;
  • Lei FERPA (Family Educational Rights and Privacy Act, Lei de direitos educacionais e de privacidade da família);
  • Título FDA 21 Parte 11 do CFR;
  • Projeto de Lei do Senado da Califórnia nº 1.386; e
  • Projeto de Lei do Senado de Washington nº 6.043.

Além disso, alguns regulamentos internacionais definem as obrigações de conformidade reguladora para empresas que armazenam informações de identificação pessoal. Esses regulamentos englobam:

  • PIPEDA canadense (Personal Information Protection and Electronic Documents Act, Lei de Proteção a Informações Pessoais e Documentos Eletrônicos);
  • European Union Data Protection Directive (Diretiva de proteção a dados da União Européia); e
  • Acordo de Capital da Basiléia, também conhecido como Basiléia II.

As organizações que armazenam informações pessoais do consumidor devem considerar cuidadosamente as implicações relativas a essas novas exigências regulatórias. Essas exigências afetam todas as seguintes operações de bancos de dados:

  • Autenticação de banco de dados, inclusive diretivas de senha e protocolos de autenticação;
  • Controles de autorização e acesso a banco de dados;
  • Proteção a dados confidenciais armazenados em um banco de dados;
  • Proteção a dados confidenciais transferidos para um banco de dados ou de um banco de dados; e
  • Auditorias de transações de bancos de dados para ajudar a garantir confidencialidade e integridade de dados.

As empresas devem cumprir as obrigações de conformidade com regulamentações relativas às informações de identificação pessoal. Para fornecer proteção a dados eficaz e econômica, os departamentos de TI das empresas devem reexaminar como suas organizações armazenam e gerenciam dados confidenciais.

Tendo como base este conjunto de Leis, Normas e ISOs, o Centro de Pesquisa e Estudos da Microsoft decidiu introduzir desde a versão 2005 do SQL Server, as chamadas Funções e Algoritmos de HashBytes.

Para ajudar a entender como estas funções e algoritmos, sua finalidade e forma de uso, vou procurar responder as questões apresentadas abaixo:

1 – Mas o que é Hash? E qual sua função?

Um hash (ou escrutínio) é uma sequência de bits geradas por um algoritmo de dispersão, em geral representada em base hexadecimal, que permite a visualização em letras e números (0 a 9 e A a F), representando 1/2 byte cada. O conceito teórico diz que “hash é a transformação de uma grande quantidade de informações em uma pequena quantidade de informações”.

Essa sequência busca identificar um arquivo ou informação unicamente. Por exemplo, uma mensagem de correio eletrônico, uma senha, uma chave criptográfica ou mesmo um arquivo. É um método para transformar dados de tal forma que o resultado seja (quase) exclusivo. Além disso, funções usadas em criptografia garantem que não é possível a partir de um valor de hash retornar à informação original.

Como a sequência do hash é limitada, muitas vezes não passando de 512 bits, existem colisões (sequências iguais para dados diferentes). Quanto maior for a dificuldade de se criar colisões intencionais, melhor é o algoritmo.

Uma função de hash recebe um valor de um determinado tipo e retorna um código para ele. Enquanto o ideal seria gerar identificadores únicos para os valores de entrada, isso normalmente não é possível: na maioria dos casos, o contra-domínio de
nossa função é muito menor do que o seu domínio, ou seja, x (o tipo de entrada) pode assumir uma gama muito maior de valores do que HASH x (o resultado da função de hash).

2 -Quais são os algoritmos mais utilizandos em conjunto com a função Hash?

Os algoritmos de criptografia definem transformações de dados que não podem ser facilmente revertidas por usuários não autorizados. O SQL Server permite que administradores e desenvolvedores escolham entre diversos algoritmos, incluindo
DES, Triple DES, TRIPLE_DES_3KEY, RC2, RC4, RC4 de 128 bits, DESX, AES de 128  bits, AES de 192 bits e AES de 256 bits.

Os mais usados algoritmos de hash são os de 16 bytes MD4 e MD5 ou o SHA-1, de 20 bytes. Características de alguns algoritmos:

  1. MD4: Desenvolvido em 1990/91 por Ron Rivest, vários ataques foram detectados, o que fez com que
    o algoritmo fosse considerado frágil;
  2. MD5: O MD5 (Message-Digest algorithm 5) é um algoritmo de hash de 128 bits unidirecional desenvolvido pela RSA Data Security, Inc., descrito na RFC 1321, e muito utilizado por softwares com protocolo par-a-par (P2P, ou Peer-to-Peer, em inglês), verificação de integridade e logins. Existem alguns métodos de ataque divulgados para o MD5;
  3. SHA-1 (Secure Hash Algorithm): Desenvolvido pelo NIST e NSA. Já foram exploradas falhas no SHA; e
  4. WHIRLPOOL: função criptográfica de hash desenvolvida por Paulo S. L. M. Barreto e por Vincent Rijmen (co-autor do AES). A função foi recomendada pelo projeto NESSIE (Europeu). Foi também adotado pelo ISO e IEC como parte do padrão internacional ISO 10118-3.

O processo é unidirecional e impossibilita descobrir o conteúdo original a partir do hash. O valor de conferência (“check-sum”) muda se um único bit for alterado, acrescentado ou retirado da mensagem.

3 – Posso utilizar qualquer algoritmo em qualquer situação de criptografia?

Nenhum algoritmo é ideal para todas as situações, porém, os seguintes princípios gerais se aplicam:

  • A criptografia segura geralmente consome mais recursos da CPU que criptografia menos segura;
  • As chaves extensas geralmente produzem uma criptografia mais segura que as chaves mais curtas;
  • A criptografia assimétrica é mais segura que a criptografia simétrica, que usa o mesmo comprimento de chave mas é relativamente mais lenta;
  • Codificações em bloco com chaves extensas são mais seguras que codificações em fluxo;
  • Senhas longas e complexas são mais seguras que senhas curtas;
  • Se você estiver criptografando muitos dados, deve criptografá-los usando uma chave simétrica e criptografar a chave simétrica com uma chave assimétrica; e
  • Dados criptografados não podem ser compactados, mas dados compactados podem ser criptografados. Se você usar compactação, deverá compactar os dados antes de criptografá-los.

Bem, com estas respostas, acredito que ficou mais fácil entender o nível de importância e complexidade que envolve os processos, técnicas e ferramentas de criptografia. Desta forma, vou apresentar o chamado Modelo de Criptografia Hashing, conforme apresenta a Figura 1.

Figura 1 – Modelo de Criptografia Hashing.

Basicamente o Modelo de Criptografia Hashing, pode ser considerado a forma mais fácil e simples de se evitar que informações contidas em seu banco de dados sejam lidas por pessoas não autorizadas, aplicando os conceitos de criptografia. Ao usar Hash, as informações que vão para o banco são criptografadas de tal maneira que é impossível descriptografá-lo.

A criptografia por hash usa basicamente 2 parâmetros:

1) O algorítimo de criptografia; e
2) Os dados a serem criptografados.
Com o Modelo de Criptografia Hashing apresentado, agora é hora de colocar a mão na massa, ou seja, vamos realizar a nossa criptografia com base no exemplo a seguir:

–Declarando um variável @HashThis–
DECLARE @MeuValorCriptografado NVarChar(max);

SELECT @MeuValorCriptografado = CONVERT(nvarchar,’Pedro’);

/* Utilizando a função HashBytes para converter a sentença com uso dos Algoritmos Hash + SHA1, SHA, MD5, MD4, MD2 */

SELECT HashBytes(‘SHA1’, @MeuValorCriptografado) Resultado
Union
SELECT HashBytes(‘SHA’, @MeuValorCriptografado)
Union
Select HashBytes(‘MD5’, @MeuValorCriptografado)
Union
Select HashBytes(‘MD4’, @MeuValorCriptografado)
Union
Select HashBytes(‘MD2’, @MeuValorCriptografado)
Go

Neste código de exemplo, utilizei todos os principais Algoritmos de Hash disponíveis para a Função HashBytes em conjunto com o Modelo de Criptografia Hashing.

Desta forma, estou encerramenta mais esta dica, espero que todos possam ter gostado e que as informações apresentadas aqui, possam ser úteis.

Agradeço mais uma vez a sua visita, nos encontramos em breve.

Até mais.

2 comentários em “Criptografando dados em tempo real com Função HashBytes e Algortimos de Hashing.

Os comentários estão fechados.