Funciones de Hash y HMAC en Línea de Comandos con OpenSSL

Clase 13 de 25Curso 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.