libsodium: una biblioteca criptográfica resistente al uso incorrecto
Explore la API de libsodium, diseñada para dificultar la elección de parámetros inseguros.
libsodium: una biblioteca criptográfica resistente al uso incorrecto es una lección gratuita de Cryptology Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Cryptology Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Cryptology Academy incluye 4 lecciones en total.
Filosofía y origen de libsodium
libsodium fue creado por Frank Denis como una compilación portátil y multiplataforma de la biblioteca NaCl (Networking and Cryptography library), desarrollada por Daniel Bernstein, Tanja Lange y Peter Schwabe. La filosofía principal consiste en facilitar al máximo el uso correcto de la criptografía y dificultar al máximo su uso incorrecto. Los valores predeterminados seguros, las API sencillas y las decisiones de algoritmos deliberadas evitan los errores comunes que afectan a las bibliotecas de bajo nivel.
Cifrado autenticado con clave secreta
crypto_secretbox proporciona cifrado autenticado con clave secreta mediante XSalsa20-Poly1305. La API recibe un mensaje, un nonce de 24 bytes (generado aleatoriamente) y una clave de 32 bytes. El resultado es un texto cifrado que está cifrado y autenticado. crypto_secretbox_open descifra y verifica atómicamente la etiqueta de autenticación, y devuelve un error si detecta una manipulación. Esto impide descifrar textos cifrados dañados o modificados de forma maliciosa.
Cifrado autenticado con clave pública
crypto_box proporciona cifrado autenticado con clave pública entre dos partes mediante X25519-XSalsa20-Poly1305. Dada la clave privada del remitente y la clave pública del destinatario, cifra y autentica el mensaje para que solo el destinatario previsto pueda descifrarlo y este pueda verificar la identidad del remitente. crypto_box_seal es la variante anónima: el remitente queda oculto y solo se proporciona cifrado, no autenticación del remitente.
Firmas digitales con Ed25519
crypto_sign implementa firmas digitales mediante Ed25519. La generación de claves produce una clave privada de 64 bytes (en realidad, una semilla concatenada con la clave pública) y una clave pública de 32 bytes. La firma produce una firma de 64 bytes. La verificación es rápida y se realiza en tiempo constante. Las firmas Ed25519 son deterministas (el mismo mensaje y la misma clave siempre producen la misma firma), lo que elimina las vulnerabilidades debidas a fallos de aleatoriedad que afectaron a ECDSA en algunas implementaciones.
Hashing con BLAKE2b
crypto_generichash proporciona hashing de propósito general mediante BLAKE2b. A diferencia de SHA-256, BLAKE2b no requiere una construcción HMAC independiente para el hashing con clave, ya que acepta directamente una clave opcional. La longitud de salida se puede configurar entre 16 y 64 bytes. BLAKE2b es más rápido que SHA-256 y SHA-512 en los procesadores modernos de 64 bits, y ofrece propiedades de seguridad equivalentes o superiores.
Derivación de claves con BLAKE2b
crypto_kdf proporciona derivación de claves a partir de una clave maestra mediante BLAKE2b. Dada una clave maestra de 32 bytes, una cadena de contexto (de 8 bytes que identifica el propósito) y un ID de subclave (un número de 64 bits), deriva una subclave criptográficamente independiente cuya longitud se puede configurar. Esto permite derivar varias claves independientes a partir de una única clave maestra para distintos propósitos, sin ninguna correlación entre las claves derivadas.
Hashing de contraseñas con Argon2id
crypto_pwhash proporciona hashing de contraseñas mediante Argon2id, ganador de la Password Hashing Competition. Argon2id combina un cálculo costoso en memoria (resistente a ataques de GPU) con un cálculo costoso en tiempo (resistente a ataques de ASIC). Sus parámetros incluyen un límite de operaciones (coste temporal) y un límite de memoria, que se pueden ajustar a los requisitos de seguridad. crypto_pwhash_str produce una cadena estándar adecuada para el almacenamiento que incluye el algoritmo y sus parámetros.
Cajas selladas para cifrado anónimo
crypto_box_seal cifra un mensaje para un destinatario sin revelar quién lo envía. Genera temporalmente un par de claves efímeras, realiza un intercambio de claves con la clave pública del destinatario y después descarta la clave privada efímera. El destinatario puede descifrar el mensaje con su clave privada, pero no puede identificar al remitente. Esto resulta adecuado para sistemas de envío anónimo y canales cifrados unidireccionales.
Bindings de libsodium para lenguajes
libsodium tiene bindings para prácticamente todos los lenguajes de programación principales. PyNaCl proporciona bindings idiomáticos para Python, con excepciones propias de Python y objetos de tipo bytes. libsodium-wrappers proporciona bindings para JavaScript/Node.js (WASM para navegadores). libsodium.js es un port escrito íntegramente en JavaScript. La calidad de los bindings varía: prefiera bindings oficiales o ampliamente mantenidos que encapsulen la biblioteca C en lugar de volver a implementar los algoritmos.
Comparación con la API de bajo nivel de OpenSSL
La API de bajo nivel de OpenSSL requiere tomar decisiones explícitas sobre algoritmos, tamaños de clave, modos, padding y gestión del IV. Las combinaciones incorrectas se aceptan silenciosamente. libsodium proporciona una única implementación correcta para cada caso de uso, sin necesidad de configuración. Por ejemplo, para cifrar con OpenSSL hay que elegir el cifrador, el modo, la derivación de claves, la generación del IV y el padding; con crypto_secretbox de libsodium, se proporcionan la clave, el nonce y el mensaje, y el resto se gestiona correctamente.
Elegir libsodium para proyectos nuevos
libsodium es el punto de partida recomendado para cualquier proyecto que requiera operaciones criptográficas en los lenguajes compatibles. Su API pequeña reduce la probabilidad de uso incorrecto, sus algoritmos son modernos y han sido analizados exhaustivamente, y su implementación multiplataforma en C se ha probado rigurosamente. Solo debería ser necesario cambiar a una biblioteca de nivel inferior como OpenSSL cuando se necesiten algoritmos específicos que no estén disponibles en libsodium o se requiera la validación FIPS 140-2.
Operaciones de libsodium
¿Qué función de libsodium debe utilizar para aplicar hashing a una contraseña antes de almacenarla en una base de datos?
Resumen de libsodium
Resumen de libsodium: valores predeterminados seguros y una API difícil de usar incorrectamente, basada en las primitivas de NaCl desarrolladas por Bernstein et al.; crypto_secretbox para el cifrado con clave secreta (XSalsa20-Poly1305); crypto_box para el cifrado con clave pública (X25519); crypto_sign para firmas Ed25519; crypto_generichash para hashing con BLAKE2b; crypto_pwhash para hashing de contraseñas con Argon2id; cajas selladas para cifrado anónimo; y bindings para la mayoría de las plataformas principales.
Aprende Cryptology Academy con un tutor de IA — gratis
Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.
- Cursos
- 67
- Lecciones
- 261
Preguntas frecuentes
¿La lección «libsodium: una biblioteca criptográfica resistente al uso incorrecto» es gratis?
Sí — el texto completo de «libsodium: una biblioteca criptográfica resistente al uso incorrecto» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Cryptology Academy, actualiza a CoddyKit PRO. El curso de Cryptology Academy incluye 4 lecciones en total.
¿Qué aprenderé en «libsodium: una biblioteca criptográfica resistente al uso incorrecto»?
Explore la API de libsodium, diseñada para dificultar la elección de parámetros inseguros. Practicas Cryptology Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Cryptology Academy?
No se requiere experiencia previa. Cryptology Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.
¿Cuánto tiempo toma la lección «libsodium: una biblioteca criptográfica resistente al uso incorrecto»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Cryptology Academy?
Sí. Cada lección de Cryptology Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- libsodium: una biblioteca criptográfica resistente al uso incorrecto
- API de OpenSSL: estructuras principales y errores comunes
- Google Tink: criptografía segura de alto nivel
- Auditoría y selección de dependencias criptográficas