web-dev-qa-db-fra.com

Le chiffrement en couches est-il plus sûr que les mots de passe longs?

Les commentaires dans cette question débattent de la sécurité supplémentaire du chiffrement multicouche. Il semble y avoir un certain désaccord et j'ai pensé qu'une bonne question serait utile ici.

Par conséquent, pour fournir un contexte commun, envisagez les deux scénarios suivants:

  1. J'applique un cryptage symétrique à un fichier donné, comme suit:

    gpg --symmetric --cipher-algo AES256 my_file.txt
    

    auquel j'ajoute le mot de passe "mydogisamazing"

  2. J'applique quatre couches de cryptage à un fichier donné, comme suit:

    gpg --symmetric --cipher-algo AES256 my_file.txt
    gpg --symmetric --cipher-algo AES256 my_file.txt.gpg
    gpg --symmetric --cipher-algo AES256 my_file.txt.gpg.gpg
    gpg --symmetric --cipher-algo AES256 my_file.txt.gpg.gpg.gpg
    

    où les mots de passe fournis à chacun sont respectivement: "incroyable" "est" "chien" "mon" (donc, quand je décrypte toutes les couches, j'ai entré "mon" "chien" "est" "incroyable")

L'option 2 est-elle plus sûre que l'option 1? Ne sachant presque rien de la sécurité du cryptage, il me semble que c'est le cas, car toute personne souhaitant s'introduire devrait exécuter un algorithme de mot de passe quatre fois, alors que dans l'option 1, l'algorithme doit être exécuté une seule fois. Et si différent chiper-algo ont été utilisés à la place des mêmes?

Dans l'ensemble, il me semble également évident que la réponse dépend de la nature des mots de passe. Par exemple, si j'ai 15 couches de cryptage et que le mot de passe de chaque couche n'est qu'une lettre, il semble "trivial" de casser le code.

[~ # ~] mise à jour [~ # ~] : en réponse à un commentaire, je souligne que l'exemple ci-dessus essayait de présenter un "équivalent" apparent "cas, c'est-à-dire" mots de passe plus courts + plus de couches "contre" mots de passe plus longs + moins de couches ". Il me semble évident (peut-être faux) que l'ajout de couches de complexité identique ne fera qu'augmenter la sécurité du chiffrement (dans le simple sens de prendre plus de temps pour pirater les mots de passe). D'où mon accent sur la longueur variable des mots de passe.

43
luchonacho

L'option 1 est plus sécurisée. Dans l'option 2, nous pouvons deviner chaque mot séparément. Lorsque nous devinons "étonnant", nous obtenons la confirmation que ce mot est correct et nous pouvons passer au deuxième mot. Dans l'option 1, nous devons deviner les quatre mots en même temps.

Vous pouvez penser qu'un GPG offre une certaine sécurité, et quatre GPG offrent quatre fois cette sécurité, mais cela ne fonctionne pas comme ça. GPG offre une sécurité quasi totale, et l'appliquer plusieurs fois n'améliore pas la sécurité.

Il existe des utilisations pour appliquer le chiffrement plusieurs fois, par exemple lors de la signature et du chiffrement, ou lors du chiffrement pour plusieurs parties. Cependant, chiffrer plusieurs fois les choses ne les rend pas en général plus sûres.

107
Sjoerd

Cela n'ajoute pas de sécurité, mais permet de deviner plus facilement la phrase secrète un mot à la fois (N⁴ contre. N+N+N+N, où N est le nombre de symboles de la liste de mots). Même lorsque vous cryptez un fichier ou un message à plusieurs destinataires à l'aide de PGP, la charge utile n'est cryptée qu'une seule fois à l'aide du cryptage symétrique, puis la clé correspondant est cryptée séparément pour chaque destinataire. De cette façon, chaque destinataire a un accès égal à la charge utile sans multiplier la taille du message.

Votre suggestion d'utiliser le chiffrement en couches peut être utile dans quelques scénarios, mais toutes les phrases secrètes doivent être solides en elles-mêmes.

  • Vous devez envoyer un fichier à quelqu'un en utilisant un cryptage symétrique, mais vous n'avez pas de canal pour l'échange de clés fiable. Vous pouvez envoyer la phrase secrète pour une couche en utilisant le courrier électronique, pour la deuxième couche en utilisant SMS et pour la troisième couche en utilisant le courrier. Tout cela pourrait être volé, mais il est beaucoup plus difficile de les voler tous.

  • Vous avez des informations pour un groupe de personnes que vous ne pouvez pas rencontrer, mais personne ne devrait le savoir avant les autres. Vous leur envoyez tout le fichier crypté contenant les informations, mais un mot de passe différent pour chacun. Maintenant, ils doivent être ensemble pour révéler le contenu. C'est une bonne façon de laisser l'héritage en tant que portefeuille Bitcoin!

  • Dans routage Oignon c'est-à-dire le réseau Tor, le message est enveloppé dans plusieurs couches de cryptage. Chaque routeur intermédiaire a une clé pour déchiffrer une couche - tout comme éplucher un oignon. Un nœud qui achemine le paquet ne sait pas combien de couches il y avait avant et combien il en reste. Il ne sait même pas où le transférer avant de décrypter sa propre couche. Au lieu de mots de passe, le réseau Tor utilise des clés asymétriques, le nœud d'annuaire fournissant infrastructure à clé publique.

29
Esa Jokinen

Imaginez un film hollywoodien où ils déchiffrent un mot de passe ou un code de sécurité, avec tous les chiffres qui tournent sur une interface utilisateur sophistiquée, et ils ont des pirates Elite qui déchirent un chiffre du code à la fois, et les bons doivent travailler pour faire exploser l'ordinateur des pirates ou quelque chose avant de casser ce dernier chiffre. Bien sûr, dans la vraie vie, ce n'est pas comme ça - pour un système raisonnablement sécurisé, vous savez essentiellement que vous avez le bon mot de passe, ou vous savez que vous n'avez pas le bon mot de passe - il n'y a aucun moyen de voir si un le mot de passe est en quelque sorte "fermé".

Ce que vous avez suggéré, c'est que votre système de sécurité fonctionne comme ceux d'Hollywood. Un attaquant pourrait exécuter une attaque de dictionnaire triviale sur votre cryptage et savoir qu'il a réussi à décrypter immédiatement la première couche. Ils pourraient alors simplement répéter cette opération quatre fois pour récupérer le fichier. En comparaison, exécuter une attaque de dictionnaire triviale ne découvrirait pas votre mot de passe "mydogisamazing", et il n'y aurait absolument aucune indication lorsque le mot "my" est apparu dans leur attaque que c'était "proche" du mot de passe final.

19
Muzer

Une autre perspective de ce que les autres ont dit (que deviner des mots simples 4 fois est beaucoup moins cher que de deviner une combinaison de 4 mots à la fois):

En cryptographie, il y a le concept d'avoir des algorithmes complètement ouverts et des secrets complètement fermés. Tant que le secret reste (sic!) Secret, peu importe que l'attaquant soit au courant de l'algorithme. C'est l'opposé de la "sécurité par l'obscurité", et c'est bien. Cela signifie que vous pouvez mettre l'algorithme à l'examen du monde entier (littéralement, dans un schéma populaire comme AES) sans rien compromettre.

L'algorithme "juste" doit être non craquable; vous devez vous convaincre qu'il n'y a ni moyen algorithmique ni force brute pour le casser. Si vous pouvez arriver à cette conclusion, alors vous avez terminé et vous n'avez qu'à vous soucier de votre secret. Vous et moi ne pouvons probablement pas analyser AES dans cette mesure, mais nous pouvons décider que le fait d'avoir un algorithme ouvert/public avec une grande exposition à de nombreux cryptanalystes vraisemblablement "bons" le rend suffisamment sûr pour nous.

Donc. Supposons que vous ayez un tel algorithme. Par définition, une fois que vous avez un mot de passe sûr, il est à 100%, parfaitement sûr (jusqu'à ce que quelqu'un découvre une fissure dans l'algorithme ou crée un ordinateur assez rapidement - ce qui arrive, bien sûr, régulièrement, par exemple, MD5).

N'importe quoi ce que vous ferez ensuite avec l'algorithme aurait besoin très d'une inspection approfondie par une grande communauté de cryptologues. L'algorithme que vous proposez de "répéter 4 fois AES" est une toute nouvelle chose. Jetez-le à la communauté (comme vous l'avez fait ici) et les gens trouveront immédiatement des faiblesses. C'est pourquoi vous (en tant que profane, ou en tant que programmeur isolé dans une entreprise) ne vous trompez pas avec l'algorithme, et ne vous préoccupez jamais de la sécurité par l'obscurité.

Dans ce cas particulier: si appliquer 4 fois AES augmenterait la sécurité, alors AES le ferait déjà. Ce serait tel un changement trivial par rapport à la complexité du champ.

16
AnoE

Un contrepoint mineur aux autres réponses: Plus de couches sont techniquement mieux que moins si et seulement si chaque couche individuelle est au moins aussi sûre que la couche combinée que vous pourrait autrement faire de la combinaison des mots de passe utilisés pour chaque couche individuelle. Dans votre exemple, vous avez utilisé un algorithme de chiffrement AES256. Fondamentalement, cela signifie que peu importe la complexité de votre mot de passe, vous avez au plus 256 bits de sécurité (peu importe que 256 bits de sécurité sont effectivement incassables sans interruption majeure d'AES, nous prétendrons qu'il est cassable à un certain niveau).

Par conséquent, tous les bits d'entropie de mot de passe au-delà de 256 sont gaspillés; si le mot de passe est trop complexe, ils peuvent simplement forcer la clé AES directement et ignorer complètement la dérivation de la clé basée sur le mot de passe. Donc, si vous avez atteint la sécurité maximale dont cette couche peut bénéficier, en théorie, faire une autre couche avec le reste du mot de passe serait "plus sûr".

Problèmes avec cela dans la pratique:

  1. Vous (le "tout le monde dans le monde" vous) êtes mauvais pour trouver des mots de passe
  2. Même lorsque vous trouvez un mot de passe décent, il n'a nulle part près de 256 bits d'entropie (ou vous allez l'oublier)
  3. AES256 est considéré comme incassable à toutes fins pratiques, donc une couche de cryptage avec un mot de passe suffisamment complexe est déjà incassable; une deuxième couche ne fait que monter le score. Si quelqu'un est capable de casser une couche, c'est probablement parce qu'une faiblesse fondamentale a été identifiée qui rend la rupture de deux couches tout aussi facile.

Alors bien sûr, il est théoriquement plus sûr de dire, crypter une fois avec le mot de passe Pi}t)HawiFo_%-p)R)dxbcpsUA;pyaCQXOXc7?o? Puis à nouveau avec le mot de passe >YPou2Lg1B8be!g#Lgfor;G;H*$xzbX74fuw_yw3, Chacun ayant 256 bits d'entropie (généré en Python avec base64.b85encode(os.urandom(256 // 8))) plutôt que de chiffrer une fois avec le mot de passe combiné Pi}t)HawiFo_%-p)R)dxbcpsUA;pyaCQXOXc7?o?>YPou2Lg1B8be!g#Lgfor;G;H*$xzbX74fuw_yw3 Qui a 512 bits d'entropie, mais ne produit toujours que 256 bits de protection (puisque la clé AES256 reste attaquable Mais comme l'avantage net de le faire n'est qu'additif, tout ce que vous faites est d'augmenter le travail d'attaque de 256 bits de travail pour une couche à 257 bits de travail pour deux (ou 258 bits pour quatre). sentir plus sûr, mais dans la pratique, vous gaspillez simplement des ressources sur les couches supplémentaires qui ne vous protègent pas vraiment.

La seule raison de considérer cela est que si vous êtes suffisamment conscient de la sécurité/paranoïaque pour ne pas faire confiance à AES256 ou GPG seul. Dans ce cas, vous pourriez-vous envisager d'utiliser ces deux énormes mots de passe pour créer deux couches, dont l'une utilise AES256, tandis que l'autre utilise un autre algorithme de chiffrement ou un logiciel de chiffrement distinct. Maintenant, s'il s'avère qu'il y a une énorme faiblesse dans le schéma de cryptage utilisé par l'une des couches, la couche supplémentaire est significative. Mais si AES256 est cassé, il y a probablement beaucoup plus de choses intéressantes à déchiffrer, donc je ne m'inquièterais pas trop.

TL; DR: Une couche avec un mot de passe plus complexe est presque toujours meilleure que plusieurs couches avec un mot de passe moins complexe; les rares exceptions ont principalement des avantages théoriques qui ne se produisent presque jamais dans la pratique, alors utilisez simplement votre mot de passe plus complexe sur un couche unique.

9
ShadowRanger

Toute personne souhaitant s'introduire devrait exécuter un algorithme de mot de passe quatre fois, alors que dans l'option 1, l'algorithme doit être exécuté une seule fois.

Et vous semblez penser que la première option prendrait beaucoup plus de temps, non? Voyons voir.

  • Supposons qu'un utilitaire de craquage de mot de passe prenne 1 ms pour tester chaque combinaison unique de caractères.
  • La longueur de mydogisamazing est de 14 caractères. Le nombre total de combinaisons de 14 lettres minuscules est de 26 ^ 14 = 64 509 974 703 297 150 976 combinaisons. Donc, 64,509,974,703,297,150,976 ms pour les tester tous.
  • Les longueurs de my, dog, is et amazing sont respectivement de 2, 3, 2 et 7 caractères. Le nombre total de combinaisons de 2, 3 et 7 lettres minuscules est de 26 ^ 2 (676), 26 ^ 3 (17 576) et 26 ^ 7 (8 031 810 176). C'est 8 031 829 104 ms pour essayer chacun d'entre eux.

Donc, cracker tous 4 mots de passe plus courts prendrait environ 93 JOURS, alors que cracker juste le mot de passe long prendrait plus de 2 MILLIARDS D'ANNÉES).

J'ai essayé de rester simple. J'utilise uniquement des lettres minuscules; en supposant le pire des cas comme si le mot de passe était zzzzzzzzzzzzzz; ignorer les attaques par dictionnaire et par règles, le traitement parallèle et basé sur GPU, et les outils distribués; ignorer le temps qu'il faut pour tester des combinaisons plus courtes avant de plus longues, etc. Dans la vie réelle ™, les mots de passe d'un mot seraient craqués presque instantanément car ils utilisent des mots courants.

5
walen

Il y a (au moins) deux exemples historiques de la façon dont cette méthode est cassée: Pendant la Seconde Guerre mondiale, les Allemands ont développé une version plus sûre de la machine Enigma, avec quatre roues au lieu de trois. Ce qui aurait dû faire passer le temps de crackage d'un jour (mauvais) à environ un mois (inutile).

Malheureusement, ils ont utilisé les mêmes réglages pour les trois premières roues de la machine à quatre roues que pour la machine à trois roues ordinaire. Ainsi, lorsque la machine à trois roues a été fissurée, le cracker n'a eu qu'à vérifier 26 réglages possibles pour la quatrième roue. Aucune augmentation significative de la sécurité.

Et le schéma de cryptage DVD 40 bits s'est avéré être composé d'une clé de 25 bits et d'une clé de 16 bits. La clé de 40 bits était à l'époque presque impossible à casser, mais les clés de 25 et 16 bits pouvaient chacune être fissurées en un temps très raisonnable.

2
gnasher729