Crypto++/RSA und Binäre Dateninhalte



  • Hallo alle zusammen,

    ich hätte eine Frage zu Crypto++/RSA.
    Ich bin jetzt soweit dass ich mithilfe von

    AutoSeededRandomPool 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 Schwein Nur 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.


Anmelden zum Antworten