web-dev-qa-db-fra.com

Quel est le modèle mathématique derrière les revendications de sécurité des chiffres symétriques et des algorithmes de Digest?

Pourquoi SHA-1 peut-il être considéré comme une fonction de hachage sécurisée? C'est quelque chose que je m'interroge toujours.

Je comprends les concepts de pourquoi les algorithmes asymétriques modernes sont réputés être sécurisés. Ils sont fondés sur des problèmes mathématiques sains qui sont prudemment "difficiles" à résoudre, par exemple. logarithmes discrets dans des champs finis ou une factorisation entière. Les concepts de revendications de sécurité et de preuves sont relativement faciles à suivre si l'on est au courant des concepts mathématiques.

Mais en ce qui concerne la cryptographie symétrique et la sécurisation des fonctions de hachage, l'image devient beaucoup moins claire. Je comprends qu'il existe de nombreux résultats et analyses pour des chiffres à blocs et des algorithmes de digestion, mais quels sont ces résultats fondés?

Par exemple. Lorsqu'il s'agit de bloquer les chiffres, vous pouvez trouver de nombreuses preuves que l'algorithme de chiffrement X est résistant à un certain nombre de attaques connues . Ou ils prouvent que certains biens détiennent, par ex. Chaque partie de l'entrée affecte la sortie, car cela est jugé nécessaire, etc., etc.

De l'extérieur, la construction d'algorithmes de chiffrement et de digesthes ressemble à "essayer de violer et de gâcher avec l'entrée autant que possible" en appliquant des changements de bits, XORS et ainsi de suite.

Ce que j'aimerais savoir maintenant (je serais reconnaissant d'avoir une perspicacité plus profonde dans l'une des):

a) Pourriez-vous me fournir des indications sur les ressources (livres préférées) qui expliquent la conception et la sécurité des considérations qu'il faut prendre en compte lors de la construction d'un

a1) Algorithme de chiffrement

a2) Digestez l'algorithme

cela expliquerait des choses telles que pour la raison pour laquelle une boîte en S doit regarder exactement la façon dont elle le fait au lieu d'une autre manière et probablement encore plus importante pour moi et ma compréhension pourquoi Ce serait mauvais s'il était construit différemment?

b) Est-ce qu'il existe des tentatives de modélisation de ces "opérations de filetage" mathématiquement (par exemple. Les "attaques algébriques" sont-elles basées sur un tel modèle?)?

c) Comment "mesurer" la qualité d'un algorithme de digesthèse telle que SHA-1? C'est à dire. Comment pouvez-vous dire qu'il est préférable de faire un changement de deux bits ici au lieu de trois ou d'un Xor, et pourquoi ces opérations sont-elles la base de SHA-1 en premier lieu? Parce qu'à l'époque, il semblait que le seul cas connu qui serait "en désordre maximal" avec l'entrée? Je demande parce qu'il semble que la plupart des candidats SHA-3 étaient soit basés sur des algorithmes de chiffrement (car il existe des résultats plus théoriques) ou par ex. sur de nouveaux concepts tels que - Fonctions d'éponge . Pour moi, les définitions de l'un des SHA algorithmes (MD5 aussi) ressemblent encore à "désactionnons-nous, nous allons-nous?" - Mais quel est le raisonnement derrière cela? Pourquoi le faire? ils l'ont fait?

Je serais plus qu'heureux si vous pouviez me donner un aperçu de l'un de ces sujets.

19
emboss

Je ne peux pas vous donner une réponse qui va vous laisser parfaitement satisfait, car il n'y a pas de telles réponses. Comment savons-nous que nos algorithmes sont sécurisés? Strictement parler, nous ne le faisons pas. Nous n'avons aucune preuve que SHA256, ou AES ou RSA est sécurisé - il est largement convaincu qu'ils sont en sécurité, mais je ne pouvais pas vous donner une preuve mathématique de ce fait, et qui sait, il est toujours possible que des croyances généralisées soient tort.

Notre croyance en la sécurité de ces algorithmes provient du fait que beaucoup de personnes très intelligentes et compétentes ont jugé très difficile de briser ces algorithmes, sans faire beaucoup de bosse du tout. Bien sûr, cela ne garantit pas qu'aucune attaque intelligente n'existe - il est toujours possible qu'il y ait une attaque de raccourcis mathématique incroyablement sournoise que personne n'a été assez intelligente pour trouver, mais plus les gens qui essaient de trouver un et échouent, le moins probable que l'apparence. Pour des raisons pratiques, il semble peu probable qu'un attaquant de jardin-variété va découvrir une attaque selon laquelle des dizaines de personnes vraiment intelligentes ont essayé de trouver et ont échoué.

Votre réaction immédiate pourrait être ce que diable? Pourquoi ces cryptographes sont-ils si boiteux? Pourquoi ne peuvent-ils pas prouver que leurs algorithmes sont en sécurité? Sont-ils des numbosskulls? La réponse est que des raisons fondamentales sont très difficiles à prouver qu'un algorithme de cryptage ou une fonction de hash est sécurisé (sauf dans des cas particuliers). À peu près, prouvant qu'un algorithme comme AES ou RSA ou SHA256 est sécurisé semble être au moins aussi difficile comme prouvant que [~ # ~] ! = [~ # ~] np [~ # ~ ~] (un problème de conclusion difficile en informatique). Nous avons très peu d'outils pour prouver qu'une tâche algorithmique peut non être complétée efficacement. À son noyau, c'est ce qui rend difficile de prouver que [~ # ~ # ~ ~ ~ ~] ne peut pas être résolu en temps polynomial (c'est-à-dire difficile à prouver que [~ # ~]] p [~ # ~]! = [~ # ~ ~] np [~ # ~]), et rend difficile de prouver qu'il n'y a pas d'attaque de raccourci sur AES (c'est-à-dire que les AES ne peuvent pas être cassés). Donc, ce n'est pas seulement que les cryptographes sont boiteux, c'est que nous sommes contre des problèmes très difficiles que personne ne sait progresser.

Notez que rien que je n'ai dit ci-dessus n'est spécifique aux fonctions de hachage ou à la cryptographie clé symétrique. Il s'applique à toute cryptographie en cours de calcul, y compris le cryptage à clé symétrique, le cryptage clé-clés, les signatures numériques, les fonctions de hachage et de nombreux autres primitifs standard que nous prenons pour acquis.

Votre dernière question était la suivante: quelqu'un peut-il m'apprendre la théorie de la façon dont les algorithmes de clé symétrique sont analysés et crypté? Comment les cryptographes les analysent-ils? Comment les attaques fonctionnent-elles? Non, je ne peux pas vous enseigner cela dans les contraintes de temps et d'espace ici. Il existe un terrain de recherche entier construit autour de ces questions, avec une littérature intellectuelle sur les techniques d'analyse d'algorithmes de clé symétrique. (Voir, par exemple, le [~ # ~ ~] FSE [~ # ~], [~ # ~ # ~] crypto [~ # ~], et [- [~ # ~] EUROCRYPT [~ # ~] Conférences.) Il faut des années d'études dédiées pour apprendre ce matériau. Malheureusement, je ne peux pas vous apprendre tout cela dans l'espace disponible ici. La version très courte est la suivante: les cryptographes ont développé une grande suite de techniques d'attaque et, comme point de départ, toute nouvelle primitive est d'abord analysée pour voir si l'une de ces attaques fonctionnera. Si la primitive résiste toutes les techniques d'attaque connues, les cryptographes passent du temps à essayer de concevoir des attaques ad-hoc ou personnalisées contre la primitive. Les cryptographes étudient également des versions artificiellement affaiblies de la primitive (par exemple, avec moins de tours), pour en apprendre davantage sur les meilleures attaques de ces versions affaiblies dans une tentative d'extrapoler au complet. Si, après de nombreux efforts personnels, personne ne réussit à attaquer le régime, les gens commencent à gagner plus confiance. Plus récemment, certaines recherches ont également été consacrées à la confiance que la structure de haut niveau est saine ou que toutes les attaques d'une classe particulière sont garanties pour échouer, en utilisant des idées de la communauté de sécurité prouvable.

Mais à la fin de la journée, c'est un art autant qu'une science. Vitting d'une nouvelle primitive est extrêmement coûteux: Il faut des décennies d'efforts de personnalités intensément talentueuses. Pour cette raison, les utilisateurs intelligents de la cryptographie tentent généralement d'utiliser des primitifs existants et vérifiés plutôt que d'inventer leur propre. Si vous inventez votre propre système, il est extrêmement improbable que vous puissiez organiser autant d'analyse et de vérification de votre propre schéma, car les standards ont déjà reçu - alors ne le faites pas. Ne "roule ton propre". Au lieu de cela, développez les primitives existantes, standard, acceptées, telles que AES, SHA256, RSA, etc.

13
D.W.

@ D.W. dit-il bien; Dans des mots plus courts: la seule façon de savoir de juger un algorithme cryptographique consiste à organiser des centaines de cryptographes de ronger pendant quelques années. Ce n'est pas finalement satisfaisant, intellectuellement parlant, mais on peut toujours travailler avec cela (l'ensemble de la médecine, par exemple, est construit sur des terrains même shakiers, mais c'est toujours un art très utile).

Pour les spécificités (c'est-à-dire comment une boîte en S est choisie, qu'est-ce que "effet avalanche", comment étudier des choses avec algèbre ...), voir (comme toujours) le manuel de la cryptographie appliquée , qui commence à être un peu vieux mais toujours une très bonne référence et peut être téléchargée gratuitement. Un autre bon livre est cryptanalyse algorithmique par Antoine Joux.

6
Thomas Pornin

Une de mes questions reste toujours non résolue. Je ne sais toujours pas pourquoi Xor, bit changeant et similaires sont utilisés pour les hachages et les chiffreurs en premier lieu - s'il y a un raisonnement mathématique derrière cela, pourquoi ce sont exactement ces opérations et rien d'autre?

L'une des raisons pour lesquelles exactement XOR est utilisée est que parce que XOR a une propriété importante: réversibilité. Si vous XOR un numéro avec une clé puis XOR le résultat de la même clé, vous obtiendrez votre numéro d'origine.

1
Alibek