Close Up Photo of Programming of Codes
Un poco sobre autenticación y OpenSSL

Un poco sobre autenticación y OpenSSL

Publicado el 07 de noviembre de 2024
opensslssltls

Tabla de contenidos

Un poco de contexto y autenticación

Si tienes prisa, puedes ir directamente a los comandos

La autenticación es un tema que me interesa mucho, recientemente he estado refrescando mis conocimientos sobre las sesiones y los Json Web Tokens (JWTs) para autenticación.

Cuando estaba en el tema de los JWTs me encontré que existen varios algoritmos para firmar y verificar los tokens los cuales se encuentran agrupados en dos grupos: los algoritmos asimétricos y los algoritmos simétricos.

Los algoritmos asimétricos funcionan con dos llaves (keys), una para firmar y otra para verificar los tokens. Uno de los más conocidos es el RS256, el cual utiliza el algoritmo de cifrado RSA. En este sentido, se utiliza la llave privada, que siempre debe estar resguardada, para firmar los tokens de acceso y la llave pública, que es compartida, se utiliza para verificar la autenticidad de los tokens.

Los algoritmos asimétricos funcionan con una única llave, la cual se utiliza tanto para firmar como para verificar los tokens, es por ello que esta llave debe estar muy protegida y solo debería compartirse entre sistemas en lo que se confía.

Como regla general, si otro sistema externo necesita poder verificar los tokens de acceso, lo mejor será usar un algoritmo asimétrico, ya que así se podrá compartir la llave pública sin problemas.

El primer algoritmo asimétrico que se introduce en los JWTs es el HMAC-SHA-256, más conocido como el SH256, este algoritmo utiliza una única llave para firmar y verificar los tokens, esta llave es un string de 256 bits en formato base 64. Una pregunta que te podrías estar haciendo y que yo me hice fue: Y como genero esa llave?, investigué un poco y encontre ciertas implementaciones en NodeJs, Python y Java, pero no me convencian porque no quería implementar una aplicación o un script solo para eso. Fue entonces que encontré un programa de terminal llamado openssl, el cual viene instalado por defecto en MacOS y hacía justo lo que necesitaba. A continuación voy a mostrar algunos de las funcionalidades que ofrece openssl

Comandos openssl

Secuencia de bits

Generar una secuencia pseudoaleatoria de bytes (n), aunque la salida será ilegible.

openssl rand n # n es la cantidad de bytes

# Ejemplo
openssl rand 32 # (resultado ilegible)

Secuencia de bits (Base 64)

Generar una secuencia pseudoaleatoria de bytes (n) en Base64.

openssl rand -base64 n # n es la cantidad de bytes (32)

# Ejemplo
openssl rand -base64 32 # (E1OUKfkEDu7gcLbdA2q7S52bH+cvFWv2FqNyMj5PJ00=)

Suma de comprobación (Checksum)

Generar el hash de un archivo.

Caso de uso: Normalmente se usa para realizar sumas de comprobación (checksum). Algunos sitios web te muestran los hash de los archivos que puedes descargar de ellos, si generas el hash del archivo descargado y coincide con el hash del sitio web, el archivo es el original, pero si el hash no coincide, entonces se debería tener precaución con ese archivo, pues podría estar alterado y ser dañino.

openssl dgst -sha256 <nombre del archivo> # Puedes elegir otros algoritmos: sha384, sha512, etc

# Ejemplo
openssl dgst -sha256 index.ts

© 2024 Willington Ortiz. Todos los derechos reservados.