Funciones de Hash y HMAC en Línea de Comandos con OpenSSL
Clase 13 de 25 • Curso de Fundamentos de Criptografía
Resumen
¿Cómo agregar funciones hash en la línea de comandos?
El uso de funciones hash se ha vuelto esencial para la seguridad de datos y verificación de integridad en el mundo moderno de la programación. En este caso, vamos a explorar cómo puedes implementar funciones de hash directamente en tu línea de comandos utilizando la librería Cripto, que es un wrapper alrededor de OpenSSL.
¿Qué es un Hash?
Un hash es una función criptográfica que transforma una entrada en una salida de longitud fija. Su uso principal es verificar la integridad de datos. Con OpenSSL, puedes implementar varios algoritmos de hash en tus programas de manera sencilla.
Implementación de una función de hash
Primero, debes definir el algoritmo a utilizar, el cual puedes seleccionar desde las funciones soportadas por OpenSSL. Aquí te mostramos cómo implementar una función básica de hash en tu código:
import * as crypto from 'crypto';
function hash(algorithm: string, encoding: BufferEncoding, input: Buffer | string): string {
return crypto.createHash(algorithm).update(input).digest(encoding);
}
export default hash;
En este fragmento de código, destacamos los siguientes puntos:
- El algoritmo se define como un
string
, lo que ofrece flexibilidad para cambiar de algoritmo según tus necesidades. - El
encoding
es crucial para el formato del resultado del hash. - Utilizamos
createHash
, una función de OpenSSL, para procesar el input y generar el hash.
Ejecución y prueba del hash
Para poner en acción tu función, debes importarla en tu ambiente y ejecutarla en la línea de comandos. Un ejemplo de prueba podría ser:
node cli.js hash --input=miArchivo.txt --algorithm=sha256
Algoritmos de hash comunes
Algunos algoritmos de hash populares incluyen:
- SHA-256: Estándar en seguridad moderna, robusteza ante colisiones.
- SHA-512: Para mayor seguridad y resistencia, aunque más intensivo en recursos.
- MD5: Obsoleto para propósitos críticos debido a vulnerabilidades a colisiones.
¿Cómo agregar códigos de autenticación utilizando hash (HMAC)?
El Código de Autenticación Hash (HMAC) es una técnica que combina un algoritmo de hash con una clave para asegurar que un mensaje no ha sido alterado.
Implementación de HMAC
A continuación se muestra cómo puedes implementar la función HMAC usando el mismo principio de hash, pero añadiendo una clave adicional para mayor seguridad:
import * as crypto from 'crypto';
function hmac(algorithm: string, key: string, encoding: BufferEncoding, input: Buffer | string): string {
return crypto.createHmac(algorithm, Buffer.from(key)).update(input).digest(encoding);
}
export default hmac;
Probar HMAC desde la terminal
Al igual que con las funciones normales de hash, puedes ejecutar HMAC pasando tus parámetros:
node cli.js hmac --input=miArchivo.txt --algorithm=sha256 --key=claveSecreta
Usos prácticos y casos de estudio
TLS y HMAC
HMAC se utiliza comúnmente en Transport Layer Security (TLS) como parte del protocolo de seguridad para garantizar la autenticación de los mensajes.
Árboles de Merkle
Estos árboles estructuran hashes en un árbol, permitiendo verificar que una pieza de datos pertenece a un conjunto mayor, muy útil en aplicaciones de blockchain.
Los hashes y HMAC son herramientas poderosas en programación moderna no solo para seguridad, sino para diferentes construcciones criptográficas y protocolos. Analizar y experimentar con estas funciones te abrirá un mundo de posibilidades en la protección y verificación de datos. Continúa explorando y aplicando estos conceptos para robustecer tus aplicaciones y sistemas.