Hashing: O que é isso e para que é importante? - GUIA55
Início » Tecnologia » Hashing: O que é isso e para que é importante?
Hashing se tornou insubstituível na segurança de TI. Texto simples, tais como senhas e dados pessoais, podem ser convertidos em um código usando uma função de hashing. Ao contrário do método de criptografia, o código não pode ser convertido de volta nos dados originais. Desta forma, todos os dados dos usuários estão a salvo de ataques de hackers.
Este artigo lhe diz tudo o que você precisa saber sobre hashing. Nós explicaremos a você exatamente o que é o hashing, como ele funciona e do que você precisa estar ciente. Você também aprenderá sobre áreas importantes de aplicação.
3 Informações de fundo: O que você deve saber sobre o hashing
3.1 O que é hashing?
3.2 Como funciona um hash?
3.3 Funções criptográficas de hash
3.4 Quais são as aplicações possíveis?
3.5 O que o sal e a pimenta têm a ver com o haxixe?
3.6 Funções do hash e mineração
As funções de hash são usadas para converter dados em códigos.
Como o hashing é um "processo unidirecional", estes códigos não podem ser convertidos de volta aos dados originais. Isto significa que os dados não podem ser vistos e estão protegidos contra ataques.
Os hashes podem ser protegidos adicionalmente com Sal e Pimenta.
Informações de fundo: O que você deve saber sobre o hashing
A seguir nós responderemos as perguntas mais importantes sobre hashing. Você aprenderá sobre o que é o hashing, como ele funciona e em quais áreas ele é usado. Nós também explicaremos quais métodos garantem adicionalmente os hashes.
No hashing, uma entrada de dados é inserida em uma função hash para que uma saída de dados resulte. A quantidade de entrada de dados pode ser maior do que a quantidade de saída de dados.
A quantidade de entrada pode ter comprimentos diferentes, a quantidade alvo tem sempre o mesmo comprimento. Apenas diferentes funções de hash geram conjuntos de metas de diferentes comprimentos.
Além das funções de hash convencionais, há também funções criptográficas de hash. As funções criptográficas de hash formam o núcleo das moedas criptográficas, tais como as Bitcoins. Ambos os tipos de funções têm em comum o fato de produzirem sempre a mesma saída com a mesma entrada.
As funções de hash são usadas para gerar códigos a partir de dados. Devido à função unidirecional, os códigos não podem ser convertidos de volta e os dados permanecem secretos. (Fonte da imagem: Jae Rue / Pixabay)
Os algoritmos usados no hashing garantem que é muito difícil adivinhar qual foi a quantidade de entrada baseada na quantidade alvo.
Por outro lado, é muito fácil obter a meta definida a partir do conjunto de entradas. Os algoritmos de hash, portanto, têm uma função unidirecional. Isto os distingue da criptografia convencional(1).
Eles podem ser rachados mais facilmente(2). Agora ainda há a questão do que é realmente necessário para o hashing. Ele é usado na segurança de TI, por exemplo. Aqui ele é usado para armazenar senhas de forma segura.
Armazenar senhas como texto simples ou apenas ligeiramente criptografadas seria muito inseguro, pois elas poderiam ser facilmente quebradas e as contas associadas invadidas(2).
Como funciona um hash?
Como já explicado, a entrada, ou seja, o conjunto de entrada, para uma função hash pode ser de diferentes comprimentos. A saída, ou seja, a meta estabelecida, permanece sempre a mesma. Entretanto, o comprimento da meta definida varia dependendo da função hash utilizada.
Nós queremos mostrar isso a você com um exemplo prático. Nós inserimos os termos "financeiro", "financeiro" e "financeiro" uma vez no algoritmo SHA-256 e uma vez no algoritmo SHA-1 e comparamos os resultados(3). SHA significa Algoritmo de Hash Seguro.
Input set in SHA-256 algoritmo
Finance b696d75511dc16f2b52563e3113a498311a79866f4672862197aa9a8c5c0da12
finance eab762a03fd979a04cc4706e6536d382bc89d2d1356afcd054a16b2235ecd471
financial fed0e4820af42571c936e28300ccb88026f72e075232358cd1fae4e802fe902b
Como você pode ver, a simples mudança de uma letra maiúscula para uma letra minúscula no conjunto de entrada altera todo o conjunto de metas.
Você também pode ver claramente que um conjunto de entradas pode variar em comprimento. No entanto, o tamanho da meta estabelecida permanece sempre o mesmo. O algoritmo SHA-256 gera conjuntos de alvos com 256 bits (64 caracteres).
Input set in SHA-1 algoritmo
Finance 1b48d3f014245f7c149ce9b77cd815abb0f1994b
finance a1cf62af599e2c2403cd6542a3bbe8f828511be8
financial 43d4991437f61db19aa26b581bd2d4f06d46b104
Novamente, dê uma olhada de perto nas entradas e nas metas estabelecidas na tabela. Você pode ver novamente que mudar de um F grande para um F pequeno no conjunto de entrada é suficiente para mudar a meta definida.
Você também pode ver novamente que o comprimento do conjunto de entrada é diferente, mas o do conjunto de metas permanece o mesmo.
Se você comparar os diferentes conjuntos de metas das tabelas, você pode ver que o algoritmo SHA-1 tem um conjunto de metas menor do que o algoritmo SHA-256. Sua saída é de 160 bits (40 caracteres).
Outras funções de hash que atualmente são consideradas seguras e podem, portanto, ser usadas para armazenar senhas são: Argon2, Bcrypt, Scrypt, PBKDF2(2). Argon2 tem atualmente o algoritmo mais seguro(4).
Criptografia lida com a criptografia de informações usando teorias matemáticas(5). Nós já mencionamos que existem funções criptográficas de hash além das funções de hash convencionais. Eles devem preencher estas três propriedades para serem considerados como tal(6)
Função unidirecional
Segundo modelo de resistor
O que essas propriedades significam em detalhes é explicado nas seções seguintes.
Segurança de colisão
É teoricamente possível que diferentes quantidades de entrada na entrada levem ao mesmo valor de hash na saída. Se tal caso existe, é chamado de colisão.
Uma função de hash é considerada uma função de hash criptográfica se for possível descartar que uma colisão ocorra no caso de duas quantidades de entrada diferentes.
Segurança de colisão é dada se for possível excluir que dois conjuntos de entradas diferentes tenham a mesma saída.
Os algoritmos SHA SHA-2 e SHA-3 são atualmente considerados à prova de colisão. Entretanto, foram encontradas colisões com as funções SHA-0 e SHA-1. Portanto, eles não são mais considerados seguros.
Função one-way
Com funções criptográficas de hash, não deve ser possível determinar o conjunto de entrada se o objetivo definido é conhecido. Esta propriedade também é chamada de resistência de pré-imagem ou resistência de pré-imagem.
A resistência do modelo é muito importante na segurança de TI, pois permite, por exemplo, que as senhas sejam armazenadas sem a notação de texto em placas. O hash prova a exatidão do conteúdo sem revelar o conteúdo. Desta forma, os dados podem ser armazenados de forma protegida.
Segundo resistor de pré-imagem
Um segundo resistor de pré-imagem significa procurar por outro conjunto de entrada que produza o mesmo conjunto de alvo que um conjunto de entrada já conhecido.
Ao invés de procurar por dois conjuntos de entradas aleatórias que produzem o mesmo conjunto de metas, um já é conhecido e um segundo com a mesma saída é procurado. O segundo resistor de pré-imagem evita assim a descoberta de uma colisão com uma entrada já conhecida.
Quantidades muito grandes de dados podem ser reduzidas a menos caracteres com funções de hash. Devido à já explicada resistência à colisão, uma espécie de impressão digital eletrônica pode ser criada. As funções de hash são, portanto, utilizadas nas seguintes áreas(6)
Apressamento de dados
A seguir, vamos entrar em mais detalhes sobre as várias aplicações possíveis. As possibilidades de aplicação de funções de hash são muito amplas. Nossa lista deve lhe dar uma visão das possibilidades para sua aplicação.
As funções de hash podem ser usadas para detectar manipulações durante os downloads. Por exemplo, se você quiser baixar um programa, você quer ter certeza de que ele é o original e que nenhuma manipulação ocorreu durante o processo de download.
Para evitar isso, você pode calcular um valor de hash do programa antes de baixá-lo. Isto então serve como uma impressão digital. Após o download, você calcula o valor do hash novamente com a mesma função. Se os dois valores forem os mesmos, é o original.
Uma assinatura digital tem o objetivo de confirmar a integridade de uma mensagem. O remetente de uma mensagem digital pode convertê-la em um valor hash usando uma função hash. Ele então criptografa este valor com uma chave privada. Ele então envia tanto a mensagem quanto o valor criptografado para o destinatário.
O destinatário pode comparar ambos os códigos para confirmar a integridade de uma mensagem.
O destinatário agora pode fazer o seguinte para ter certeza de que a mensagem que ele está lendo não foi adulterada quando ela foi enviada.
Ele pode decifrar o valor criptografado com uma chave oficial, obtendo assim o valor de hash previamente calculado da mensagem. Então ele pode calcular a mensagem em si com a mesma função de hash que o remetente usou.
Agora o destinatário pode comparar os dois valores. Se o valor que ele recebe de seu cálculo corresponde ao valor que ele recebe por decodificar o valor enviado com a mensagem, é a mensagem original.
O fato de as funções de hash serem usadas para armazenar senhas já foi mencionado em vários lugares.
Se as senhas fossem armazenadas como texto simples, elas poderiam ser lidas no caso de um ataque. Isto não pode acontecer se as senhas forem convertidas em um valor hash usando uma função hash e somente este valor for armazenado.
Se um usuário quer entrar no sistema, ele digita sua senha. Um valor de hash é criado a partir da senha digitada usando a mesma função que antes. O usuário é autenticado se este valor recém-determinado e o valor armazenado coincidirem.
Hashing de dados
Hashing de dados pode ser usado em lojas online, por exemplo. Todos os dados pessoais, tais como o nome do usuário ou endereço de e-mail, são tratados em hash. Ao invés do texto simples, apenas o hash é armazenado.
Desta forma, o usuário da loja online pode permanecer anônimo, enquanto seus dados, tais como preferências, podem ser usados. Estas informações podem ser usadas para objetivos ainda mais específicos, enquanto a proteção de dados ainda é garantida(7).
O que o sal e a pimenta têm a ver com o haxixe?
Para proteger bancos de dados e seu conteúdo, por exemplo senhas, de ataques de hackers, outras medidas de segurança podem ser tomadas, além do hashing. Uma dessas medidas de segurança é o uso de sais.
Os sais são números gerados aleatoriamente, um dos quais é atribuído a cada usuário ou senha. Cada sal é único.
A senha é combinada com o sal e depois transformada em um hash pela função hash. Isto evita colisões e duas senhas nunca podem gerar o mesmo haxixe. Também torna mais difícil para os hackers decifrar as senhas dos usuários(8).
Os sais são gerados aleatoriamente, combinações únicas que tornam os hashes ainda mais seguros. Para garantir os sais, o método Pepper também pode ser usado. (Fonte da imagem: Darwin Laganzon / Pixabay)
Há algumas coisas a serem levadas em conta com os sais para que eles possam proteger-se com segurança contra um ataque de hacking. Cada sal deve ser único. Se um usuário é adicionado ou se um usuário muda sua senha, um novo sal deve ser atribuído. Cada sal deve ser gerado aleatoriamente.
Os sais devem ter pelo menos o mesmo comprimento que o conjunto de metas da função hash que está sendo usada. Um método de estiramento de chave deve ser usado para os sais. Isso faz com que os hashes sejam computacionalmente mais intensivos e os softwares de cracking demorem mais tempo para computar os hashes(8).
Além dos sais, as senhas também podem ser protegidas pela Pepper. Pepper é uma cadeia gerada aleatoriamente de 32 caracteres. Ao contrário do sal, a pimenta é a mesma para todas as senhas. O objetivo do Pepper é evitar o caso de um hacker rachar o banco de dados. Sem o Pepper, os hashes das senhas ainda não podem ser quebrados.
Funções do hash e mineração
Funções do hash também desempenham um papel importante na mineração de Bitcoins. A mineração de blocos é realizada por algoritmos. Um mineiro deve gerar um hash que tenha um certo número de zeros no início. Esta é a única maneira de validar um bloco. Esses blocos ainda são armazenados em cadeias de blocos. Aqui, também, é usado hashing.
Em um bloco, os dados são armazenados em seqüência que não podem ser alterados novamente. Finalmente, um bloco é armazenado como um hash e este hash é colocado na frente de um novo bloco.
Até que isto também seja armazenado como um hash e assim por diante. Desta forma, uma cadeia de bloqueio é criada e uma quantidade infinita de dados pode ser armazenada(9).
Hashing é um processo no qual um conjunto de dados, um conjunto de entradas, é convertido por uma função em um código, o conjunto de metas. Não importa o tamanho do conjunto de entrada, a meta estabelecida é sempre o mesmo tamanho. Somente o uso de uma função diferente muda o tamanho da meta estabelecida.
Desta forma, uma grande quantidade de dados pode ser armazenada de forma a economizar espaço. Além disso, nenhum texto simples é armazenado, mas um código, que protege todos os dados.
Hashing é usado principalmente na segurança de TI, por exemplo, para armazenar com segurança as senhas dos usuários. Como as funções de hash sempre têm vulnerabilidades de segurança, há várias maneiras de tornar os hashes ainda mais seguros. Estes incluem, por exemplo, os métodos do Sal e da Pimenta.