PAX (Pre-Allocate eXtension) è un formato di archivio compresso open source sviluppato da Microsoft come alternativa moderna a formati esistenti come ZIP, RAR e tar. È stato progettato per affrontare le limitazioni e migliorare la compressione, le prestazioni, la sicurezza e la funzionalità della gestione degli archivi su sistemi e dispositivi moderni.
Le principali caratteristiche distintive del formato PAX includono una compressione avanzata che utilizza algoritmi moderni, un accesso casuale efficiente ai file all'interno degli archivi, supporto nativo al multi-threading, metadati estensibili, crittografia integrata e controllo dell'integrità e una specifica aperta documentata per incoraggiare un'ampia adozione e interoperabilità.
Gli archivi PAX utilizzano l'estensione file .pax e hanno una struttura interna multi-parte costituita da un'intestazione, una directory centrale, blocchi di dati compressi e un piè di pagina. Ciò consente di archiviare separatamente le informazioni chiave come il contenuto dell'archivio, i parametri di compressione e gli hash di integrità dai dati effettivi del file compresso.
L'intestazione PAX inizia con un numero magico di 4 byte (50 41 58 00 in esadecimale) per l'identificazione. Contiene quindi campi per la versione PAX, il metodo di compressione, il metodo di crittografia, il metodo hash, la dimensione del blocco, il numero di thread di compressione paralleli e vari flag. L'intestazione termina con metadati XML estensibili che forniscono dettagli sull'archivio.
Dopo l'intestazione c'è la directory centrale PAX. Questa contiene una voce per ciascun file/cartella compresso nell'archivio, archiviando il percorso completo, gli attributi, le dimensioni, gli offset dei blocchi e gli hash. Avere tutto questo in un unico posto consente di elencare in modo efficiente il contenuto dell'archivio e di accedere in modo casuale ai singoli file senza dover eseguire la scansione dei dati compressi.
La maggior parte di un archivio PAX è una serie di blocchi di dati compressi. Ogni blocco ha una piccola intestazione che indica la dimensione non compressa e compressa, seguita da un frammento di dati del file compresso con l'algoritmo configurato. I blocchi hanno una dimensione predefinita di 1 MB, ma questa può essere regolata nell'intestazione dell'archivio.
I blocchi di dati compressi vengono crittografati facoltativamente se viene specificato un metodo di crittografia. PAX supporta schemi di crittografia moderni come AES-256. La password dell'archivio viene utilizzata per derivare una chiave che crittografa ciascun blocco in modo indipendente, consentendo un accesso casuale efficiente. Per l'autenticazione, PAX esegue l'hash delle password con un KDF sicuro.
Per la compressione, PAX supporta una varietà di codec moderni per uso generico ottimizzati per una decompressione rapida: LZMA, LZ4, Brotli, Zstandard, ecc. Consente inoltre preprocessori per un'ulteriore riduzione delle dimensioni su tipi di file specifici (ad esempio, codifica Delta su EXE/DLL, codifica E8E9 su codice x86). I codec e i preprocessori vengono applicati in una pipeline.
Per abilitare una compressione multi-thread efficiente, i file vengono partizionati in blocchi compressi in modo indipendente che possono essere elaborati da istanze di codec parallele. Il compressore PAX si ridimensiona automaticamente per utilizzare tutti i core della CPU disponibili. Una partizione simile consente la decompressione parallela per un'estrazione più rapida.
PAX fornisce integrità dei dati e rilevamento delle manomissioni archiviando gli hash dei dati originali e compressi. Gli archivi trasportano un hash dell'intestazione per rilevare il troncamento. Anche la directory centrale viene sottoposta ad hash per evitare manomissioni dei metadati del file. Il bit rot nei dati compressi viene rilevato eseguendo l'hash di ciascun blocco.
Alla fine di un archivio PAX c'è il piè di pagina. Questo contiene una copia dei campi dell'intestazione, l'offset/dimensione della directory centrale e un hash dell'intero archivio. Il piè di pagina ha una dimensione fissa ed è sempre alla fine del file, consentendo una facile individuazione e verifica degli archivi PAX.
Gli archivi PAX possono essere aggiornati in modo efficiente modificando la directory centrale e aggiungendo blocchi di dati modificati, rispetto alla riscrittura di interi archivi come ZIP. È possibile inserire, rimuovere o sostituire interi file aggiornando i metadati e aggiungendo/rimuovendo i blocchi pertinenti. Anche gli archivi possono essere aggiunti rapidamente.
Per mitigare le vulnerabilità zip-slip, PAX richiede percorsi espliciti (nessun attraversamento ../) e impedisce la scrittura al di fuori della radice di estrazione. I lunghi campi di metadati ZIP che hanno consentito il denial-of-service sono limitati. Le compression bomb vengono mitigate tramite limiti al rapporto di compressione e all'utilizzo della memoria.
Le timestamp dei file negli archivi PAX utilizzano un formato standard a 64 bit che copre un'ampia gamma di date con una precisione di 1 secondo. Sono supportati gli attributi per le autorizzazioni POSIX e gli ACL di Windows. PAX può archiviare flussi di dati alternativi NTFS e fork di risorse. Sono rappresentabili anche i collegamenti simbolici e i collegamenti fisici.
L'SDK PAX open source fornisce semplici API per creare, estrarre, aggiornare e verificare gli archivi PAX a livello di programmazione. Gestisce tutti i dettagli di basso livello del formato PAX. L'SDK è disponibile in più linguaggi, tra cui C, C++, C#, Java, Python, JavaScript, Go e Rust.
In sintesi, il formato di archivio PAX si basa sulle fondamenta di formati collaudati come ZIP, introducendo al contempo funzionalità e ottimizzazioni moderne: compressione efficiente, multi-threading, accesso casuale, sicurezza e una specifica aperta. Ciò rende PAX ideale per un'ampia gamma di scenari di archiviazione sui sistemi odierni.
La compressione dei file è un processo che riduce la dimensione dei file di dati per un efficiente stoccaggio o trasmissione. Utilizza vari algoritmi per condensare i dati identificando ed eliminando la ridondanza, che spesso può ridurre notevolmente la dimensione dei dati senza perdere le informazioni originali.
Ci sono due tipi principali di compressione dei file: lossless e lossy. La compressione lossless permette di ricostruire perfettamente i dati originali dai dati compressi, che è l'ideale per i file dove ogni bit di dati è importante, come i file di testo o i file di database. Esempi comuni includono i formati di file ZIP e RAR. D'altro canto, la compressione lossy elimina i dati meno importanti per ridurre in modo più significativo la dimensione del file, spesso utilizzato in file audio, video e immagini. JPEG e MP3 sono esempi in cui una certa perdita di dati non degrada sostanzialmente la qualità percettiva del contenuto.
La compressione dei file è vantaggiosa in molteplici modi. Conserva lo spazio di stoccaggio sui dispositivi e sui server, abbassando i costi e migliorando l'efficienza. Inoltre, velocizza i tempi di trasferimento dei file su reti, inclusa internet, che è particolarmente prezioso per file di grandi dimensioni. Inoltre, i file compressi possono essere raggruppati in un unico file di archivio, agevolando l'organizzazione e il trasporto più facile di file multipli.
Tuttavia, la compressione dei file ha alcuni svantaggi. Il processo di compressione e decompressione richiede risorse computazionali, che potrebbero rallentare le prestazioni del sistema, in particolare per i file di dimensioni maggiori. Inoltre, nel caso della compressione lossy, alcuni dati originali vengono persi durante la compressione, e la qualità risultante potrebbe non essere accettabile per tutti gli usi, in particolare per applicazioni professionali che richiedono alta qualità.
La compressione dei file è uno strumento fondamentale nel mondo digitale di oggi. Migliora l'efficienza, risparmia spazio di stoccaggio e riduce i tempi di download e upload. Tuttavia, presenta la propria serie di svantaggi in termini di prestazioni del sistema e rischio di degradazione della qualità. Pertanto, è essenziale tenere a mente questi fattori per scegliere la giusta tecnica di compressione per esigenze di dati specifiche.
La compressione dei file è un processo che riduce le dimensioni di un file o di più file, tipicamente per risparmiare spazio di archiviazione o accelerare la trasmissione su una rete.
La compressione dei file funziona identificando e rimuovendo la ridondanza nei dati. Utilizza algoritmi per codificare i dati originali in uno spazio minore.
I due principali tipi di compressione dei file sono la compressione lossless e la compressione lossy. La compressione lossless permette di ripristinare perfettamente il file originale, mentre la compressione lossy permette una riduzione di dimensioni più significativa a costo di una certa perdita nella qualità dei dati.
Un esempio popolare di uno strumento di compressione dei file è WinZip, che supporta più formati di compressione tra cui ZIP e RAR.
Con la compressione lossless, la qualità rimane inalterata. Tuttavia, con la compressione lossy, può esserci una diminuzione notevole della qualità poiché elimina dati meno importanti per ridurre più significativamente la dimensione del file.
Sì, la compressione dei file è sicura in termini di integrità dei dati, specialmente con la compressione lossless. Tuttavia, come qualsiasi file, i file compressi possono essere presi di mira da malware o virus, quindi è sempre importante avere in atto un software di sicurezza affidabile.
Quasi tutti i tipi di file possono essere compressi, inclusi file di testo, immagini, audio, video e software. Tuttavia, il livello di compressione ottenibile può variare significativamente tra i tipi di file.
Un file ZIP è un tipo di formato di file che utilizza la compressione lossless per ridurre le dimensioni di uno o più file. Più file in un file ZIP sono effettivamente raggruppati insieme in un unico file, il che facilita anche la condivisione.
Tecnicamente, sì, anche se la riduzione aggiuntiva delle dimensioni potrebbe essere minima o addirittura controproducente. Comprimere un file già compresso potrebbe a volte aumentare le sue dimensioni a causa dei metadati aggiunti dall'algoritmo di compressione.
Per decomprimere un file, di solito hai bisogno di uno strumento di decompressione o di decompressione, come WinZip o 7-Zip. Questi strumenti possono estrarre i file originali dal formato compresso.