Cripto++ | |
---|---|
Tipo de | Biblioteca |
Desarrollador | Proyecto Crypto++, Wei Dai desde 2015 |
Escrito en | C++ |
Sistema operativo | multiplataforma |
Primera edición | 1995 |
ultima versión |
|
Licencia | Licencia de software Boost (anteriormente Licencia Crypto++ ) |
Sitio web | criptopp.com |
Crypto++ (también conocido como CryptoPP , libcrypto++ y libcryptopp ) es una biblioteca C++ gratuita y de código abierto de algoritmos y esquemas criptográficos escrita por el ingeniero informático chino Wei Dai [2] . Lanzada en 1995, la biblioteca es totalmente compatible con arquitecturas de 32 y 64 bits para muchos de los principales sistemas operativos y plataformas, como Android (usando STLport ), Apple (Mac OS X e iOS), BSD , Cygwin , IBM AIX y S/390., Linux , MinGW , Solaris , Windows , Windows Phone y Windows RT . El proyecto también admite la compilación mediante bibliotecas de varios tiempos de ejecución C++03, C++11 y C++17; y muchos otros compiladores e IDE , incluidos Borland Turbo C++ , Borland C++ Builder , Clang , CodeWarrior Pro , GCC (con GCC de Apple), Intel C++ Compiler (ICC) , Microsoft Visual C/C++ [3] [4] [5] .
Crypto++ generalmente proporciona implementaciones criptográficas completas. Por ejemplo, el cifrado de bloque Camellia aprobado por ISO / NESSIE / IETF , prácticamente similar a AES , la función hash Whirlpool , también aprobada por las organizaciones anteriores, similar a SHA ; ambos están incluidos en esta biblioteca [6] [7] .
Vale la pena agregar que la biblioteca Crypto ++ a veces pone a disposición de la comunidad criptográfica algoritmos propuestos y más nuevos para su estudio. Por ejemplo, VMAC , el Código de autenticación de mensajes basado en hash universal, se agregó durante su envío al Consejo de Ingeniería de Internet ; Las curvas de Brainpool, propuestas como borrador de Internet en RFC 5639 en marzo de 2009 , se agregaron a Crypto++ 5.6.0 en el mismo mes [8] [9] .
Primitivo u operación | Algoritmos o implementaciones |
---|---|
Generadores de números pseudoaleatorios | LCG , KDF2 , Blum Blum Shub , ANSI X9.17 , Mersenne Twister , RDRAND y RDSEED |
Cifrados de flujo rápido | ChaCha8/12/20 , HC-128 & HC-256 , Panamá , Conejo , Salsa20 , SOSEMANUK , XSalsa20 |
Candidatos AES y AES | Rijndael ( selección AES ), RC6 , MARS , Twofish , Serpent , CAST-256 |
Otros cifrados de bloque | ARIA , Blowfish , Camellia , CHAM , HIGHT, IDEA , Kalyna (128/256/512), LEA , RC5 , SEED , SHACAL-2 , Simon y Speck (64/128), SIMECK, Skipjack , SM4 , TEA , Threefish ( 256/512/1024), XTEA |
Métodos de cifrado de bloques | BCE , CBC , CTS , CFB , OFB , CTR |
Modos de cifrado autenticados | CCM , GCM , EAX |
Esquemas de relleno de cifrado en bloque | PKCS#5 , PKCS#7 , ceros , uno y ceros , relleno W3C |
Códigos de autenticación de mensajes | VMAC , HMAC , CMAC , CBC-MAC , DMAC , MAC de dos pistas |
Función hash criptográfica | BLAKE2 (BLAKE2b y BLAKE2s), Keccak , SHA-1 , SHA-2 (SHA-224, SHA-256, SHA-384 y SHA-512), SHA3 , Tiger , WHIRLPOOL , RIPEMD(RIPEMD-128, RIPEMD-160 , RIPEMD-256 y RIPEMD-320) |
KDF sensible a la contraseña | PBKDF1 y PBKDF2 de PKCS #5 , PBKDF de PKCS #12 apéndice B |
Criptografía de clave pública | RSA , DSA , ElGamal , Nyberg-Rueppel (NR), Rabin-Williams (RW), LUC , LUCELG , DLIES ( variantes DHAES ), ESIGN , curve25519 |
Esquemas de población para sistemas de clave pública | PKCS#1 v2.0, OAEP , PSS , PSSR , IEEE P1363 EMSA2 y EMSA5 |
Criptografía de curva elíptica | ECDSA , ECNR , ECIES , ECDH , ECMQV |
La biblioteca también pone a disposición primitivas para operaciones de teoría de números, como generar y probar números primos, aritmética de campos finitos, incluidos GF(p) y GF(2 n ); operaciones con polinomios [4] .
En la terminología FIPS 140-2 , la biblioteca Crypto++ se clasifica como un módulo independiente de varios chips. Las versiones de 32 y 64 bits de la biblioteca cumplen con todos los requisitos del sistema operativo y seguridad física FIPS 140-2 nivel 1. La biblioteca Crypto++ contiene solo algoritmos criptográficos aprobados. Los algoritmos no aprobados implementados en el producto Crypto++ no están incluidos en el paquete DLL validado por FIPS [10] .
Todas las claves de un módulo pueden importarse al propio módulo o generarse internamente mediante un generador de números aleatorios ( PRNG ). El propio módulo almacena estas claves solo en la RAM y no las almacena en la memoria permanente [10] .
El módulo genera claves compatibles con FIPS utilizando un generador de números aleatorios aprobado , en el siguiente orden:
CMVP permite los siguientes métodos de intercambio de claves: Transporte de claves RSA y Protocolo Diffie-Hellman .
Crypto++ no impone ninguna restricción sobre la longitud de las claves RSA y DH, se elige su longitud adecuada para proteger las claves simétricas durante el intercambio.
Además, CMVP tiene los siguientes requisitos mínimos de tamaño de clave:
El módulo no almacena ni archiva claves en medios permanentes [10] .
En 2007, durante el estudio ECRYPT , se analizó el trabajo de ocho bibliotecas criptográficas, Ashraf Abushareh y Chris Kai encontraron que "Crypto++ 5.1" lidera en términos de soporte para esquemas y primitivos criptográficos, pero es la más lenta de todas las bibliotecas estudiadas [4 ] .
En 2008, las pruebas de velocidad realizadas por Timo Bingmann utilizando siete bibliotecas de seguridad de código abierto para cifrados de 15 bloques mostraron que Crypto++ 5.5.2 era la biblioteca más eficiente para cifrados de dos bloques y estaba a la par con el rendimiento promedio de las bibliotecas para el resto de los cifrados en bloque [11] .
Crypto++ también incluye una función de referencia automatizada disponible desde la línea de comandos (cryptest.exe b), cuyos resultados se pueden ver en Crypto++ 5.6.0 Benchmarks [12] .
Al igual que muchas otras bibliotecas criptográficas disponibles para arquitecturas x86 de 32 y 64 bits, Crypto++ incluye rutinas de compilación para AES mediante AES-NI . Con AES-NI, el rendimiento de AES mejora considerablemente: el rendimiento de AES/GCM de 128 bits aumenta de aproximadamente 28,0 ciclos por byte a 3,5 ciclos por byte [13] [14] .
Crypto++ 1.0 se lanzó en junio de 1995. La arquitectura de la biblioteca ha cambiado en la versión 5.0 [15] [16] . Se han lanzado diez versiones desde marzo de 2009 utilizando la arquitectura 5.0 [17] .
Versión | fecha de lanzamiento |
---|---|
Cripto++ 5.6.0 | 15 de marzo de 2009 |
Cripto++ 5.6.1 | 9 de agosto de 2010 |
Cripto++ 5.6.2 | 20 de febrero de 2013 |
Cripto++ 5.6.3 | 20 de noviembre de 2015 |
Cripto++ 5.6.4 | 11 de septiembre de 2016 |
Cripto++ 5.6.5 | 11 de octubre de 2016 |
Cripto++ 6.0.0 | 22 de enero de 2018 |
Cripto++ 6.1.0 | 22 de febrero de 2018 |
Cripto++ 7.0.0 | 8 de abril de 2018 |
Cripto++ 8.0.0 | 28 de diciembre de 2018 |
Cripto++ 8.1.0 | 11 de febrero de 2019 |
Cripto++ 8.2.0 | 28 de abril de 2019 |
Puede encontrar una lista de todos los lanzamientos anteriores de Theo Lawrence de Crypto++ desde 1995 en el archivo del grupo de usuarios [18] .
Crypto++ ha recibido tres certificaciones de nivel 1 de FIPS 140-2 [10] .
Versión | Certificado | fechas |
---|---|---|
Cripto++ 5.0.4 | Certificado 343 [5] | 2003-09-05, 2005-10-28 |
Cripto++ 5.2.3 | Certificado 562 [5] | 2005-07-29, 2005-08-24, 2005-10-28 |
Cripto++ 5.3.0 | Certificado 819 [5] | 2007-08-13, 2007-08-17 |
Crypto++ fue agregado a la Lista de Validación Histórica por CMVP en 2016.
A partir de la versión 5.6.1, Crypto++ solo consta de archivos públicos y una única licencia de código abierto para los derechos de autor de la compilación [19] .
La Licencia de Crypto++ es algo inusual entre los proyectos de código abierto. Se hace una distinción entre la biblioteca como compilación (es decir, colección), que tiene derechos de autor de Wei Dai, y los archivos individuales que contiene, que son de dominio público . La biblioteca tiene derechos de autor como una compilación para colocar ciertos descargos de responsabilidad (con respecto a la garantía, la exportación y las patentes) en la licencia y para mantener intactas las atribuciones y las declaraciones de dominio público cuando Crypto ++ se distribuye en forma de código fuente. El hecho de que los archivos individuales sean de dominio público significa que legalmente puede colocar segmentos de código, archivos completos o pequeños conjuntos de archivos (hasta el límite establecido por el uso justo) en su propio proyecto y hacer lo que quiera con ellos sin preocuparse por el derechos de autor.
Sitio web de 30px
Crypto++