Crypto++/RSA und Binäre Dateninhalte
-
Hallo alle zusammen,
ich hätte eine Frage zu Crypto++/RSA.
Ich bin jetzt soweit dass ich mithilfe vonAutoSeededRandomPool rng; InvertibleRSAFunction params; params.GenerateRandomWithKeySize(rng, 256); RSA::PrivateKey privateKey(params); RSA::PublicKey publicKey(params);
Die Keys generieren kann und mithilfe von
StringSource ss1(buffer, true, new PK_EncryptorFilter(rng, e, new StringSink(cipher)));
Texte verschüsseln und
StringSource ss2(cipher, true, new PK_DecryptorFilter(rng, d, new StringSink(ergebnis)));
entschlüsseln kann.
Meine Frage ist jetzt: Wenn ich einen binären Stream(Beispiel: byte *MySteam, unsigned int MyStream_Length) habe, wie kann ich dann diesen verschlüsseln/entschlüsseln? Ich habe mir ArraySource und ArraySink angeguckt, aber wenn ich einfach StringSink und StringSource in ArraySink und ArraySource abändere und den Buffer und seine Länge statt einem std::string übergebe, bekomme ich einen Laufzeitfehler.
Wie macht man das richtig?
Danke im Voraus.Grüße, Matstorm
-
Ich kenne ich mit der Crypto++ Bibliothek nicht aus. Aber ich sag' dir trotzdem, wie man es richtig macht. Kein Schwein ver/entschlüsselt Datenströme mit RSA. RSA ist teuer. Längere Datenströme werden mit einem zufällig gwählten Schlüssel eines symmetrischen Verschlüsselungsverfahrens verschlüsselt und dieser zufällig gewählte Schlüssel wird dann per RSA verschlüsselt und irgendwo angehängt. Und wenn ich hier RSA sage, meine ich eher so etwas wie RSA-OAEP oder so. Das symmetrische Verfahren kann z.B. AES-CBC mit PKCS#7-Padding sein oder so.
Ach, und ein 256er RSA-Key ist im Handumdrehen geknackt. Unter 2048 Bits für RSA braucht man da heute gar nicht mehr mit anfangen. Die aktuellen Äquivalenzen bzgl Sicherheit zwischen RSA als asymmetrisches Verfahren und anderen symmetrischen Verschlüsselungsverfahren sehen so aus:
RSA security --------------- 1024 73 1248 80 1536 89 2048 103 2432 112 3072 124 3248 128 4096 141 5312 160
Diese Werte kommen hier her, siehe Kapitel 7. Das Wort "aktuell" möchte ich dabei noch betonen, weil man ja mathematische Durchbrüche beim RSA-Knacken nicht komplett ausschließen kann. Es ist durchaus möglich, dass jemand einen Faktorisierungsalgorithmus findet, der 10mal schneller ist als der beste, den wir bisher haben. Dann würden quasi nochmal 10 Bits von der Sicherheit runtergehen. Wenn es Dir mit der Vertraulichkeit sehr wichtig ist und diese auch für längere Zeit bestehen soll (30 Jahre oder so), dann würde ich 'nen 4096er RSA-Key und AES als symmetrisches Verfahren verwenden.
-
Das ist so nicht richtig. Ich habe bei einer Firma Hardware gesehen, die wirklich RSA verschlüsselt und nicht nur RSA nutzt um symmetrische Schlüssel auszutauschen.
-
Ich korrigiere:
Kein SchweinNur Idioten verschlüsseln längere Datenströme direkt mit RSA.
-
Und falls das mit dem 256-bit Key nicht nur zum Testen war, sollte man sich überlegen ob man das vielleicht noch mal in einem Jahr versucht, jedenfalls bevor man es veröffentlicht. Es sei denn natürlich du arbeitest beim Bund, dann ist das alles kein Problem.