Ich suche nach einer C/C++-Implementierung von RSA mit einem 2048-Bit-Schlüssel (vorzugsweise aus einer Datei gelesen). Mein Ziel ist eine eingebettete Plattform, daher gibt es einige seltsame Einschränkungen. Die Hardware hindert uns daran, den neuen Operator zu verwenden, und wir müssen eine spezielle Version von malloc verwenden, die vom Hardwarehersteller namens "umalloc" geliefert wird. Bei Bedarf kann ich in die Quelle graben und die malloc-Aufrufe von Hand ersetzen, aber das möchte ich vermeiden. Die idealste Lösung wäre, eine Bibliothek zu finden, die RSA-Verschlüsselung durchführen kann, jedoch ohne Ausnahmen oder dynamische Zuordnung.
Ich recherchiere das jetzt seit etwa einer Woche und bin auf den verschiedenen Stackexchange-Websites auf mehrere verschiedene Bibliotheken gestoßen. Siehe hier und hier . Ich wollte diese Frage erneut öffnen, da die meisten Fragen, die ich gefunden habe, mehrere Jahre alt waren und ich sehen möchte, ob die Meinungen zu diesen Bibliotheken noch zutreffen.
Bisher sind hier die folgenden Bibliotheken, auf die ich gestoßen bin
Im Idealfall hoffe ich, einfach ein paar Dateien einzufügen und nur eine Handvoll Funktionen zu verwenden, um loszulegen. Gibt es Bibliotheken, die über das hinausgehen, was ich aufgelistet habe, die RSA-2048-Verschlüsselung durchführen können, und zwar ohne Ausnahmen oder dynamische Speicherzuweisung? Vielen Dank
Ja, LibTomCrypt . LibTomCrypt implementiert die gängigsten kryptografischen Primitiven (und viele ungewöhnliche) , einschließlich RSA (PKCS#1 v1.5, PSS- und OAEP-Modi). Der Code ist sauber und portabel C, sodass Sie ihn in Anwendungen einbinden können, die in so ziemlich jeder Programmiersprache geschrieben sind. Die Bibliothek besteht aus kleinen Objekten, sodass nur der Code, den Sie tatsächlich benötigen, in Ihre Binärdatei eingebunden wird. Die Lizenz erlaubt Ihnen, buchstäblich zu tun, was zum Teufel Sie wollen.
Mathematische Operationen werden von der begleitenden Bibliothek LibTomMath (in hohem Maße portierbarer und lesbarer Code) oder TomsFastMath (mit Optimierungen für einige Plattformen einschließlich ARM) durchgeführt.
LibTomCrypt nutzt malloc
und co. standardmäßig für die Speicherverwaltung, aber Sie können andere ersetzen, wenn Sie die Bibliothek erstellen ( #define XMALLOC umalloc
usw.).
LibTomCrypt macht nur Krypto-Primitive, keine Zertifikate oder Netzwerkprotokolle. Wenn Sie SSL/TLS benötigen, schlagen wir vorläufig mbed TLS vor, früher bekannt als PolarSSL. Vorläufig, weil ich es noch nie in einem eingebetteten Projekt verwendet habe.
Es wird von ARM verwaltet, sodass Sie Code erwarten können, der auf ARM-Plattformen gut funktioniert (obwohl es meines Wissens keine besonderen Optimierungen gibt, z. B. gibt es keine optionale ARM-Assembly, nur portables C). Für Open-Source-Projekte ist die Bibliothek unter der GNU GPL lizenziert (nicht der LGPL), was restriktiv ist, aber es gibt Ausnahmen, die das Verknüpfen mit Nicht-GPL-Open-Source-Code erlauben. Eine Lizenz, die eine Closed-Source-Verteilung erlaubt, ist ebenfalls gegen Gebühr erhältlich.
Der Quellcode ist ziemlich sauberes, portables C. Ein Teil des Kerncodes wird überhaupt nicht verwendet malloc
, und der Code, der dies tut, verwendet immer polarssl_malloc
und polarssl_free
(es gibt keine Verwendung von realloc
), wodurch es bei Bedarf einfach ist, andere Zuweisungen zu ersetzen.
Elliptische Kurven werden auch unterstützt, wenn Sie irgendwann auf etwas Schnelleres und Kleineres als RSA migrieren.
Im Jahr 2019 ist die beste C-Bibliothek für eingebettete Kryptografie wahrscheinlich BearSSL . Abgesehen davon, dass es meiner Meinung nach ziemlich sicher ist (es berücksichtigt Seitenkanalangriffe), ist es sehr kompakt und so konzipiert, dass es keinen Speicher dynamisch zuweist (z. B. ruft es nicht auf malloc
).
Steve Barnes
HD_Maus
Gilles 'SO-hör auf, böse zu sein'
CodesInChaos
HD_Maus
Steve Barnes
Markieren
HD_Maus
Markieren
Gilles 'SO-hör auf, böse zu sein'
SEJPM