Est-il sûr d'ignorer la possibilité de collisions SHA dans la pratique?

210

Disons que nous avons un milliard d'images uniques, un mégaoctet chacune. Nous calculons le hachage SHA-256 pour le contenu de chaque fichier. La possibilité de collision dépend de:

  • le nombre de fichiers
  • la taille du fichier unique

Jusqu'où pouvons-nous aller en ignorant cette possibilité, en supposant qu'elle est nulle?

Hristo Hristov
la source
1
Cela dépend de la raison pour laquelle vous utilisez les touches de hachage. S'il s'agit d'une sorte d'identification de fichier, une collision peut également signifier que les fichiers sont identiques et vous devez donc également comparer les fichiers en cas de collision. Je dirais qu'il serait assez sûr de comparer simplement les tailles de fichiers.
mojuba
Oui, dans ce cas, si vous comparez la taille des fichiers, la possibilité diminue considérablement. Vous pouvez également utiliser deux algorithmes de hachage et concaténer les résultats. Ensuite, la possibilité d'une collision des deux en même temps diminue davantage. Mais, la question est, combien est «assez» sûr? Nous avons peut-être besoin d'une formule et de chiffres.
Hristo Hristov
2
@Hristo Hristov: si nous supposons que la clé de hachage est un nombre pseudo aléatoire (qui est théoriquement correct), alors un milliard de clés de 128 bits donne une probabilité de collision de 2,9 * 10 ^ -30. Vous ne pouvez même pas l'appeler "minuscule", c'est moins que cela;)
mojuba
3
@mojuba: encore mieux, il pose des questions sur un hachage 256 bits.
Michael Borgwardt du
FWIW: le système de contrôle de version GIT identifie les fichiers par leur contenu SHA.
snemarch

Réponses:

385

La réponse habituelle est la suivante: quelle est la probabilité qu'un astéroïde voyou s'écrase sur Terre dans la seconde qui suit, anéantissant la civilisation telle que nous la connaissons et tuant quelques milliards de personnes? On peut affirmer que tout événement malchanceux avec une probabilité inférieure à celle-ci n'est pas réellement très important.

Si nous avons une fonction de hachage « parfaite » avec la taille de sortie n , et nous avons p messages de hachage (longueur individuelle du message n'a pas d' importance), alors la probabilité de collision est d' environ p 2 /2 n + 1 (ce qui est une approximation qui est valable pour "petit" p , c'est-à-dire sensiblement inférieur à 2 n / 2 ). Par exemple, avec SHA-256 ( n = 256 ) et un milliard de messages ( p = 10 9 ), la probabilité est d'environ 4,3 * 10 -60 .

Une roche spatiale meurtrière se produit environ une fois tous les 30 millions d'années en moyenne. Cela conduit à une probabilité d'un tel événement se produisant dans la prochaine seconde à environ 10 -15 . C'est 45 ordres de grandeur plus probables que la collision SHA-256. En bref, si vous trouvez les collisions SHA-256 effrayantes, vos priorités sont fausses.

Dans une configuration de sécurité, où un attaquant peut choisir les messages qui seront hachés, l'attaquant peut utiliser sensiblement plus d'un milliard de messages; cependant, vous constaterez que la probabilité de succès de l'attaquant sera toujours très faible. C'est tout l'intérêt d'utiliser une fonction de hachage avec une sortie 256 bits: pour que les risques de collision puissent être négligés.

Bien sûr, tout ce qui précède suppose que SHA-256 est une fonction de hachage "parfaite", ce qui est loin d'être prouvé. Pourtant, SHA-256 semble assez robuste.

Thomas Pornin
la source
12
Ceci est une très bonne réponse, merci! Mais si en cas de collision une centrale nucléaire explose, et cela dépend de vous, prendrez-vous ce risque? Si vous avez tout à fait raison, alors nous pouvons prendre le risque, car il est 45 ordres de grandeur plus probable que la civilisation soit détruite. Droite?
Hristo Hristov
46
@Hristo Je pense que oui, on prendrait ce risque. Une centrale nucléaire a déjà beaucoup plus de chances d'exploser en raison d'autres facteurs, comme une défaillance mécanique, une erreur humaine lors de sa construction ou une erreur de l'opérateur lors de son fonctionnement, et nous prenons déjà ces risques. Si les collisions SHA-256 étaient les seules causes d’accidents nucléaires, nous n’en aurions presque certainement eu aucun à ce jour.
Roman Starkov
27
foxnews.com/science/2013/02/11/… Je commencerais à penser à SHA512.
Dustin Oprea
37
Je peux maintenant être tranquille en sachant que je serai probablement anéanti par un astéroïde bien avant de vivre pour subir une collision SHA-256.
AaronLS
10
Désolé, vous manquez le soi-disant "paradoxe d'anniversaire". Regardez mieux la "belle table", ça ne marche pas comme vous le pensez. Pour les chiffres que je donne, dans ce tableau, ce serait une valeur "10 ^ 9" dans une colonne intitulée "4.3 * 10 ^ -60" et une ligne "128 bits" (mais le tableau ne descend pas en dessous de 10 ^ -18 ).
Thomas Pornin
47

La possibilité d'une collision ne dépend pas de la taille des fichiers, seulement de leur nombre.

Ceci est un exemple du paradoxe d'anniversaire . La page Wikipédia donne une estimation de la probabilité d'une collision. Si vous exécutez les chiffres, vous verrez que tous les disques durs jamais produits sur Terre ne peuvent pas contenir suffisamment de fichiers de 1 Mo pour obtenir une probabilité de collision de 0,01%, même pour SHA-256.

Fondamentalement, vous pouvez simplement ignorer la possibilité.

Michael Borgwardt
la source
5
Je ne suis pas d'accord avec la conclusion. Oui, aucun disque dur ne peut stocker ce nombre de fichiers, mais vous, l'OMI, avez mal interprété la situation. Il suffit de deux fichiers pour produire une collision. Bien que la possibilité soit très faible, elle peut toujours se produire.
Dentranchante
11
@sharptooth: non, je ne dénature pas la situation. La possibilité que vous et toutes les personnes que vous connaissez mouriez d'un accident de la route le même jour est très faible, mais cela peut toujours se produire (et il est beaucoup plus élevé que celui d'une collision SHA-256). Pourtant, vous ignorez cette possibilité.
Michael Borgwardt
11
@sharptooth: Je parlais d' accidents de la route distincts et simultanés de quelques centaines de personnes spécifiques. Vous ne pouvez pas vraiment prendre de mesures pour réduire cela. Ce serait inutile, car il est déjà bizarrement bas. Mais toujours tellement plus probable qu'une collision SHA-256 que vous ne pouvez même pas imaginer combien. C'est le même argument que Thomas a avancé.
Michael Borgwardt
12
@sharptooth: Non, les chances n'augmentent pas de manière significative, car le nombre est toujours absolument éclipsé par la taille de l'espace de hachage SHA-256. C'est la seule chose que vous ne prenez pas correctement en compte - tous les facteurs doivent être pondérés par leur ampleur réelle, pas de manière égale. Si vous générez un milliard de hachages par seconde pour chaque personne sur Terre, et que vous le faites pendant mille ans, vous aurez toujours moins de 1% de chances de collision.
Michael Borgwardt
3
Si vous ne vérifiez pas la possibilité d'une erreur non corrigée à chaque extraction de la mémoire ou lecture du disque (qui ont une probabilité beaucoup plus élevée qu'une collision SHA-256), vous ne comprendrez peut-être pas entièrement les probabilités.
Christophe
17

Tout d'abord, ce n'est pas zéro, mais très proche de zéro .

La question clé est de savoir ce qui se passe si une collision se produit réellement . Si la réponse est "une centrale nucléaire va exploser", vous ne devriez probablement pas ignorer la possibilité de collision. Dans la plupart des cas, les conséquences ne sont pas si graves et vous pouvez donc ignorer la possibilité de collision.

N'oubliez pas non plus que votre logiciel (ou une infime partie de celui-ci) peut être déployé et utilisé simultanément dans une multitude d'ordinateurs (de minuscules micro-ordinateurs intégrés qui sont presque partout de nos jours inclus). Dans ce cas, vous devez multiplier l'estimation que vous avez par le plus grand nombre possible de copies.

acéré
la source
... non pas par le nombre de copies, mais par le nombre d'ensembles de données que toutes les copies digèrent.
Andreas Spindler
1
C'est faux, le nombre de copies du logiciel en cours d'exécution n'a pas d'importance. La seule chose qui compte, c'est le nombre de fichiers uniques qui sont traités et le paradoxe d'anniversaire est le calcul mathématique.
Dirk Bester
1
J'ai entendu quelqu'un d'autre mentionner que la probabilité d'une défaillance matérielle - c'est-à-dire un petit retournement quelque part à cause des radiations, etc. - est plus probable qu'une collision de hachage, et donc, s'inquiéter de la collision de hachage est idiot. Personnellement, j'essaierais de couvrir les deux cas, pour être sûr (plus il y a de sécurité dans une centrale nucléaire, mieux c'est), mais les collisions de hachage seraient probablement très faibles sur la liste des dangers potentiels (en supposant que l'espace de hachage est suffisamment grand) . Cependant, tout cela suppose qu'il n'y a pas de comportement caché dans la fonction de hachage qui provoque des collisions plus fréquemment.
Chris Middleton
'0' a sa zone
Green Tree
@GreenTree La chose à laquelle vous avez lié concerne la création délibérée de collisions.
Sharptooth