AES vs Blowfish pour le cryptage de fichiers

107

Je souhaite crypter un fichier binaire. Mon objectif est d'empêcher quiconque de lire le fichier sans le mot de passe.

Quelle est la meilleure solution, AES ou Blowfish avec la même longueur de clé? On peut supposer que l'attaquant dispose de grandes ressources (logiciels, connaissances, argent) pour cracker le fichier.

mimrock
la source
4
Blowfish a plus de dix ans, je pense que vous voulez dire aes vs twofish ...
rook
Vous avez raison, j'aurais pu demander cela. Heureusement, Jerry a résumé le sujet très bien pour moi.
mimrock
@Rook Plus il est ancien, mieux c'est la règle de base pour les algorithmes de sécurité. Les nouveaux algorithmes s'adressent aux personnes, plus soucieuses de la performance que de la sécurité.
ceving

Réponses:

188

Probablement AES. Blowfish était le prédécesseur direct de Twofish. Twofish était l'entrée de Bruce Schneier dans la compétition qui a produit AES. Il a été jugé inférieur à une entrée nommée Rijndael, qui est devenue AES.

Point intéressant: à un moment donné du concours, tous les participants ont été invités à donner leur avis sur le classement des chiffrements. Il n'est probablement pas surprenant que chaque équipe ait choisi sa propre entrée comme la meilleure - mais toutes les autres équipes ont choisi Rijndael comme deuxième meilleur.

Cela dit, il existe des différences fondamentales dans les objectifs de base de Blowfish par rapport à AES qui peuvent (sans doute) favoriser Blowfish en termes de sécurité absolue. En particulier, Blowfish tente de rendre difficile une attaque par force brute (épuisement des touches) en faisant de la configuration initiale des clés une opération assez lente. Pour un utilisateur normal, cela n'a que peu de conséquences (c'est toujours moins d'une milliseconde) mais si vous essayez des millions de clés par seconde pour le casser, la différence est assez substantielle.

En fin de compte, je ne vois cependant pas cela comme un avantage majeur. Je recommande généralement AES. Mes prochains choix seraient probablement Serpent, MARS et Twofish dans cet ordre. Blowfish viendrait quelque part après ceux-ci (bien qu'il y en ait quelques autres que je recommanderais probablement avant Blowfish).

Jerry Coffin
la source
11
Je pense que d'autres algorithmes étaient considérés comme plus sûrs que Rijndael, mais il offrait de très bonnes performances alors que sa sécurité était jugée assez bonne. La conception d'un algorithme de chiffrement est toujours un compromis entre sécurité et performances.
CodesInChaos
10
@CodeInChaos: Selon votre point de vue, c'est au moins un peu vrai - Serpent était probablement la conception la plus conservatrice. En particulier, ils ont pensé qu'une version à 16 coups serait suffisante - ils ont donc doublé cela à 32 coups. La meilleure attaque connue actuellement n'est efficace que contre 11 rounds. Si la question originale n'avait pas spécifiquement limité les choix à AES et Blowfish, et demandait simplement le chiffrement le plus sûr et le plus connu, j'aurais probablement dit Serpent ...
Jerry Coffin
De plus, cet «aparté intéressant» est apparu dans plusieurs questions et sources lors de mes études pour mon examen CompTIA Security +. Les petites choses ne sont peut-être pas si inutiles après tout!
Everlight
Blowfishest le plus rapide
user924
23

Il n'est pas souvent reconnu que la taille de bloc d'un chiffrement par bloc est également une considération de sécurité importante (bien que loin d'être aussi importante que la taille de la clé).

Blowfish (et la plupart des autres chiffrements par blocs de la même époque, comme 3DES et IDEA) ont une taille de bloc de 64 bits, ce qui est considéré comme insuffisant pour les fichiers de grande taille qui sont courants de nos jours (plus le fichier est volumineux et plus la taille du bloc est petite. , plus la probabilité d'un bloc répété dans le texte chiffré est élevée - et ces blocs répétés sont extrêmement utiles en cryptanalyse).

AES, en revanche, a une taille de bloc de 128 bits. Cette seule considération justifie l'utilisation d'AES au lieu de Blowfish.

caf
la source
2
L'avantage d'une taille de bloc de 64 bits est qu'elle facilite le dépôt du nouvel algorithme dans une ancienne application en remplacement de (3-) DES.
dajames
La taille des blocs est un argument intéressant. J'ai écrit, il y a plusieurs mois, un article qui théorise que la taille de bloc de tout chiffrement symétrique peut être étendue à n'importe quelle longueur: cubicspot.blogspot.com/2013/02
...
16

En ce qui concerne les algorithmes eux-mêmes, j'irais avec AES, pour la simple raison qu'il a été accepté par le NIST et qu'il sera évalué par les pairs et crypté pendant des années. Cependant, je suggérerais que dans les applications pratiques, à moins que vous ne stockiez un fichier que le gouvernement souhaite garder secret (auquel cas la NSA vous fournirait probablement un meilleur algorithme que AES et Blowfish), l'utilisation de l'un de ces algorithmes a gagné ça ne fait pas trop de différence. Toute la sécurité doit être dans la clé, et ces deux algorithmes résistent aux attaques par force brute. Blowfish ne s'est montré faible que sur les implémentations qui n'utilisent pas les 16 tours complets. Et bien que AES soit plus récent, cela devrait vous inciter davantage à vous pencher vers BlowFish (si vous ne teniez compte que de l'âge). Pense-y de cette façon,

Voici ce que je vous poserais ... au lieu de regarder ces deux algorithmes et d'essayer de choisir entre l'algorithme, pourquoi ne pas regarder votre schéma de génération de clé. Un attaquant potentiel qui souhaite déchiffrer votre fichier ne restera pas assis là et proposera un ensemble théorique de clés pouvant être utilisées, puis effectuera une attaque par force brute qui peut prendre des mois. Au lieu de cela, il va exploiter autre chose, comme attaquer le matériel de votre serveur, effectuer une ingénierie inverse de votre assemblage pour voir la clé, essayer de trouver un fichier de configuration contenant la clé, ou peut-être faire chanter votre ami pour qu'il copie un fichier depuis votre ordinateur. . Ce seront là où vous serez le plus vulnérable, pas l'algorithme.

nerdybeardo
la source
4
AES a récemment été ajouté à la liste des «chiffrements cassés» sur Wikipédia, mais la pire attaque contre Blowfish est contre quatre maigres rounds et est clairement absente de la liste des chiffrements cassés. Le commentaire de Bruce sur la surprise que les gens utilisent encore Blowfish est ce qui éloigne les développeurs. Cependant, il n'est pas cassé, prend en charge des tailles de clé variables, prend en charge des tailles de clé plus grandes que AES et, du point de vue de la programmation, est facile à implémenter par rapport à la plupart des autres chiffrements par blocs symétriques. Blowfish a survécu à l'épreuve du temps, qui est la plus grande menace pour tout chiffrement symétrique.
CubicleSoft
Je suis d'accord qu'AES est loin d'être cassé. Cependant, dans les 10 prochaines années environ, nous aurons besoin d'une nouvelle norme. De plus, tous les finalistes de l'AES étaient des chiffrements fantastiques. Serpent est en fait considéré par beaucoup comme le plus difficile à casser, mais AES était le plus élégant. (Et oui, si vous regardez comment vous faites le cryptage et le décryptage, c'est définitivement élégant.)
nerdybeardo
8

AES.

(Je suppose aussi que vous voulez dire deux poissons pas le poisson-globe beaucoup plus vieux et plus faible)

Les deux (AES et twofish) sont de bons algorithmes. Cependant, même s'ils étaient égaux ou deux poissons étaient légèrement en avance sur le plan technique, je choisirais TOUJOURS AES.

Pourquoi? Publicité. AES est LA norme pour le cryptage gouvernemental et donc des millions d'autres entités l'utilisent également. Un cryptanalyste talentueux obtient simplement plus "pour son argent" en trouvant une faille dans AES que pour les deux poissons beaucoup moins connus et utilisés.

L'obscurité n'offre aucune protection en matière de cryptage. Plus de corps regardent, étudient, sondent, attaquent un algorithme, c'est toujours mieux. Vous voulez l'algorithme le plus "vérifié" possible et pour l'instant c'est AES. Si un algorithme n'est pas soumis à un examen approfondi et continu, vous devez accorder une confiance moindre à sa force. Bien sûr, deux poissons n'ont pas été compromis. Est-ce à cause de la force du chiffrement ou simplement parce que trop peu de gens ont examiné de près ..... ENCORE

Gerald Davis
la source
5

Le choix de l'algorithme n'a probablement pas beaucoup d'importance. J'utiliserais AES car il a été mieux étudié. Ce qui est beaucoup plus important, c'est de choisir le bon mode de fonctionnement et la fonction de dérivation de clé .

Vous voudrez peut-être jeter un œil à la spécification du format TrueCrypt pour vous inspirer si vous voulez un accès aléatoire rapide. Si vous n'avez pas besoin d'un accès aléatoire, XTS n'est pas le mode optimal, car il présente des faiblesses, d'autres modes n'en ont pas. Et vous pouvez également ajouter une sorte de vérification d'intégrité (ou un code d'authentification de message).

CodesInChaos
la source
1
Absolument - il est extrêmement important d'utiliser une bonne fonction de dérivation de clé, telle que PBKDF2.
caf
3

Je sais que cette réponse viole les termes de votre question, mais je pense que la bonne réponse à votre intention est simplement la suivante: utilisez l'algorithme qui vous permet la longueur de clé la plus longue, puis assurez-vous de choisir une très bonne clé. Des différences mineures dans les performances de la plupart des algorithmes bien considérés (cryptographiquement et chronologiquement) sont submergées par quelques bits supplémentaires d'une clé.

Mike Jones
la source
7
Je ne peux pas être d'accord. Le chiffrement Lucifer d'IBM (prédécesseur de DES) utilisé comme clé de 128 bits - mais DES (avec seulement une clé de 56 bits) s'est avéré beaucoup plus sûr une fois que la cryptanalyse différentielle a été (re) découverte.
Jerry Coffin
3
Le simple fait de regarder la longueur de clé est une métrique très médiocre.
Gerald Davis
2
C'est pourquoi j'ai dit "les algorithmes les plus appréciés". Si vous considérez Blowfish 128 bits comme inférieur à AES 128 bits, vous devez accepter que Blowfish 256 bits souffle AES 128 bits hors de l'eau. De même, la génération et la gestion des clés sont tout aussi importantes. Si votre clé est "mot de passe", l'algorithme que vous utilisez n'a pas vraiment d'importance. Ce que je dis, c'est que le PO ne regarde probablement pas la bonne chose.
Mike Jones
2
Il est indiqué dans la question que les clés seront dérivées des mots de passe. Briser le système en forçant brutalement le mot de passe est probablement beaucoup plus facile que d'attaquer l'un des algorithmes mentionnés ici. Keylength est presque entièrement irréversible lorsque la clé est dérivée d'un mot de passe.
dajames
Vous notez ma réponse, malgré le fait que vous dites exactement la même chose que moi? J'ai dit la longueur de la clé et j'ai choisi une très bonne clé. Selon quelle définition de «bon» considéreriez-vous une clé comme bonne si elle ne remplissait pas tous les bits de la clé?
Mike Jones
3

Les deux algorithmes (AES et twofish) sont considérés comme très sûrs. Cela a été largement couvert dans d'autres réponses.

Cependant, comme AES est très largement utilisé maintenant en 2016, il a été spécifiquement accéléré par le matériel sur plusieurs plates-formes telles que ARM et x86. Bien qu'il ne soit pas beaucoup plus rapide que deux fois avant l'accélération matérielle, AES est maintenant beaucoup plus rapide grâce aux instructions CPU dédiées.

galinette
la source