Wird bei einer RSA-Kryptifizierung die kodierte Datei größer als die Quelle?
Habe zur RSA-Verschlüsselung leider nur ein Halbwissen.
Meistens wird diese Kodierung für die sichere Übertragung von wenigen Bytes eingesetzt. Das ist mir klar, will ich hier aber nicht weiter betrachten.
Wenn ich einen Wert für N = p•q mit beispielsweise 1024 Bit habe, so kann ich doch nur Werte < N kodieren? Ist das richtig?
Falls dieses Halbwissen stimmt, dann lassen sich alle Werte bis 1023 Bit Länge sowie einige bis 1024 Bit Länge kodieren, aber nicht alle.
Daraus folgt dann, dass eine Datei von beispielsweise 10 MB in Häppchen zu 1023 Bit und nicht zu 1024 Bit zu zerteilen ist und die Codes der Häppchen aber 1024 Bits haben. Damit würde die Datei um knapp 1 ‰ größer werden.
Frage: ist dieser Gedanke richtig oder liege ich da völlig daneben?
Falls mein Gedanke falsch ist: wie wird eine 10 MB Datei dann in Häppchen zerlegt?
Ich bitte, die Frage nicht zu verändern. Ich möchte von 10 MB alles per RSA und einen 1024 Bit N verschlüsseln (theoretisches Beispiel). Ich suche eine wissenschaftliche Antwort und keine für die Anwendung.
2 Antworten
Die RSA Blockgröße ist bei 1024 Bit Key wohl 86 Bytes, allerdings weiss ich nicht genau, warum da nochmal 42 Bytes von 1024/8 abgezogen werden müssen. D.h. die Datei müsste in Blöcke zu je 86 Bytes aufgeteilt werden.
Aus Geschwindigkeitsgründen (RSA ist langsam) macht man das ganz anders:
- Die Datei wird meist erst komprimiert (gzip, etc)
- Es wird ein zufälliger AES-Schlüssel erzeugt und die Datei damit verschlüsselt (bis auf ggfs. einige Bytes Padding ändert das nichts an der Größe)
- Der zufällige AES-Schlüssel wird RSA-verschlüsselt und drangehangen
Ist das mit dem AES Schlüssel nicht nur bei GPG der Fall?
Https Verschlüsselung geht doch nur über RSA oder irre ich mich da?
Diese 42 Bytes sind wohl für ein Padding aus PKCS Standard, es geht wohl auch mit 126 Byte Eingabe maximal ohne dieses Padding. Die Ausgabe von RSA ist ja immer gleich der Größe des Modulus, also bei dir 1024 Bit = 128 Byte. Daher wird die Datei bei reiner RSA_Codierung größer.
Das ist zum Teil implementierungsabhängig.
Ich hab vor kurzem Mal ne rudimentäre RSA-Implementierung in C gebastelt (nur die reine Verschlüsselung, kein Padding, kein Encoding, etc.), die tatsächlich mit bis zu 1024/8 Bytes bei 1024 Bits an Schlüssellänge klarkommt.
Allerdings ist das für die meisten praktischen Anwendungsfälle nicht wirklich sinnvoll.
Im Grunde wäre die Antwort auf deine Frage also am ehesten "Jein, aber und oder nicht." ^^
Wobei dazu noch zu erwähnen wäre, dass die 128 Bytes bei 1024 Bits eher ein theoretischer Wert sind.
Praktisch wäre meist bei 127 Bytes Schluss, da es ansonsten sein kann (abhängig von N), dass am Ende ein paar Bits nicht ordentlich mit rauskommen, da jeder verschlüsselte Block grundsätzlich um 1 Bit kleiner als N ist. (Das liegt daran, dass x mod y maximal y - 1 sein kann.)
Wenn also das erste Bit der 128 Bytes den Wert 0 sollte es klappen (evtl.), wäre aber wie gesagt bestenfalls bedingt sinnvoll.
Danke, der erste Teil interessiert mich. Damit wird das kryptifizierte um rund 50% größer als die Quelldaten?
Dass das dann normalerweise anders gemacht wird, hatte ich ja schon in meinem zweiten Absatz geschrieben. Mir geht es in dieser Frage nur um die Kryptifizierung der gesamten Datei via ausschließlich RSA.