Passa al contenuto principale

8. Security Considerations (Considerazioni sulla sicurezza)

Qualsiasi metodo di compressione dei dati comporta la riduzione della ridondanza nei dati. Zstandard non fa eccezione e si applicano le solite precauzioni.

Non si dovrebbe mai comprimere un messaggio il cui contenuto deve rimanere segreto con un messaggio generato da terze parti. Tale compressione può essere utilizzata per indovinare il contenuto del messaggio segreto attraverso l'analisi della riduzione dell'entropia (Entropy Reduction Analysis). Questo è stato dimostrato nell'attacco CRIME (Compression Ratio Info-leak Made Easy) [CRIME], ad esempio.

Un decoder deve dimostrare capacità di rilevare e prevenire qualsiasi tipo di manomissione dei dati nel frame compresso che possa scatenare guasti del sistema, come la lettura o la scrittura oltre gli intervalli di memoria consentiti. Questo può essere garantito dal linguaggio di implementazione o da attenti controlli dei limiti (Bound Checking). Di particolare nota è la codifica dei valori Number_of_Sequences che causano la lettura del decoder nell'intestazione del blocco (e oltre), così come l'indicazione di una Frame_Content_Size inferiore ai dati effettivamente decompressi, nel tentativo di innescare un overflow del buffer (Buffer Overflow). Si raccomanda vivamente di eseguire test di fuzzing (fuzz-test, ovvero fornire input non validi, imprevisti o casuali e verificare il funzionamento sicuro) sulle implementazioni del decoder per testare e rafforzare la loro capacità di rilevare frame errati e gestirli senza alcun effetto collaterale negativo sul sistema.

Un attaccante può fornire frame compressi correttamente formati con requisiti di memoria irragionevoli. Un decoder deve sempre controllare i requisiti di memoria e imporre alcuni limiti (specifici del sistema) per proteggere l'utilizzo della memoria da tali scenari.

La compressione può essere ottimizzata addestrando un dizionario su una varietà di payload di contenuti correlati. Questo dizionario deve quindi essere disponibile al decoder affinché la decompressione del payload sia possibile. Sebbene questo documento non specifichi come acquisire un dizionario per un dato payload compresso, vale la pena notare che i dizionari di terze parti possono interagire in modo imprevisto con un decoder, portando a possibili attacchi di esaurimento della memoria o di altre risorse (Resource-exhaustion Attacks). Ci aspettiamo che tali argomenti vengano discussi più dettagliatamente nella sezione Considerazioni sulla sicurezza di un prossimo RFC sull'acquisizione e trasmissione di dizionari, ma evidenziamo questo problema ora per eccesso di cautela.

Come discusso nella sezione 3.1.2, è possibile memorizzare metadati utente arbitrari in frame ignorabili (Skippable Frames). Mentre tali frame vengono ignorati durante la decompressione dei dati, possono essere utilizzati come filigrana (Watermark) per tracciare il percorso del payload compresso.