Fala, pessoal!

Tudo certo? Espero que sim!

Há algum tempo, uma colega perguntou a diferença de tokenização e criptografia.

Achei que seria interessante trazer esse tema aqui, pois deve ser uma duvida que ocorre frequentemente.

Então let’s go! 😀

Tokenização e Criptografia

Basicamente, a tokenização de dados é criptografia, no caso, uma das técnicas de criptografia o hash.

No final das contas o objetivo é o mesmo:

Esconder o dado real.

Quando aplicamos um hash à um dado, o algoritmo embaralha o dado de modo que ele não pode ser entendido e esse algoritmo de hash não pode ser revertido.

Alguns dos algoritmos de hash são:

  • MD5
  • SHA-1
  • SHA-2
  • SHA-256

É importante entender a entropia do dado em que se quer aplicar o hash, pois dados de baixa entropia como: cpf, rg, matriculas sequenciais e etc são fáceis de descobrir, pois há um padrão de criação conhecido.

Ex.:

O CPF tem um padrão de criação definido, é uma sequencia de números limitada e que contém um validador para saber se o CPF é valido ou não.

Dessa forma, existe uma maneria de criarmos um “de/para” de CPF’s validos, passarmos os principais algoritmos de hash conhecidos e cruzar com a base tokenizada a fim de saber qual era o dado original.

Para evitarmos tal problema, nesses casos é importante aplicar também o que chamamos de salt, que tem por objetivo aumentar o nível de entropia do dado para que não seja tão simples descobrir seu conteúdo original.

Um pouquinho de código

Criei uma função em python realiza o md5 em uma string.

Coloquei como input o valor: “thedataengineer.com.br“.

Como resposta obtive o hash: “18af859553793025d0891c7d2c726e50”

import hashlib

def hash_md5(string_to_hash: str) -> str:    
    return hashlib.md5(string_to_hash.encode()).hexdigest()

if __name__ == '__main__':
    print(hash_md5("thedataengineer.com.br"))

Certo, e como faríamos em casos onde a entropia do dado é baixa?

Para isso, modifiquei um pouco a função para receber o “salt” que aumentará o nível de entropia.

Então para o mesmo input, tenho um resultado diferente, impossível de se saber sem que o salt “vaze” de alguma forma.

Novo resultado: “93465d0331e9e0d3fe48d152fe53cb49”

import hashlib

def hash_md5(string_to_hash: str, salt: str) -> str:    
    string_to_hash_with_salt = string_to_hash + salt    
    return hashlib.md5(string_to_hash_with_salt.encode()).hexdigest()


if __name__ == '__main__':
    print(hash_md5("thedataengineer.com.br", "foo"))

Conclusão

Espero que tenham gostado da postagem e que ela ajude de alguma forma no seu dia a dia.

É bem importante prestarmos atenção na entropia do dado quando falamos de tokenização e também guardar a regra de salt à 7 chaves.

Por hoje é isso, pessoal!

Até a próxima!

😀

Links úteis


Jefferson Soares

Olá! Sou Jefferson. Trabalho com: Dados, Dashboards, SQL, SAS, Python e muito mais! Criei esse cantinho para postar alguns conhecimentos. :)

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comentários
Inline Feedbacks
View all comments