Frage

Ich suche einen schnellen asymmetrischen Cypher -Algorithmus, der im C ++ - Programm verwendet wird. Unsere Anwendung greift nur schreibgeschützte Daten zu, die im Archiv gespeichert sind (benutzerdefiniertes Format, etwas ähnlich wie TAR), und ich möchte Änderungen dieses Archivs durch asymmetrisch verschlüsseltes Archivindex verhindern (ich weiß, dass dies keine perfekte Lösung und keine perfekte Lösung und keine perfekte Lösung ist. Daten können weiterhin mit bestimmten Techniken extrahiert und neu verpackt werden).

Etwas Einzelne Dateien innerhalb von Archiv werden mit symmetrischen Cypher verschlüsselt und Verschlüsselungsschlüssel für sie werden im Archivindex (Header) gespeichert. Deshalb möchte ich asymmetrisch asymmetrisch ein Archiv -Header verschlüsseln.

Cypher -Anforderungen:
1) Die Implementierung der Algorithmus sollte plattformunabhängig sein.
2) Der Algorithmus sollte entweder einfach selbst implementieren oder in der Bibliothek (mit Quellcode) verfügbar sein, die dies zulässt statisch Verknüpfung mit proprietärer Anwendung, was bedeutet, dass GPL/LGPL/Viru -Lizenzen nicht verwendet werden können. MIT/BSD-lizenziertes Code oder Public-Domänen-Code ist akzeptabel.
3) Wenn Cypher in der Bibliothek erhältlich ist, sollte es sich idealerweise über einen kleinen Speicherpfundwert und die Implementierung sollten kompakt sein. Ich würde es vorziehen, eine C/C ++-Bibliothek zu verwenden, die nur eine Chiffre anstelle einer vollständigen Allzweck-Chiffre-Sammlung implementiert.

Ursprünglich wollte ich RSA verwenden, aber es sieht so aus, als wäre es einfach zu langsam, um nützlich zu sein, und es gibt nicht viele Alternativen.

Also, irgendwelche Ratschläge zu Was kann ich verwenden?

War es hilfreich?

Lösung

Okay, ich habe gefunden, wonach ich gesucht habe, und ich denke, es ist besser als OpenSSL (zumindest für meine Zwecke).

Es gibt zwei Bibliotheken:
libtomcrypt, was mehrere Cyphers (einschließlich RSA) implementiert und libtommath, das implementiert bignum arithmetika. Beide Bibliotheken sind in öffentlichem Domäne, einfach zu hacken/zu ändern und haben eine einfachere Programmierschnittstelle als OpenSSL und (viel) bessere Dokumentation als OpenSSL.
Im Gegensatz zu dem älteren Public -Domain -RSA -Code, den ich zuvor gefunden habe, libtomcrypt kann sehr schnell neue Schlüssel erzeugen, OpenSSL-generierte Schlüssel importieren und die Polsterung unterstützen. Eine weitere gute Sache an libtomcrypt ist, dass es keine zusätzlichen Abhängigkeiten hat (OpenSSL für Windows will zum Beispiel GDI32) und ist kleiner als OpenSSL.

Ich habe mich schließlich entschlossen, RSA für die Verschlüsselung zu verwenden, weil es (für mich es aussieht) keine wirklich asymmetrischen Alternativen. Es sieht so aus, als ob die meisten anderen Chiffren (Elgamal, elliptische Kurven) besser für die symmetrische Verschlüsselung geeignet sind, bei der der Sitzungsschlüssel asymmetrisch verschlüsselt wird. Was für mich nicht geeignet ist. Solche Chiffren eignen sich für Netzwerkkommunikations-/Sitzungsschlüssel, aber es wäre nicht gut, dies für statische, unveränderliche Daten auf der Festplatte zu verwenden.

Was "RSA ist langsam", habe ich das Archivformat ein wenig geändert, so dass jetzt nur noch ein kleiner Datenback asymmetrisch verschlüsselt wird. Wenn Sie diesen Chunk nicht entschlüsseln, wird das Lesen -Archivindex sehr schwierig, wenn nicht unmöglich. Ich muss auch zugeben, dass die Langsamkeit von RSA teilweise ein falscher Eindruck war älterer Code Ich habe schon einmal versucht zu verwenden.

Was bedeutet, Frage gelöst. Lösung ist RSA + libtomcrypt. RSA - weil es nicht viele Alternativen zu RSA und libtomcrypt gibt - weil es klein und öffentlich zugänglich ist.

Andere Tipps

OpenSSL sollte den Job für Sie erledigen. Es ist Open-Source (Apache-Lizenz, so dass Sie Ihre Lizenzanforderungen erfüllen).

Es wird weit verbreitet und gut getestet.

Verwenden Sie eine benutzerdefinierte RSA, um das Archiv zu unterschreiben. Bewahren Sie den öffentlichen Schlüssel in der Bewerbung auf und behalten Sie den privaten Schlüssel im Haus. Jetzt könnte jeder das Lesen nur das Archiv readieren, aber Ihre Bewerbung würde sich weigern, das modifizierte Archiv zu laden.

Schauen Sie sich Curve25519 an, die elliptische Kurve -Krytpographie ist, die effizient implementiert ist, und um Patentprobleme.

Es erfüllt alle Ihre Anforderungen. Siehe hier.

Sie können es verwenden, um zu verschlüsseln oder einfach zu unterschreiben.

Als Anmerkung:

Für die Integritätsprüfung sollte ein Mac ausreichen, es sei denn, Sie benötigen wirklich eine assymetrische Verschlüsselung.

Wie wäre es mit MD5?

Ja, ich bin mir bewusst, dass MD5 „gebrochen wurde; - Aber die meisten praktischen Anwendungen sind irrelevant.
Insbesondere wenn die geänderten Daten auch im bestimmten Datenformat gültig sein und über den richtigen MD5 verfügen

BEARBEITEN:
MD5 ist angemessen, wenn Sie nur sicherstellen möchten, dass die gespeicherten Daten nicht geändert werden (oder zumindest Sie sie erkennen können), aber die Daten nicht verbergen. Beachten Sie, dass Sie, wenn Sie den Schlüssel in Ihrer App neben den Daten haben müssen, immer extrahiert werden können. Es gibt Techniken, um den Schlüssel zu verbergen - eine beliebte besteht einfach darin, ihn in eine statische Ressource wie ein Symbol zu stecken, das leicht verknüpft werden kann.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top