NaCl ( Networking and Cryptography Library , pronunciado "sal") es una biblioteca de software de dominio público y de alta velocidad para criptografía . [2]
NaCl fue creado por el matemático y programador Daniel J. Bernstein , quien es mejor conocido por la creación de qmail y Curve25519 . El equipo central también incluye a Tanja Lange y Peter Schwabe. [3] [4] El objetivo principal al crear NaCl, según el artículo de 2011 del equipo, era "evitar varios tipos de desastres criptográficos sufridos por bibliotecas criptográficas anteriores". El equipo lo hace mediante diseños más seguros que evitan problemas como fugas de canal lateral y pérdida de aleatoriedad, siendo lo suficientemente eficientes como para que el usuario no deshabilite las funciones de seguridad y eligiendo mejores primitivas criptográficas. La API de "caja" de alto nivel está diseñada para fomentar el uso de cifrado autenticado . [1]
crypto_box
, cifrado autenticado con clave pública . El acuerdo de clave se realiza mediante X25519; el cifrado se realiza mediante Salsa20-Poly1305. [5]crypto_scalarmult
, multiplicación escalar en X25519 . Esta función se puede utilizar para la función Diffie–Hellman de curva elíptica .crypto_sign
, firmas que utilizan Ed25519 y SHA-512.crypto_secretbox
, cifrado autenticado con clave privada utilizando Salsa20-Poly1305 .crypto_stream
, cifrado mediante Salsa20 , XSalsa20 o AES .crypto_auth
, autenticación mediante HMAC-SHA-512-256 .crypto_onetimeauth
, autenticación de mensaje único utilizando Poly1305 .crypto_hash
, hash utilizando SHA-512 o SHA-256 [6]crypto_verify
, comparación de cadenas en tiempo constante. [7]La implementación de referencia está escrita en C , a menudo con varios ensambladores en línea . C++ se maneja como un contenedor. Se planeó un contenedor de Python , [8] pero no es parte de la última versión (20110221). La página de inicio, actualizada por última vez en 2016, menciona contenedores de prototipos. [2]
El NaCl de referencia tiene una variedad de enlaces de lenguaje de programación como PHP [9] y Tcl. [10] [ se necesita una fuente de terceros ]
Libsodium es una bifurcación compatible con API de la biblioteca de referencia NaCl creada en 2013. Es "instalable y empaquetable", o en otras palabras, se puede compilar en una biblioteca dinámica e instalar como un paquete de software gracias a la adición de archivos de compilación (NaCl no tenía ninguno). También es "portable y compilable en varios sistemas". [11]
Como libsodium se puede vincular dinámicamente, sirve como base para una serie de enlaces en lenguajes como Pharo , [12] Perl 5, [13] y Python. [14] [15]
libsodium también extiende la API de NaCl con nuevos algoritmos (por ejemplo, BLAKE2 , [16] ChaCha20-Poly1305 , AEGIS) [17] y nuevas clases de funciones (por ejemplo, memoria segura, generación de números aleatorios , hash de entrada corta, [18] hash de contraseñas y derivación de claves ).
En 2013, el equipo de NaCl y otros tres lanzaron TweetNaCl, una implementación condensada de las 25 funciones de NaCl que cabe en el tamaño de 100 tweets (140 símbolos cada uno). [19]
TweetNaCl se ha utilizado como base de puertos como TweetNaCl.js [20] y TweetNaCl-Java. [21] También se ha reescrito en el subconjunto SPARK Ada como SPARKNaCl, que los autores describen como "(a diferencia de TweetNaCl) legible debido a la gran cantidad de comentarios explicativos y contratos en el código". [22]
PyNaCl es un enlace de Python a libsodium, que es una bifurcación de la biblioteca de redes y criptografía.