NaCl ( Networking and Cryptography Library , pronunciado "salt") 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 , conocido principalmente por la creación de qmail y Curve25519 . El equipo principal también incluye a Tanja Lange y Peter Schwabe. [ 3 ] [ 4 ] El objetivo principal al crear NaCl, según el documento del equipo de 2011, era "evitar varios tipos de desastres criptográficos sufridos por bibliotecas criptográficas anteriores". El equipo lo logra mediante diseños más seguros que evitan problemas como fugas de canal lateral y pérdida de aleatoriedad, con un rendimiento suficiente para que las funciones de seguridad no sean desactivadas por el usuario, y seleccionando mejores primitivas criptográficas. La API de alto nivel "box" está diseñada para fomentar el uso del cifrado autenticado . [ 1 ]
Funciones
Criptografía de clave pública
crypto_box, cifrado autenticado de clave pública . El acuerdo de clave se realiza a través de X25519; el cifrado se realiza mediante Salsa20-Poly1305. [ 5 ]crypto_scalarmult, multiplicación escalar en X25519 . Esta función se puede utilizar para Diffie-Hellman de curva elíptica .crypto_signfirmas utilizando Ed25519 y SHA -512.
Criptografía de clave secreta
crypto_secretbox, cifrado autenticado con clave privada mediante 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 mediante Poly1305 .
Funciones de bajo nivel
Implementaciones
La implementación de referencia está escrita en C , incorporando a menudo rutinas de ensamblador en línea . La compatibilidad con C++ se implementa como un envoltorio. Se planeó un envoltorio para Python , [ 8 ] pero no forma parte de la última versión (20110221). La página principal, actualizada por última vez en 2016, menciona prototipos de envoltorios. [ 2 ]
La implementación de referencia de NaCl tiene una variedad de enlaces de lenguajes de programación, como PHP [ 9 ] y Tcl. [ 10 ]
Libsodio
Libsodium es una bifurcación compatible con la API de la biblioteca de referencia NaCl, creada en 2013. Es "instalable y empaquetable", es decir, 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 los tenía). También es "portátil y de compilación cruzada". [ 11 ]
Como libsodium se puede enlazar dinámicamente, sirve de base para varias vinculaciones en lenguajes como Squeak , [ 12 ] Pharo , [ 13 ] Perl 5, [ 14 ] y Python. [ 15 ] [ 16 ]
libsodium también amplía la API de NaCl con nuevos algoritmos (por ejemplo, BLAKE2 , [ 17 ] ChaCha20-Poly1305 , AEGIS) [ 18 ] y nuevas clases de funciones (por ejemplo, memoria segura, generación de números aleatorios , hash de entrada corta, [ 19 ] hash de contraseñas y derivación de claves ).
TweetNaCl
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). [ 20 ]
TweetNaCl se ha utilizado como base para puertos como TweetNaCl.js [ 21 ] y TweetNaCl-Java. [ 22 ] 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". [ 23 ]
Otras implementaciones
- RustCrypto: un popular conjunto de bibliotecas criptográficas escritas íntegramente en Rust que incluye una capa de compatibilidad con NaCl.
- dryoc — una biblioteca de criptografía puramente escrita en Rust que implementa la API libsodium/NaCl con soporte para memoria protegida . [ 24 ]
- Monocypher: una reescritura de NaCl en C. Su objetivo es tener la velocidad de NaCl de referencia y el tamaño de TweetNaCl. [ 25 ]
Véase también
Referencias
- 1 2 Daniel J. Bernstein; Tanja Lange; Peter Schwabe. "El impacto en la seguridad de una nueva biblioteca criptográfica" (PDF) . Archivado (PDF) del original el 9 de agosto de 2017.
- 1 2 "NaCl: Biblioteca de redes y criptografía" .
- ↑ "Página web de Tanja Lange" .
- ↑ "Página de inicio de Peter Schwabe" .
- ↑ Bernstein, Daniel J. (10 de marzo de 2009). Criptografía en NaCl (PDF) . Archivado (PDF) del original el 25 de marzo de 2017. Recuperado el 8 de febrero de 2016 .
- ↑ "Hashing: crypto_hash" . 30-08-2010 . Consultado el 14-11-2015 .
- ↑ "Comparación de cadenas: crypto_verify" . nacl.cr.yp.to. Consultado el 19 de enero de 2024 .
- ↑ "Propiedades internas del NaCl" .
- ↑ "Extensión PHP NaCl" . Github. 14 de junio de 2019.
- ↑ "Tclers Wiki - NaCl para Tcl" .
- ↑ Denis, Frank (18 de enero de 2024). "libsodium: Una biblioteca criptográfica moderna, portátil y fácil de usar" . GitHub .
- ↑ "Repositorio 'Sodium' de SqueakSource" . 6 de agosto de 2025.
- ↑ "Repositorio SmalltalkHub" . 22 de enero de 2018.
- ↑ "Cripto::NaCl::Sodio" .
- ↑ Autoridad Criptográfica de Python (18 de enero de 2024). "pyca/pynacl" . GitHub .
PyNaCl es una interfaz de Python para libsodium, que es una bifurcación de la biblioteca de Redes y Criptografía.
- ↑ "Enlaces para otros lenguajes" . libsodium .
- ↑ "Hashing genérico" . 13 de diciembre de 2017. Consultado el 19 de mayo de 2018 .
- ↑ "Construcciones AEAD" . libsodium .
- ↑ "Hashing con entrada corta" . libsodium .
- ^ Daniel J. Bernstein; Bernard van Gastel; Wesley Janssen; Tanja Lange; Peter Schwabe; Sjaak Smetsers (2013). "TweetNaCl" .
- ↑ "TweetNaCl.js" .
- ↑ «TweetNaCl-Java» . GitHub .
- ↑ "SPARKNaCl" . GitHub .
- ↑ "No crees tu propio sistema criptográfico (dryoc): biblioteca de criptografía puramente en Rust, difícil de usar indebidamente" . GitHub .
- ↑ Vaillant, Loup (17 de enero de 2024). "LoupVaillant/Monocypher" . GitHub .
Enlaces externos
- Sitio web oficial
- Software de dominio público
- Software criptográfico
- Software de 2008