web-dev-qa-db-fra.com

Pourquoi les fonctions de hachage non résistantes aux collisions sont-elles considérées comme non sécurisées pour la signature d'informations auto-générées

Laissez-nous avoir une fonction de hachage qui est deuxième résistante à la pré-image mais pas résistante aux collisions.

Ensuite, un adversaire peut créer une paire de messages différents M et M ', M est bénin et M' est malveillant, pour les deux, la signature sera valide.

Je ne comprends pas pourquoi c'est un problème dans le cadre où les signatures sont utilisées pour authentifier l'origine des données créées par la même entité. Donc, si l'on signe un logiciel, il prétend "J'ai créé ce contenu moi-même, s'il contient un malware, blâmez-moi". Et pour les clés: "cette clé publique a une clé privée correspondante, j'y ai accès".

Si quelqu'un crée une collision et signe des données auto-générées ... il réclame toujours les déclarations ci-dessus.

Ces fonctions de hachage doivent-elles être considérées comme sécurisées pour des choses comme les certificats auto-signés et la signature de code?

5
KOLANICH

Les signatures numériques sont conçues pour faire trois choses:

  1. Assurer l'intégrité des données signées
  2. Créer un certain degré de non-répudiation par le signataire
  3. Le but que vous avez mentionné, qui est d'authentifier l'origine du message

Le plus gros problème avec les fonctions de hachage qui sont sensibles aux collisions est que vous perdez très rapidement le premier objectif de conception. Si deux messages différents peuvent avoir la même signature, vous ne pouvez pas savoir lesquels sont authentiques.

Alors, quel est le gros problème si je peux signer deux messages différents avec la même signature? Vous savez toujours qu'ils viennent tous les deux de moi et peuvent me tenir pour responsable, non? Eh bien, peut-être. Il y a certainement des cas où cela peut être abusé, mais nous allons les ignorer parce que ce n'est pas le vrai problème. Le vrai problème est de savoir où vous pouvez créer deux messages qui auront la même signature et soumettre l'un d'eux pour quelqu'un d'autre à signer.

L'exemple canonique ici est une demande de certificat x.509 (SSL/TLS) . Dans ce cas, un processus de signature de certificat mal conçu peut être utilisé pour inciter une autorité de certification à signer un certificat pour un sujet ou avec un ensemble de propriétés (comme un certificat d'entité finale), uniquement pour que la signature entre en collision avec la signature de un deuxième certificat également généré par les attaquants qui ne le serait pas ont été émis pour un sujet que les attaquants ne contrôlent pas, ou pour un cert CA, et ce cert voyou peut désormais bénéficier du parfaitement valide signature associée au premier certificat bénin.

15
Xander

La réponse d'Alex est fondamentalement correcte: le problème est d'amener quelqu'un d'autre à signer un message bénin et à utiliser la signature du message malveillant. Il convient de noter que même si vous faites une collision, vous ne pouvez pas décider directement des messages, vous décidez souvent d'une partie du message. Par exemple, je ne pouvais pas vous persuader de signer "Mon nom est KOLANICH" et de l'échanger contre "Mon nom est Josiah": les hachages ont peu de chances de correspondre. Cependant, je pourrais peut-être vous faire signer "Veuillez payer le numéro de compte X 50 $ pour les chaussures avec le code de référence ZZZZZZZZZZ." puis remplacez-le par "Veuillez payer le numéro de compte X 50000 $ avec le code de référence YYYYYYYYYY." Dans ce scénario, je choisis les Y et les Z dont j'ai besoin pour obtenir la collision.

Une autre raison pour laquelle ils sont considérés comme précaires est un canari dans une situation de mine de charbon. Il est plus facile de trouver une collision que de trouver une deuxième pré-image; strictement parce que si vous avez eu une deuxième attaque de pré-image, vous avez automatiquement une collision, mais pas l'inverse. Cependant, même si avoir une technique pour trouver une collision ne vous donne pas directement de secondes préimages, cela suggère qu'il y a une certaine régularité dans la fonction de hachage qui est susceptible de révéler des vulnérabilités qui, avec des recherches supplémentaires, permettraient de trouver des préimages.

12
Josiah

Eh bien, en théorie, vous auriez raison. Dans certains cas très spécifiques ces hachages ne seraient pas complètement rompus.

Cependant, vous devrez être extrêmement prudent, et soi-disant certaines données "auto-générées" pourraient en fait être peu sûres. Considérez-vous que le chèque émis par le comptable est auto-généré par le comptable? Apparemment oui, mais il contient en fait des données contrôlées de l'extérieur qui pourraient être utilisées pour produire une signature d'un contenu différent.

Ces fonctions de hachage doivent-elles être considérées comme sécurisées pour des choses comme les certificats auto-signés et la signature de code?

Vous ne vérifiez pas vraiment les certificats auto-signés, vous pouvez donc ignorer la fonction de hachage utilisée.

D'un autre côté, je ne le considérerais pas comme sécurisé pour la signature de code. Vous utilisez probablement des bibliothèques externes, donc un tiers aurait pu préparer une bibliothèque qui, une fois compilée, lui aurait permis de remplacer un bloc de code par un autre malveillant qui entrerait en collision avec lui.

Veuillez noter que bien que dans certains cas spécifiques un "hachage cassé" puisse fonctionner, étant donné que nous avons des fonctions de hachage non cassées parfaitement fines, qui n'ont pas besoin de détails aussi minutieux, il est préférable de les utiliser lorsque cela est possible.

Et enfin, n'oubliez pas que les attaques ne font qu'empirer avec le temps. La marge de sécurité de cette fonction est beaucoup plus réduite que celle des résistants aux collisions. Une attaque qui semblait un jour irréalisable, ou une fonction de hachage qui n'était "seulement" pas résistante aux collisions, pas trop longtemps après, pourrait être encore interrompue par une nouvelle découverte, vous obligeant à la changer très rapidement.

5
Ángel