Wird bei einer RSA-Kryptifizierung die kodierte Datei größer als die Quelle?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

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
Woher ich das weiß:Studium / Ausbildung – Informatiker

gogogo 
Fragesteller
 02.01.2020, 08:53

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.

0
iQa1x  02.01.2020, 09:02
@gogogo

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.

1
gogogo 
Fragesteller
 02.01.2020, 09:07
@iQa1x

Und wenn ich das Padding wegnehme? Stimmt dann meine Annahme, dass ich bei einem 1024 großen N nur 1023 Bits verschlüsseln kann und damit ein leichtes Wachstum in den Daten zwingend habe?

0
PeterKremsner  09.01.2020, 10:40

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?

0

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." ^^


Isendrak  02.01.2020, 11:13

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.

0