Padding (Informatik)
Padding (von englisch to pad ‚auffüllen‘) ist ein Fachbegriff der Informatik für Fülldaten, mit denen ein vorhandener Datenbestand vergrößert wird. Die Füllbytes werden auch Pad-Bytes genannt. Die für Prüfsummen verwendeten Daten zählen hierbei nicht zum Padding.
Padding wird vorwiegend eingesetzt, um vorhandene Daten in die Gestalt einer durch einen Algorithmus oder ein Protokoll vorgegebenen Struktur zu bringen. Entsprechen die vorhandenen Daten nicht der Struktur – beispielsweise eine Folge von 50 Bits bei einem Algorithmus, der auf einem Block von 64 Bit Länge operiert – werden diese mit geeigneten Bit- oder Bytefolgen erweitert. Die Wahl des Paddings kann hierbei – je nach Anwendung – von simplem Auffüllen mit Nullen (Zero Padding) bis zu komplexen Schemata reichen.
Padding in der Kryptographie
In der klassischen Kryptographie wurde Padding variabler Längen dazu eingesetzt, Anfang und Ende des Inhalts eines versandten Chiffrats zu verschleiern. Hierdurch sollte es Kryptoanalysten erschwert werden, die Position fester Begriffe – etwa des Absenders oder einer Anrede – zu erraten und mit Hilfe einer solchen „Crib“ die Nachricht zu dechiffrieren. In der modernen Kryptographie – in der simple „Cribs“ aufgrund der Komplexität der Algorithmen keine Rolle mehr spielen – hat das Padding neben dem reinen Auffüllen zudem die Aufgabe, die Sicherheit des Algorithmus zu erhöhen.
Im Falle von Merkle-Damgård-Hash-Funktionen – der überwiegend verwendeten Form kryptographischer Hash-Funktionen – wird das Padding dazu eingesetzt, die Nachrichtenlänge auf ein vielfaches der Blocklänge der Kompressionsfunktion zu bringen.
Bei symmetrischen Blockchiffren wird Padding ebenfalls verwendet, um den Klartext an die Blocklänge anzupassen. Die meisten Betriebsarten (z. B. ECB, CBC) verlangen als Eingabe einen Klartext, dessen Länge ein Vielfaches der Blocklänge ist.[1] An das Auffüllen des Klartextes werden folgende Ansprüche gestellt:[2]
- Jeder beliebige Klartext kann an ein Vielfaches der Blocklänge angepasst werden.
- Das Padding ist eindeutig invertierbar.
- Die durchschnittliche Längenexpansion sollte minimal sein.
Um diese Kriterien einzuhalten, bietet es sich an, jedem Klartext ein festgelegtes Zeichen (z. B. „1“) anzuhängen und dann mit einem anderen Zeichen (z. B. „0“) aufzufüllen.[3]
Bei asymmetrischer Kryptographie, vor allem beim RSA-Kryptosystem, soll das Padding das Ergebnis (z. B. den Chiffretext oder die digitale Signatur) randomisieren. Dadurch wird erreicht, dass bei zweimaligem Verschlüsseln derselben Nachricht zwei unterschiedliche Chiffrate erzeugt werden. Um dies zu erreichen, werden neben dem Auffüllen mit zufälligen Bitstrings eines festen Formats auch modernere Paddingverfahren mit stärkeren Sicherheitsgarantien wie Probabilistic Signature Scheme oder Optimal Asymmetric Encryption Padding verwendet. Standards für Paddingverfahren für RSA werden z. B. in PKCS#1 oder ISO 9796 festgelegt.
Padding kann dazu benutzt werden, die Länge eines Klartextes und damit auch des Ciphertextes zu randomisieren bzw. auf eine bestimmte (immer gleiche) Länge zu bringen. Auf diese Weise wird Padding beispielsweise in TLS 1.3 genutzt.[4] Dazu wird oft sogenanntes "zero padding" oder "null padding" benutzt, welches nur Nullen benutzt. Damit soll Angreifern erschwert werden, die Länge des Klartextes zu erraten.
Padding in der Informatik
Außerhalb der Kryptographie findet man Padding bei Netzwerkprotokollen, diversen fest strukturierten Dateiformaten wie beispielsweise Grafikdateien, sowie allgemein (also sowohl in Dateien als auch im Arbeitsspeicher des Computers) in diversen Datenstrukturen, die Regeln solcher Art erfüllen müssen, beispielsweise Beginn neuer Elemente immer nur an geraden oder durch vier teilbaren Adressen, siehe beispielsweise beim Interchange File Format.[5] Bei Musikdateien findet Padding Anwendung, wenn Metadaten am Anfang der Datei stehen. Dadurch können die Metadaten in der Länge verändert werden (mit entsprechend gegenteiliger Änderung des Paddings), ohne dass die ganze Datei neu geschrieben werden muss (da die Position der Nutzdaten unverändert bleibt).
Quellen
- Niels Ferguson, Bruce Schneier: Practical Cryptography. Wiley, Indianapolis IN 2003, ISBN 0-471-22357-3, S. 68.
- Andreas Pfitzmann: Skript Sicherheit in Rechnernetzen. (PDF; 1,7 MB) S. 355.
- Andreas Pfitzmann: Skript Sicherheit in Rechnernetzen. (PDF; 1,7 MB) S. 424f.
- TLS Prototype of TLS 1.3 records, padding, and optional headerless records. Abgerufen am 2. August 2017.
- Electronic Arts' IFF standard for Interchange File Format (englisch)