Estoy buscando una implementación C/C++ de RSA con una clave de 2048 bits (preferiblemente leída desde un archivo). Mi objetivo es una plataforma integrada, por lo que viene con algunas restricciones extrañas. El hardware nos impide usar el nuevo operador y tenemos que usar una versión especial de malloc proporcionada por el fabricante del hardware llamada "umalloc". Si es necesario, puedo profundizar en la fuente y reemplazar las llamadas malloc a mano, pero me gustaría evitar eso. La solución más ideal sería encontrar una biblioteca que pueda realizar el cifrado RSA pero sin usar excepciones ni asignación dinámica.
He estado investigando esto durante aproximadamente una semana y me he encontrado con varias bibliotecas diferentes en los distintos sitios web de stackexchange. Ver aquí y aquí . Quería reabrir esta pregunta ya que la mayoría de las preguntas que encontré tenían varios años y quiero ver si las opiniones sobre esas bibliotecas siguen siendo ciertas.
Hasta ahora aquí están las siguientes bibliotecas que he encontrado
Idealmente, lo que espero es colocar algunos archivos y usar un puñado de funciones para comenzar. ¿Existen bibliotecas más allá de las que he enumerado que pueden realizar el cifrado RSA-2048 y hacerlo sin usar excepciones o asignación de memoria dinámica? Gracias
Sí, LibTomCrypt . LibTomCrypt implementa las primitivas criptográficas más comunes (y muchas poco comunes) , incluido RSA (modos PKCS#1 v1.5, PSS y OAEP). El código es C limpio y portátil, por lo que puede vincularlo a aplicaciones escritas en prácticamente cualquier lenguaje de programación. La biblioteca está hecha de objetos pequeños para que solo el código que realmente necesita se vincule a su binario. La licencia te permite hacer, literalmente, lo que quieras.
Las operaciones matemáticas se realizan mediante la biblioteca complementaria LibTomMath (código altamente portátil y legible) o TomsFastMath (con optimizaciones para algunas plataformas, incluido ARM).
Usos de LibTomCrypt malloc
y co. para la gestión de la memoria de forma predeterminada, pero puede sustituir otros cuando construya la biblioteca ( #define XMALLOC umalloc
etc.).
LibTomCrypt solo hace cripto primitivos, no hace certificados o protocolos de red. Si necesita SSL/TLS, le sugeriremos tentativamente mbed TLS , anteriormente conocido como PolarSSL. Tentativamente porque nunca lo he usado en un proyecto integrado.
Es mantenido por ARM, por lo que puede esperar un código que funcione bien en las plataformas ARM (aunque, que yo sepa, no hay optimizaciones particulares, por ejemplo, no hay un ensamblaje ARM opcional, solo C portátil). Para proyectos de código abierto, la biblioteca tiene licencia GNU GPL (no LGPL), que es restrictiva, pero hay excepciones que permiten la vinculación con código fuente abierto que no es GPL. Una licencia que permite la distribución de código cerrado también está disponible por una tarifa.
El código fuente es C bastante limpio y portátil. Parte del código central no se usa malloc
en absoluto, y el código que sí siempre usa polarssl_malloc
y polarssl_free
(no se usa realloc
), lo que facilita la sustitución de otros asignadores si es necesario.
Las curvas elípticas también son compatibles si migra a algo más rápido y más pequeño que RSA en algún momento.
En 2019, la mejor biblioteca C de criptografía integrada es probablemente BearSSL . Además de que, en mi opinión, es bastante seguro (considera mucho los ataques de canal lateral), es muy compacto y está diseñado para no asignar memoria de forma dinámica (por ejemplo, no llama a malloc
).
steve barnes
HD_Ratón
Gilles 'SO- deja de ser malvado'
CodesInChaos
HD_Ratón
steve barnes
Marca
HD_Ratón
Marca
Gilles 'SO- deja de ser malvado'
SEJPM