89 votes

Compresser et ensuite crypter, ou vice-versa ?

Je suis en train d'écrire un système VPN qui crypte (AES256) son trafic à travers le réseau (Pourquoi écrire le mien alors qu'il y en a déjà 1.000.001 autres ? Eh bien, le mien est spécial pour une tâche spécifique à laquelle aucun des autres ne correspond).

En fait, je veux vous faire part de mes réflexions pour m'assurer que je fais les choses dans le bon ordre.

Pour le moment, les paquets sont simplement cryptés avant d'être envoyés, mais je veux leur ajouter un certain niveau de compression pour optimiser un peu le transfert des données. Il ne s'agit pas d'une compression lourde - je ne veux pas maximiser le CPU tout le temps, mais je veux m'assurer que la compression sera aussi efficace que possible.

Donc, ma pensée est, je devrais compresser les paquets vor le cryptage car un paquet non crypté sera mieux compressé qu'un paquet crypté ? Ou l'inverse ?

Je vais probablement utiliser zlib pour la compression.

Lire la suite sur le blog de Super User .

181voto

Michael Eklöf Points 519

Si le cryptage est fait correctement alors le résultat est fondamentalement des données aléatoires. La plupart des schémas de compression fonctionnent en trouvant des modèles dans vos données qui peuvent d'une certaine manière être pris en compte, et grâce au cryptage, il n'y en a pas ; les données sont complètement incompressibles.

Compressez avant de chiffrer.

22voto

Juancho Points 2582

Compresser avant de crypter. Les données comprimées peuvent varier considérablement pour de petites modifications des données sources, ce qui rend très difficile la cryptanalyse différentielle.

De plus, comme le souligne M. Alpha, si vous cryptez en premier, le résultat est très difficile à compresser.

3voto

Tobias Braun Points 31

Même si cela dépend du cas d'utilisation spécifique, je conseillerais de crypter puis de compresser. Sinon, un attaquant pourrait faire fuir des informations à partir du nombre de blocs chiffrés.

Nous supposons qu'un utilisateur envoie un message au serveur et qu'un attaquant a la possibilité d'ajouter du texte au message de l'utilisateur avant l'envoi (via javascript, par exemple). L'utilisateur veut envoyer des données sensibles au serveur et l'attaquant veut obtenir ces données. Il peut donc essayer d'ajouter différents messages aux données que l'utilisateur envoie au serveur. Ensuite, l'utilisateur compresse son message et le texte ajouté par l'attaquant. Nous supposons une compression DEFLATE LZ77, donc la fonction remplace la même information par un pointeur à la première apparition. Ainsi, si l'attaquant peut reproduire le texte en clair, la fonction de compression réduit la taille du texte en clair à la taille originale et à un pointeur. Et après le cryptage, l'attaquant peut compter le nombre de blocs de chiffrement, afin de voir si les données ajoutées sont les mêmes que celles que l'utilisateur a envoyées au serveur. Même si ce cas semble un peu construit, il s'agit d'un sérieux problème de sécurité dans TLS. Cette idée est utilisée par une attaque appelée CRIME pour faire fuir les cookies dans une connexion TLS afin de voler des sessions.

source : http://www.ekoparty.org/archive/2012/CRIME_ekoparty2012.pdf

2voto

Zamicol Points 191

Selon moi, lorsque vous comprimez un message, vous le projetez dans une dimension inférieure et il y a donc moins de bits, ce qui signifie que le message comprimé (dans l'hypothèse d'une compression sans perte) contient les mêmes informations dans moins de bits (ceux dont vous vous êtes débarrassé étaient redondants !). Vous avez donc plus d'informations par bit et par conséquent plus d'entropie par bit, mais la même entropie totale que celle que vous aviez auparavant lorsque le message n'était pas comprimé. Le caractère aléatoire est une autre affaire et c'est là que les motifs de la compression peuvent jeter un trouble.

1voto

Ankur Goel Points 675

La compression doit être effectuée avant le cryptage. Un utilisateur ne veut pas perdre de temps à attendre le transfert de données, mais il a besoin qu'il soit effectué immédiatement sans perdre de temps.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X