8. Security Considerations (Sicherheitserwägungen)
Jede Datenkomprimierungsmethode beinhaltet die Reduzierung von Redundanz in den Daten. Zstandard ist keine Ausnahme, und die üblichen Vorsichtsmaßnahmen gelten.
Man sollte niemals eine Nachricht, deren Inhalt geheim bleiben muss, mit einer von einem Dritten generierten Nachricht komprimieren. Eine solche Komprimierung kann verwendet werden, um den Inhalt der geheimen Nachricht durch Entropiereduktionsanalyse (Entropy Reduction Analysis) zu erraten. Dies wurde beispielsweise im CRIME-Angriff (Compression Ratio Info-leak Made Easy) [CRIME] demonstriert.
Ein Decoder muss Fähigkeiten demonstrieren, um jede Art von Datenmanipulation im komprimierten Frame zu erkennen und zu verhindern, die Systemfehler auslösen könnte, wie das Lesen oder Schreiben außerhalb erlaubter Speicherbereiche. Dies kann entweder durch die Implementierungssprache oder durch sorgfältige Grenzprüfungen (Bound Checking) garantiert werden. Besonders hervorzuheben ist die Kodierung von Number_of_Sequences-Werten, die den Decoder dazu veranlassen, in den Block-Header (und darüber hinaus) zu lesen, sowie die Angabe einer Frame_Content_Size, die kleiner als die tatsächlich dekomprimierten Daten ist, in einem Versuch, einen Pufferüberlauf (Buffer Overflow) auszulösen. Es wird dringend empfohlen, Decoder-Implementierungen einem Fuzz-Test zu unterziehen (d.h. ungültige, unerwartete oder zufällige Eingaben bereitzustellen und den sicheren Betrieb zu überprüfen), um ihre Fähigkeit zu testen und zu härten, fehlerhafte Frames zu erkennen und ohne nachteilige Systemnebeneffekte damit umzugehen.
Ein Angreifer kann korrekt formatierte komprimierte Frames mit unvernünftigen Speicheranforderungen bereitstellen. Ein Decoder muss immer die Speicheranforderungen kontrollieren und einige (systemspezifische) Grenzen durchsetzen, um die Speichernutzung vor solchen Szenarien zu schützen.
Die Komprimierung kann optimiert werden, indem ein Wörterbuch auf einer Vielzahl verwandter Inhalts-Payloads trainiert wird. Dieses Wörterbuch muss dann beim Decoder verfügbar sein, damit die Dekomprimierung des Payloads möglich ist. Obwohl dieses Dokument nicht spezifiziert, wie ein Wörterbuch für einen gegebenen komprimierten Payload erworben wird, ist es erwähnenswert, dass Wörterbücher von Drittanbietern unerwartet mit einem Decoder interagieren können, was zu möglichen Speicher- oder anderen Ressourcenerschöpfungsangriffen (Resource-exhaustion Attacks) führen kann. Wir erwarten, dass solche Themen im Abschnitt Sicherheitserwägungen eines kommenden RFC über Wörterbucherwerb und -übertragung detaillierter diskutiert werden, heben dieses Problem jetzt aber aus Vorsicht hervor.
Wie in Abschnitt 3.1.2 besprochen, ist es möglich, beliebige Benutzermetadaten in überspringbaren Frames (Skippable Frames) zu speichern. Obwohl solche Frames während der Dekomprimierung der Daten ignoriert werden, können sie als Wasserzeichen (Watermark) verwendet werden, um den Pfad des komprimierten Payloads zu verfolgen.