Árvore de páginas

1. Introdução

Esta documentação descreve a implementação do serviço de anonimização de dados sensíveis, especificamente números de telefone e CPFs, utilizando a técnica de hash com SHA-256. O objetivo é proteger dados pessoais, tornando-os irreversíveis por meio de um processo de criptografia unidirecional.

2. Objetivo

O serviço de anonimização tem como finalidade:

  • Proteger dados sensíveis: Através da transformação dos dados originais em um valor hash, prevenindo a identificação direta dos dados originais.
  • Garantir irreversibilidade: Uma vez aplicado o hash SHA-256, não é possível reverter o valor hash para obter o dado original.
  • Uniformidade e consistência: Utilizar o mesmo algoritmo e processo para diferentes tipos de dados (telefone e CPF) garante consistência na anonimização em todo o sistema.

3. Escopo

A anonimização é realizada para dois tipos de dados:

  • Telefone: Os dígitos são extraídos do valor recebido e convertidos para seu hash utilizando o algoritmo SHA-256.
  • CPF: Da mesma forma, os dígitos do CPF são extraídos (removendo caracteres não numéricos) e convertidos para um hash SHA-256.

4. Descrição da Implementação

4.1. Arquitetura e Componentes

  • Interface IAnonimizationAppService:
    Define os métodos para anonimização dos dados.

  • Classe AnonimizationAppService:
    Implementa a interface e contém os métodos responsáveis por realizar a anonimização.

  • Enum TipoCampoV2:
    Define os tipos de dados que podem ser anonimizados:

    • Telefone
    • Cpf

4.2. Fluxo de Processamento

  1. Invocação do Método Principal (Anonimize):

    • O método Anonimize recebe dois parâmetros:
      • campo (string): O dado original que será anonimizado.
      • tipo (TipoCampoV2): Indica o tipo de dado (Telefone ou Cpf).
    • Baseado no tipo informado, o método redireciona para o processamento específico:
      • Se for Telefone, chama HashPhone.
      • Se for Cpf, chama HashCpf.
  2. Processamento Específico dos Dados:

    • Remoção de Caracteres Não Numéricos:
      Para ambos os tipos, utiliza-se uma expressão regular para extrair somente os dígitos.
      string digits = Regex.Replace(campo, @"\D", "");
      
    • Cálculo do Hash:
      Após a limpeza dos dados, é invocado o método ComputeSha256Hash que:
      • Converte a string limpa para um array de bytes utilizando UTF-8.
      • Computa o hash utilizando a implementação padrão do algoritmo SHA-256.
      • Converte o resultado (array de bytes) para uma string hexadecimal.
  3. Retorno do Valor Anonimizado:

    • O valor retornado é uma string hexadecimal representando o hash SHA-256 do valor original, garantindo a irreversibilidade da operação.

4.3. Detalhamento dos Métodos

4.3.1. Anonimize(string campo, TipoCampoV2 tipo)

  • Descrição:
    Método principal que determina qual tipo de anonimização aplicar (telefone ou CPF).
  • Entrada:
    • campo: Valor original a ser anonimizado.
    • tipo: Tipo do campo, definido pelo enum TipoCampoV2.
  • Processamento:
    • Redireciona o processamento para HashPhone ou HashCpf.
  • Retorno:
    • String contendo o valor anonimizado (hash).

4.3.2. HashPhone(string phone)

  • Descrição:
    Método que anonimiza números de telefone.
  • Entrada:
    • phone: Valor original contendo o número de telefone.
  • Processamento:
    • Remove caracteres não numéricos.
    • Calcula o hash do resultado usando ComputeSha256Hash.
  • Retorno:
    • String com o hash SHA-256 do telefone.

4.3.3. HashCpf(string cpf)

  • Descrição:
    Método que anonimiza CPFs.
  • Entrada:
    • cpf: Valor original contendo o CPF.
  • Processamento:
    • Remove caracteres não numéricos.
    • Calcula o hash do resultado usando ComputeSha256Hash.
  • Retorno:
    • String com o hash SHA-256 do CPF.

4.3.4. ComputeSha256Hash(string input)

  • Descrição:
    Método responsável por computar o hash SHA-256 para a entrada fornecida.
  • Entrada:
    • input: Valor de entrada (string) que deverá ser transformado.
  • Processamento:
    • Converte a string para um array de bytes.
    • Calcula o hash utilizando o algoritmo SHA-256.
    • Converte o array de bytes resultante em uma string hexadecimal.
  • Retorno:
    • String hexadecimal correspondente ao hash SHA-256 da entrada.

5. Considerações de Segurança

  • Irreversibilidade:
    O algoritmo SHA-256 é projetado para ser unidirecional, garantindo que o dado original não possa ser recuperado a partir do hash gerado.

  • Integridade:
    Mesmo que o mesmo dado seja processado diversas vezes, o algoritmo SHA-256 garantirá o mesmo resultado hash, permitindo consistência na anonimização.

  • Melhorias Futuras:
    Para aumentar a segurança, pode-se considerar:

    • A adição de um "salt" (valor único por registro) antes da aplicação do hash, para evitar ataques de pré-computação (como rainbow tables).
    • A utilização de algoritmos HMAC-SHA256, onde uma chave secreta é incorporada ao processo, aumentando a proteção contra ataques.

6. Conclusão

O serviço de anonimização implementado com SHA-256 oferece um método eficaz e seguro para proteger dados sensíveis, como telefones e CPFs. Ao remover caracteres não numéricos e aplicar um hash criptográfico, o sistema garante que os dados originais não possam ser recuperados, atendendo assim aos requisitos de segurança e conformidade com padrões de proteção de dados.