Si nous voulons à la fois le chiffrement et la compression pendant la transmission, alors quel sera l'ordre le plus préférable.
Vous devez compresser avant de crypter.
Le chiffrement transforme vos données en données à haute entropie, généralement indiscernables d'un flux aléatoire. La compression repose sur des motifs afin d'obtenir une réduction de taille. Étant donné que le chiffrement détruit de tels modèles, l'algorithme de compression ne pourrait pas vous donner une réduction de taille importante (le cas échéant) si vous l'appliquez aux données chiffrées.
La compression avant le chiffrement augmente également légèrement votre résistance pratique contre la cryptanalyse différentielle (et certaines autres attaques) si l'attaquant ne peut contrôler que le texte en clair non compressé, car la sortie résultante peut être difficile à déduire.
EDIT: J'édite cette année plus tard car ce conseil est en fait médiocre dans un cas interactif. Vous ne devez pas compresser les données avant de les crypter dans la plupart des cas. Une méthode d'attaque latérale appelée "Oracle de compression" peut être utilisée pour déduire des données en clair dans les cas où l'attaquant peut provoquer de manière interactive le placement de chaînes dans un flux de données en texte brut autrement inconnu. Les attaques sur SSL/TLS telles que CRIME et BREACH en sont des exemples.
Si vous compressez après le cryptage et que la compression fait du bien (c'est-à-dire qu'elle réduit vraiment la longueur d'une quantité non négligeable), alors vous pouvez abandonner le cryptage, il est terriblement faible. Le texte crypté ne doit pas être distingué du hasard; même les données mal cryptées ne peuvent généralement pas être compressées.
Par conséquent, compressez avant le chiffrement. C'est pourquoi les protocoles qui traitent du chiffrement incluent généralement une prise en charge de la compression, par exemple OpenPGP (section 5.6) et SSL/TLS . Dans certains scénarios, la compression peut divulguer des informations sur les données confidentielles (car la compression réduit la longueur en fonction des données , et la longueur chiffrée correspond plus ou moins à la longueur du texte en clair); c'est l'idée derrière le nouveau attaque CRIME sur SSL/TLS .
Exception marginale: si vous cryptez un message avec OpenPGP puis "armure ACSII" le résultat, c'est-à-dire le coder en Base64, alors ce codage agrandit les données de 34%: 3 octets deviennent 4 caractères (plus la nouvelle ligne impaire). La compression avec DÉGONFLER sera efficace pour annuler cet agrandissement (grâce aux codes Huffman). C'est un cas d'utilité de la compression après cryptage - mais, en réalité, c'est plus de compression sur Base64, plutôt que de compression sur cryptage.
Je recommanderais d'abord de compresser les données et de les crypter.
L'algorithme de compression pourrait bénéficier de la connaissance de la structure des données et cette structure serait masquée par le chiffrement. Un exemple serait le mp3 qui ne peut compresser que des données sonores.
il faudrait crypter moins de données. Alors que lorsque vous cryptez puis compressez pour la première fois, vous n'accélérez pas.
Ni: Compressez pendant le chiffrement avec un outil de chiffrement conçu pour faire les deux en toute sécurité , comme GPG/OpenPGP .
C'est essentiellement réponse de Thomas Pornin juste plus direct, donc les lecteurs pressés ne se méprennent pas sur les subtilités de ce que Thomas Pornin explique dans sa réponse. La question exprime une fausse dichotomie. Si l'OP (et le lecteur) pense que les première et deuxième étapes sont l'exécution de deux outils différents comme gzip
et gpg
:
Si vous cryptez d'abord, la compression ne fera pas grand-chose, en plus d'exprimer l'inflation de base64 à 34% de "l'armure ASCII" que @ ThomasPornin mentionnée.
Si vous compressez d'abord, le cryptage est moins sécurisé, vulnérable aux attaques comme celles que @ThomasPornin a mentionnées.
La compression après le chiffrement peut ne pas faire la fonction réelle de compression des données car elle ne réduira pas beaucoup la taille. Mais le chiffrement après compression est de taille réduite mais il n'effectuera pas le bon fonctionnement du chiffrement car des attaques comme CRIME peuvent se produire.
Par exemple, dans les requêtes Web, les en-têtes contiennent des cookies Web secrets. Par conséquent, la compression des en-têtes avant le chiffrement révèlera ces informations secrètes à l'extérieur.
Par conséquent, il est sage de faire une compression sélective qui comprime uniquement les données non secrètes de la page, puis le cryptage aura un sens et empêchera l'extraction d'informations secrètes.