Proteja suas senhas com segurança utilizando o BCrypt no Delphi

Vinicius Sanchez
3 min readFeb 18, 2020

Hoje em dia, dizer que uma senha deve ser criptografada, já não é nenhuma novidade, correto? A questão agora, é descobrir qual a melhor forma de cifrar tais informações, de forma que esta não venha ser descoberta por pessoas não autorizadas.

Na criptografia simétrica/assimétrica, sempre fazemos o uso de uma chave que serve tanto para encriptar, como também para descriptografar tais informações. Portanto, por meio desta chave é possível reverter a encriptação e obter as informações originais, o que torna este meio nada apropriado para a criptografia de senhas ou informações sigilosas.

Por que não {MD5, SHA1, SHA2, SHA3, etc}?

Todas essas funções de hash de uso geral, foram projetadas para calcular um resumo de grandes quantidades de dados no menor tempo possível. Isto significa que elas são fantásticas para garantir a integridade dos dados e totalmente inúteis para o armazenamento de senhas.

Um servidor moderno pode calcular um hash MD5 de cerca de 330 MB por segundo. Se seus usuários tiverem senhas minúsculas, alfanuméricas com no máximo 6 caracteres, é possível combinar todas as possíveis senhas em menos de um minuto.

Agora, se você estiver disposto a gastar cerca de 2.000 dólares, poderá montar seu próprio cluster de supercomputadores, que permitirá que você tente 700.000.000 de senhas por segundo.

Para resolver este problema, foi criado os algoritmos de hashing, onde uma vez que a informação é criptografada, não é mais possível reverter a situação. Para poder validar os dados, no caso de login, é só calcular o hash da senha fornecida pelo usuário e comparar com o hash salvo no banco de dados.

BCrypt

Com a constante evolução da tecnologia, é possível criar algoritmos eficientes com o intuito de quebrar hashes por força bruta, e foi por isso que surgiu em 1999, o BCrypt, desenvolvido por Niels Provos e David Mazières.

O BCrypt possui duas características importantes:

  • Cost: refere-se ao custo do processamento, onde quanto maior o número fornecido, mais lento será o processamento para calcular o hash, porém, maior será o tempo para encontrar possíveis senhas no caso de ataque de força bruta.
  • Salt: acrescenta aleatoriamente sequências de caracteres a senha, projetando resultados criptográficos complexos e aumentando a segurança contra ataques de força bruta, como o rainbow tables, ou seja, um hash sempre será diferente, mesmo que a senha seja igual.

Inserindo o BCrypt nos seus projetos Delphi

Instalando via Boss (gerenciador de dependências):

boss install https://github.com/viniciussanchez/bcrypt

Incluindo o módulo no projeto:

uses BCrypt;

Gerando um novo hash:

var
LHash: string;
begin
LHash := TBCrypt.GenerateHash('password');
end;

Comparando um hash (utilizado no login para verificar se a senha informada pelo usuário é a senha correta):

var
LVerify : Boolean;
begin
LVerify := TBCrypt.CompareHash('senha', 'hash');
end;

Exemplo de hash gerado:

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

Vinicius Sanchez
Vinicius Sanchez

Written by Vinicius Sanchez

Embarcadero MVP | Certified Delphi Developer | SFC | SFPC | KIKF | Graduated in Information Systems and Studying Software Architecture

Responses (2)

Write a response