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:
Jusqu'où pouvons-nous aller en ignorant cette possibilité, en supposant qu'elle soit nulle?
La réponse habituelle est la suivante: quelle est la probabilité qu’un astéroïde indésirable s’écrase sur Terre dans les prochaines secondes, effaçant ainsi la civilisation telle que nous la connaissons et tuant quelques milliards de personnes? On peut faire valoir que tout événement malheureux avec une probabilité inférieure à celle-ci n’est en réalité pas très important.
Si nous avons une fonction de hachage "parfaite" avec une taille de sortie n , et nous avons p messages à hachage (la longueur des messages individuels n’est pas importante), la probabilité de collision est donc d'environ p2/ 2n + 1 (il s'agit d'une approximation valable pour "petit" p , c'est-à-dire nettement plus petit que 2n/2). Par exemple, avec SHA-256 ( n = 256 ) et un milliard de messages ( p = 109) alors la probabilité est d'environ 4.3 * 10-60.
Un rock spatial de meurtriers de masse se produit environ une fois tous les 30 millions d'années en moyenne. Cela conduit à une probabilité qu'un tel événement se produise dans la seconde à environ 10-15. C'est 45 ordres de grandeur plus probable que la collision SHA-256. En bref, si vous trouvez que les collisions SHA-256 sont effrayantes, vos priorités sont fausses.
Dans une configuration de sécurité, où un attaquant choisit les messages à hacher, il peut utiliser sensiblement plus d'un milliard de messages. Cependant, vous constaterez que la probabilité de succès de l'attaquant sera toujours extrêmement 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 entendu, tout ce qui précède suppose que SHA-256 est une fonction de hachage "parfaite", ce qui est loin d'être prouvé. Néanmoins, SHA-256 semble assez robuste.
La possibilité d'une collision ne dépend pas de la taille des fichiers, mais de leur nombre.
Ceci est un exemple du paradoxe de l'anniversaire . La page Wikipedia 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 contenir suffisamment de fichiers de 1 Mo pour avoir une probabilité de collision même de 0,01% pour SHA-256.
Fondamentalement, vous pouvez simplement ignorer la possibilité.
Tout d'abord, ce n'est pas zéro, mais très proche de zéro .
La question clé est que se passe-t-il 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é d'une collision. Dans la plupart des cas, les conséquences ne sont pas terribles 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 un grand nombre d'ordinateurs (de minuscules micro-ordinateurs intégrés qui sont presque partout inclus de nos jours). Dans ce cas, vous devez multiplier l'estimation obtenue par le plus grand nombre possible d'exemplaires.