Cripto++

La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la versión revisada el 20 de diciembre de 2019; la verificación requiere 31 ediciones .
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] .

Algoritmos

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] .

Algoritmos Crypto++ y sus implementaciones
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] .

Gestión de claves criptográficas

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] .

Generación de claves [10]

El módulo genera claves compatibles con FIPS utilizando un generador de números aleatorios aprobado , en el siguiente orden:

Intercambio de claves [10]

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:

Almacenamiento de claves

El módulo no almacena ni archiva claves en medios permanentes [10] .

Rendimiento

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] .

Lanzamientos de versiones

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] .

Lanzamientos de Crypto++ desde la versión 5.6
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] .

Ratificaciones FIPS

Crypto++ ha recibido tres certificaciones de nivel 1 de FIPS 140-2 [10] .

Módulos Crypto++ ratificados por FIPS
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.

Licencia

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++

Véase también

Notas

  1. https://cryptopp.com/release870.html
  2. J. Kelsey, B. Schneier, D. Wagner, C. Hall. Ataques criptoanalíticos a generadores de números pseudoaleatorios  // Cifrado rápido de software, 5.º procedimiento internacional. - 1998. - S. 8 . Archivado desde el original el 30 de diciembre de 2014.
  3. Yinglian Xie David O'Hallaron Michael K. Reiter. Protección de la privacidad en los sistemas de búsqueda de valor-clave  // ​​2006 22ª Conferencia anual de aplicaciones de seguridad informática (ACSAC'06): Conferencia. - Miami Beach, FL, EE. UU., 2006. - Pág. 17 . — ISBN 0-7695-2716-7 . — ISSN 1063-9527 . -doi : 10.1109/ ACSAC.2006.43 . Archivado desde el original el 17 de junio de 2019.
  4. ↑ 1 2 3 Ashraf Abusharekh Kris Gaj. ANÁLISIS COMPARATIVO DE BIBLIOTECAS DE SOFTWARE PARA CRIPTOGRAFÍA DE CLAVE PÚBLICA (enlace no disponible) P.10,11,15,29. Departamento de Ingeniería Eléctrica e Informática Universidad George Mason (2007). Consultado el 24 de diciembre de 2019. Archivado desde el original el 24 de diciembre de 2019. 
  5. ↑ 1 2 3 4 Jeffrey Walton. Crypto++: validaciones pasadas y direcciones futuras P.4,5,7 (2017). Consultado el 24 de diciembre de 2019. Archivado desde el original el 24 de diciembre de 2019.
  6. Arsi Hartikainen. Función hash Whirlpool P. 16. Universidad Tecnológica de Lappeenranta (2005). Consultado el 4 de febrero de 2020. Archivado desde el original el 4 de febrero de 2020.
  7. El primer cifrado de bloque de 128 bits de Japón, 'Camellia', aprobado como un nuevo algoritmo de cifrado estándar en Internet , PHYS.ORG  (20 de julio de 2005). Archivado desde el original el 19 de diciembre de 2019. Consultado el 5 de febrero de 2020.
  8. M.Lochter. Estándar de Brainpool de criptografía de curva elíptica (ECC)  //  IETF: RFC. - 2010. - Pág. 4 . — ISSN 2070-1721 . Archivado desde el original el 15 de febrero de 2020.
  9. Notas de la versión de Crypto++ 5.6.0 . Sitio web de Crypto++ . Consultado el 8 de agosto de 2010. Archivado desde el original el 24 de febrero de 2021.
  10. ↑ 1 2 3 4 5 6 Wei Dai. POLÍTICA DE SEGURIDAD . Cripto++ P. 2,9,10. NIST (2007-8-7). Consultado el 1 de febrero de 2020. Archivado desde el original el 19 de diciembre de 2019.
  11. Timo Bingman. Prueba rápida y comparación de bibliotecas criptográficas de código abierto y banderas del compilador  // Panthema.net. - 2008. - S. 1 . Archivado desde el original el 22 de enero de 2020.
  12. Puntos de referencia de Crypto++ 5.6.0 . Sitio web de Crypto++ (2009). Consultado el 10 de agosto de 2010. Archivado desde el original el 15 de octubre de 2008.
  13. Detección errónea de MIPS endianness & ¿Cómo obtener llamadas AES rápidas? . Grupo de usuarios de Crypto++ (2010). Consultado el 11 de agosto de 2010. Archivado desde el original el 9 de noviembre de 2012.
  14. Puntos de referencia de Crypto++ 5.6.0 Pentium 4 . Sitio web de Crypto++ (2002). Consultado el 10 de agosto de 2010. Archivado desde el original el 19 de septiembre de 2010.
  15. Anuncio. Crypto++ 5.0 beta disponible (2002) . Lista de correo Crypto++ . Consultado el 9 de agosto de 2010. Archivado desde el original el 9 de noviembre de 2012.
  16. Anuncio. Actualización de Crypto++ 5.0 . Lista de correo Crypto++ (2002). Consultado el 9 de agosto de 2010. Archivado desde el original el 9 de noviembre de 2012.
  17. Lista de anuncios de Crypto++ (2010) . sourceforge.net. Consultado el 14 de agosto de 2010. Archivado desde el original el 23 de junio de 2011.
  18. L. Teo. Fechas de lanzamiento de versiones anteriores . Lista de correo Crypto++ (2002). Consultado el 9 de agosto de 2010. Archivado desde el original el 9 de noviembre de 2012.
  19. Copyright de compilación para Crypto++ (2003) . Sitio web de Crypto++ . Consultado el 15 de agosto de 2010. Archivado desde el original el 26 de julio de 2010.

Enlaces

Literatura