Mejores Prácticas de Seguridad
La seguridad de los datos, específicamente los paswords, son una preocupación crítica para desarrolladores y usuarios por igual.
Como ya sabemos, Delphi es un lenguaje de programación ampliamente utilizado para el desarrollo de aplicaciones rápidas y eficientes, y hoy te enseñamos las mejores prácticas para encriptar contraseñas en Delphi.
La Importancia de Encriptar los Passwords
Las contraseñas sin encriptar son vulnerables a ataques cibernéticos, como el robo de identidad y la intrusión no autorizada, no importa el tamaño de la aplicación.
Al encriptar los passwords, incluso si una base de datos es comprometida, las contraseñas seguirán siendo ilegibles para los atacantes.
Hashing en Delphi
Una de las técnicas que utilizamos la mayoría de los desarrolladores para encriptar contraseñas es el hashing.
En Delphi, se pueden utilizar algoritmos de hashing como MD5, SHA-1, o preferiblemente (que yo utilizo), SHA-256, que son más seguros debido a su capacidad para producir una cadena de caracteres única y larga a partir de una entrada dada.
Ejemplo simple de cómo encriptar utilizando SHA-256 en Delphi
uses
System.Hash;
function HashSha256(const APassword: string): string;
var
SHA256: THashSHA2;
begin
SHA256 := THashSHA2.Create;
try
Result := SHA256.GetHashString(APassword);
finally
SHA256.Free;
end;
end;
Encriptaciones más seguras con Salt
Incluso si utilizando los métodos de hashing, las contraseñas siguen siendo vulnerables a ataques con métodos de diccionarios o tablas arcoíris.
Para proteger aún más ñas contraseñas, es recomendable agregar una “salt” a la contraseña antes de encriptarla.
La salt es un valor único que se concatena con el password antes de encriptarlo. Esto dificulta la posibilidad de precalcular tablas arcoíris y aumenta la seguridad general.
Ejemplo de Password + Salt
uses
System.Hash;
function HashPasswordWithSalt(const APassword, ASalt: string): string;
var
SHA256: THashSHA2;
begin
SHA256 := THashSHA2.Create;
try
Result := SHA256.GetHashString(APassword + ASalt);
finally
SHA256.Free;
end;
end;