Je me posais la question si cet article devait être dans la catégorie cryptographie, ou sécurité, mais finalement, c'est un problème de sécurité, qui peut se traiter partiellement de façon cryptographique.  Le problème de l'attaque de l'Homme Du Milieu est essentiellement insolvable quand son étendue est trop large, ce qui implique que ça ne sert à rien d'aller vers des mesures extrêmes pour l'éviter, car on ne peut pas l'éviter dans tous les cas.

Principe de l'attaque de l'homme du milieu

Le principe de l'attaque de l'homme du milieu (AHDM) est simplement ceci: supposons qu'Alice a un canal de communication vers Bob, ou au moins, c'est ce qu'elle pense.  Pour avoir ce canal de communication, elle utilise de l'infrastructure physique et virtuelle sur laquelle elle n'a pas le contrôle, et Bob non plus.  Son contrôle se limite au chemin entre son ordinateur et son modem ADSL dans lequel "des choses se passent", et au bout de fil téléphonique qui quitte sa maison.  A partir de là, les liens de communication ne sont plus sous son contrôle.

Considérons d'abord la situation la plus simple: un câble direct entre la maison d'Alice et celle de Bob, câble que ni elle, ni lui, possèdent.  Quand Alice envoie des messages à Bob elle est relativement certaine que ce qu'elle envoie, arrive chez Bob.  Bien sûr, on peut espionner, écouter, ce qui se passe sur le câble, mais on ne peut pas arrêter ce qui passe.  On pourrait couper le câble, mais alors Bob s'en apercevrait.  Oui ?

Supposons que à mi-chemin le long du câble, quelqu'un a coupé, effectivement, ce câble, mais il reçoit les messages d'Alice d'un coté, et il renvoie des messages sur le bout de câble qui va vers Bob.  Admettons que cette personne installe un ordinateur qui reçoit les messages d'Alice, et qui les copie et renvoie directement chez Bob, et vice versa.  Ni Bob, ni Alice verraient la différence!  En fait, peut-être que la compagnie de téléphone a simplement installé un répéteur sur le câble !

Mais supposez maintenant que ce 'répéteur' ne copie pas exactement les messages d'Alice vers Bob, et ne copie pas exactement les messages de Bob vers Alice.  Il les modifie un peu.  Là, nous avons potentiellement une AHDM.

Considérons maintenant une situation plus réaliste: il n'y a pas de fil direct entre la maison de Alice et celle de Bob.  Il y a un fil direct entre la maison de Alice et sa compagnie de téléphone C (ce fil est son fil de téléphone).  En suite, il y a un fil de cette compagnie C vers un opérateur de réseau D.  Chez cet opérateur, il y a un fil du site E vers le site F.  En suite, il y a un fil du cite F de la compagnie D, vers la compagnie de téléphone G.  Finalement, il y a le fil téléphone de Bob qui va de G vers la maison de Bob.  A chaque point sur ce chemin, il y a des appareils, qui s'appellent des routeurs, qui reçoivent des messages de la machine précédente, et décident d'envoyer des messages sur le bout suivant du chemin.  Chacun des routeurs décide où elle envoie les données, et si elle modifie les données ou non.  Dans leur fonction normale, chaque routeur peut donc faire une AHDM.

Per exemple, le routeur à E pourrait décider d'envoyer tous les messages qu'il reçoit en provenance d'Alice et destiné à Bob, vers Mallory, et d'envoyer et de modifier les messages de la part de Mallory à la destination de Bob, comme s'ils venaient de la part d'Alice.  Un autre point, ou le même point sur le chemin, disons, G, peut décider d'envoyer tous les messages de la part de Bob, pour Alice, non pas à Alice, mais à Mallory, et d'envoyer les messages venant de Mallory pour Alice, comme s'ils venaient de la part de Bob.  C'est l'équivalent routeur de notre fil coupé mais la différence est que toute l'infrastructure pour faire cela, est déjà en place dans le fonctionnement normal de l'internet.

En d'autres termes, si nous envoyons un paquet de données à destination d'une adresse (une adresse IP), nous acceptons le fait que ce paquet sera reçu par d'autres, et qu'un autre paquet sera envoyé.  Nous espérons que le contenu data de ce paquet sera copié de façon non modifié, mais chaque routeur le long du chemin pourrait en décider autrement.

Homme Du Milieu et cerveau dans une bouteille

Considérons maintenant le cas extrême où votre fil téléphone a été coupé par votre voisin, qui l'a mis dans son data centre, et que tout ce que vous avez jamais envoyé ou reçu sur l'internet, est en fait, envoyé, ou reçu par lui.   Supposons que votre voisin possède un data centre énorme et a mis en place des copies de presque tout qu'on peut trouver sur internet.  Quand vous connectez à Google, par exemple, vous vous connectez en fait simplement à la copie du site web de Google que votre voisin tourne sur son data centre ; quand vous vous connectez à Facebook, vous êtes en réalité sur votre compte de la copie de Facebook dans son data centre.  Quand vous téléchargez Firefox, vous téléchargez en réalité la version faite par votre voisin.  Etc...  Cet exemple extrême demanderait des ressources énormes de la part de votre voisin: comment peut-il obtenir une copie entière de Google par exemple ?  Bien sûr, il peut toujours contacter le vrai Google en votre nom pour obtenir la "simulation" de Google pour vous: il ne modifierait que ce qu'il veut vraiment modifier pour vous.   Vous ne pourrez jamais vous en rendre compte tant que votre seule connexion avec le monde extérieur est à travers votre connexion internet interceptée par votre voisin.

En quelque sorte, c'est l'équivalent "internet" de la question philosophique du cerveau dans une bouteille, où une société avancée médicalement est capable d'enlever le cerveau du corps d'un humain, pour placer ce cerveau vivant dans une bouteille, connectant tout nerf qui sort de ce cerveau à des appareils électroniques qui agissent comme s'ils étaient le reste du corps.  Le cerveau ne pourra jamais savoir qu'il n'est plus dans son corps ; il va penser qu'il a un corps, et aura des perceptions qui sont conçues par ceux qui ont mis ce cerveau dans une bouteille.  Matrix, quoi.

De la même façon, notre AHDM massive ne peut pas être détectée ni parée tant qu'on n'utilise que la connexion internet.  C'est pour cette raison que fondamentalement, une AHDM ne peut pas être mitigée de façon sûre si on n'a qu'un lien internet.  Si quelqu'un avec suffisamment de ressources a décidé que le premier routeur sur votre ligne de sortie va envoyer tout ce qui vient de chez vous, et tout ce qui va vers vous, vers le site X qui peut se trouver de l'autre coté du globe, vous n'allez jamais savoir tant que le site X va copier tout de vous vers le monde extérieur et vice versa, parce que le site X ne peut pas être distingué d'une opération de routage normale.  X va modifier seulement ce qu'il veut, et pour le reste, il agira comme un routeur normal.  Si vous pensez que c'est tiré par les cheveux, c'est une pratique qui est arrivée d'être utilisée par certains agences sponsorisés par des états.  Cependant, même à une échelle plus modeste, un simple routeur peut faire cela aussi.

Comment se défendre ?

Comme nous avons vu, il n'y a rien à faire contre une attaque HDM complète, quand on utilise seulement son lien internet.  On pourrait cependant utiliser plusieurs connections internet.  Bien sûr, si tous ces liens sont aussi sous contrôle du même attaquant, ces connections multiples n'aident en rien.  On peut aussi utiliser des liens qui ne sont pas des liens internet.  Il devient plus difficile pour un attaquant de contrôler, en même temps, des canaux de communication de type différent.  C'est la base de l’authentification à deux facteurs.  Seulement, la plupart des implémentations de l'authentification à deux facteurs sont mal faites, et ne protégeraient pas contre même une simple AHDM ; au plus, ces protocoles vous protègent contre le vol d'un mot de passe.

On peut se reposer sur un réseau de confiance et/ou un ancre de confiance, mais dans tous ces cas, nous devons supposer que l'AHDM ne concerne qu'une partie de nos communications ; comme nous avons indiqué, on ne peut pas se défendre contre une AHDM qui englobe toutes nos communications.  Ainsi, l'idée est de détecter des incohérences qui peuvent seulement être évitées par l'attaquant en agrandissant l'ampleur de son attaque tellement qu'elle devienne trop compliquée à mettre en oeuvre ou trop chère.  En d'autres termes, la défense contre une AHDM est de rendre l'attaque tellement massive pour éviter des incohérences détectables, que l'attaquant abandonne par manque de moyens ou d'envie.

AHDM et cryptographie

La relation entre AHDM et cryptographie est subtile.  Étant donné qu'il n'y a pas de défense possible contre une AHDM massive et totale, on peut se demander comment la cryptographie pourrait résoudre un problème insolvable.  Eh bien, elle ne le peut pas.  Mais la cryptographie peut aider à détecter des incohérences induites par une AHDM à échelle réduite ; c'est à dire, contre des attaques de type amateur.  C'est ce que TLS et son application la plus connue, HTTPS, essayent de faire.  Il est cependant nécessaire de se rendre compte que ces méthodes ont leurs limites.

Dans l'application de la cryptographie à l'AHDM, il faut distinguer deux types d'attaque:

  1.  Espionnage.  La cryptographie est excellente comme défense contre l'espionnage.
  2.  AHDM.  La cryptographie peut vous protéger seulement très partiellement et peut donner un faux sens de sécurité.

AHDM et cryptographie symétrique

Cela peut vous surprendre, mais la cryptographie symétrique bien appliquée résout totalement le problème de l'AHDM.  Comment est-ce possible, car nous venons d'argumenter qu'une telle solution n'existe pas ?  La raison est que la cryptographie symétrique bien appliquée contient elle-même une exigence contradictoire: Alice et Bob doivent se mettre d'accord sur la clé secrète par un canal de communication sûr qui ne peut pas être espionné.   Voila donc notre contournement de l'attaque par hypothèse !  Mais pourquoi alors ne pas utiliser ce canal sûr pour la communication au lieu de juste transmettre la clé ?  La réponse est que ce canal peut avoir une bande passante limitée, et/ou que ce canal n'est peut-être plus disponible quand Alice et Bob veulent échanger des messages.  Par exemple, Alice et Bob peuvent se rencontrer sur un parking et Alice peut donner une enveloppe fermée à Bob, contenant la clé secrète.  Plus tard, Bob peut ouvrir l'enveloppe et l'utiliser pour crypter des messages pour Alice ; Alice peut aussi utiliser cette clé pour envoyer des messages à Bob.  Alice et Bob sont les deux seules personnes au monde pouvant chiffrer et déchiffrer des messages avec cette clé.  Ainsi, quand ils lisent un message décrypté ils savent:

  1. que ce message doit venir de Alice ou de Bob, personne d'autre ne peut produire un tel message crypté.
  2. que ce message ne peut pas être altéré
  3. que ce message n'a pas été lu tant que Alice et Bob ont été suffisamment vaillant pour protéger le contenu du message (et la clé).

En d'autres termes, une cryptographie bien fonctionnelle symétrique où les clés ont été distribuées de façon sûre, est une protection parfaite contre toute sorte d'AHDM.  Le prix à payer est qu'il faut avoir un canal sûr qui non seulement ne peut pas être corrompu, mais qui ne peut pas être espionné non plus.

AHDM et cryptographie asymétrique

La cryptographie asymétrique est louée comme la solution au problème "ridicule" de la cryptographie symétrique: pour avoir la possibilité de communiquer de façon sûre sur un canal incertain, il faut une communication sûre pour passer la clé.  Le grand avantage d'avoir une pair de clés: une clé privée (ou secrète) et une clé publique, est que la clé secrète ne doit jamais être communiquée et que la clé publique peut être communiquée publiquement, sur un canal non sûr.

Ceci va résoudre le problème qu'il fallait un canal qui ne peut pas être espionné pour passer la clé.  Par contre, cela ne va pas résoudre le problème d'un canal compromis par une AHDM.

Considérons le scénario dans lequel Alice veut communiquer avec Bob.  Alice et Bob décident qu'ils veulent établir une communication sûre dans le futur.  S'ils utilisent une cryptographie symétrique, ils doivent se rencontrer sur le parking, et passer la clé sans qu'elle puisse être vue par quelqu'un.  C'est pour cela que Alice l'avait mise dans une enveloppe.  S'ils utilisent une cryptographie asymétrique, Alice va générer une paire de clés publique/secrète, et Bob fait de même.  Maintenant, ils peuvent se rencontrer à la gare, et s'échanger leurs clés publiques ouvertement.  Même si quelqu'un voit leurs clés, ce n'est pas grave.  Si Alice veut envoyer un message à Bob, elle doit faire deux choses:

  1. chiffrer le message avec la clé publique de Bob qu'elle a obtenue à la gare.  Un espion qui a vu cette clé peut faire de même.
  2. Signer le message avec sa propre clé privée ;  ça, l'espion ne pourra pas le faire

Quand Bob reçoit le message d'Alice, il est le seul à pouvoir décrypter ce message, car il faut sa clé privée pour cela.  Il peut aussi vérifier que le message est envoyé par Alice, parce qu'il peut vérifier sa signature avec sa clé publique, et il sait que c'est bien la clé publique d'Alice.

Ainsi, la cryptographie asymétrique a permis à Alice et Bob de communiquer de façon sûre, et cette fois, ils n'avaient pas besoin d'un canal sans espion ; mais ils avaient toujours besoin d'un canal dont ils étaient sûr que l'information n'était pas modifiée (leur rencontre à la gare).

Mais supposons maintenant qu'Alice et Bob ne veulent pas se rencontrer en personne ; supposez qu'Alice vit en Australie, et Bob vit en Suède.  Au lieu de se rencontrer en personne, ils décident de s'envoyer leurs clés publiques par la poste.  Alice met sa clé dans une enveloppe à destination de Bob, et Bob met sa clé dans une enveloppe à destination de Alice. 

Supposons que quelqu'un à la poste près de chez Bob peut ouvrir les enveloppes.  On l'appellera Mallory.  Quand l'enveloppe de l'Australie arrive au bureau de poste, elle ouvre l'enveloppe, et elle remplace la clé de Alice par une autre clé publique, Mallory_1.  Elle referme l'enveloppe et l'envoie chez Bob.  Bob pense maintenant que la clé publique d'Alice est Mallory_1.  Quand Bob envoie sa clé à Alice, Mallory va ouvrir cette enveloppe et va remplacer la clé de Bob par une autre clé, Mallory_2.  En suite, elle referme l'enveloppe, et l'envoie à Alice en Australie.  Alice reçoit cette enveloppe et pense que la clé publique de Bob est Mallory_2.

Quand Alice veut envoyer un message à Bob, elle va chiffrer ce message avec Mallory_2, pensant que c'est la clé publique de Bob.  Si jamais ce message arrive directement chez Bob, Bob ne va pas pouvoir déchiffrer ce message.  Il ne va pas considérer que c'est un message en provenance de Alice.  Mais si Mallory peut organiser une AHDM sur le lien internet de Bob, elle va recevoir le message d'Alice.  Elle peut déchiffrer le message, car Mallory a bien la clé secrète qui va avec Mallory_2.  Maintenant, Mallory peut lire le message de Alice, et peut le modifier si elle le veut.  En suite, elle va chiffrer ce message avec la vrai clé publique de Bob qu'elle avait récupérée.  Elle va signer le message avec la clé secrète qui va avec Mallory_1.  En suite, elle envoie ce message chiffré et signé vers Bob.

Quand Bob va recevoir ce message modifié, il pourra le déchiffrer, car ce message a bien été chiffré avec la clé publique de Bob.  En plus, il va constater que le message est correctement signé avec la clé Mallory_1, dont il pense que c'est la clé publique d'Alice.  Quand Bob répondra à Alice, et Mallory est au milieu, exactement la même chose va se passer.  Alice et Bob communiquent donc avec des messages lus et modifiés par Mallory alors qu'ils pensent qu'ils sont en communication parfaitement sûre.  Mais supposons maintenant que Bob découvre le jeu de Mallory et il peut mettre fin à cette attaque.  S'il essaie d'expliquer cela à Alice, il n'en a pas les moyens.  Alice ne va jamais le croire, car il ne pourra jamais signer un message avec Mallory_2, la clé dont Alice pense qu'elle appartient à Bob.  Tous les vrais messages de la part de Bob vont être rejetés de la part d'Alice, pensant qu'ils viennent d'un imposteur.  "Bob" n'écrira plus jamais à Alice.

Ainsi, la cryptographie asymétrique ne protège pas contre une AHDM si l'échange de clés publiques peut être victime de cette AHDM.  Pire, une fois que cette échange compromise a eu lieu, toute communication légitime sera vue comme frauduleuse.

La cryptographie asymétrique a déplacé le problème d'espionnage en un problème d'authenticité des clés publiques.

Si toutes les clés publiques que vous détenez d'autres entités viennent de sources douteuses, vous êtes totalement vulnérable aux attaques d'homme du milieu - pire, si jamais une communication authentique sans attaque se profile, vous allez la rejeter comme frauduleuse !  Mais cette fois, vous ne craignez pas l'espionnage...

D'une certaine façon, cette conclusion est inévitable.  Étant donné que des clés publiques peuvent être communiquées par internet, et étant donné qu'une attaque massive d'HDM ne peut pas être mitigée, une autre conclusion que la corruption totale du jeu de clés publiques mènerait à une contradiction logique.

Défenses partielles: réseau de confiance

Comme nous avons vu, il n'y a pas de solution cryptographique au problème de l'attaque massive de l'homme au milieu, comme indiqué précédemment.  Mais nous allons nous défendre contre des petites AHDM.  Dans tous ces cas, il faut supposer qu'une partie de la communication échappera à l'attaquant ; nous allons utiliser cela pour détecter des incohérences qui révèlent une AHDM.

Nous avons vu comment Alice et Bob pouvaient résoudre ce problème: ils se rencontrent physiquement pour échanger leurs clés publiques.  Cette rencontre était une ancre de confiance.  Bob est certain que la clé d'Alice qu'il détient est vraiment celle d'Alice.  Alice sait pour de vrai que la clé de Bob qu'elle détient est vraiment celle de Bob.  Bien sûr, s'ils ne se connaissaient pas, Bob peut avoir rencontré Mallory à la gare, pensant que c'était Alice, et Alice peut avoir rencontré Joe, le petit copain de Mallory, pensant que c'était Bob, et on est parti comme avec les lettres, mais c'est plus difficile à mettre en œuvre de la part de Mallory.   C'est encore une illustration de la thèse générale que si l'AHDM englobe l'échange de clés, on n'y peut rien. Il nous faut une ancre de confiance dont nous pouvons supposer que nous sommes en contact avec la bonne personne et que nous avons la bonne clé publique.

Supposons maintenant que Alice connaît Christine et David, et que Bob connaît Élisabeth et Fred.  Supposons qu'Alice a échangé personnellement des clés avec Christine et David, et que Bob a échangé personnellement des clés avec Élisabeth et Fred.  Est-ce qu'il y a un moyen par lequel Alice pourrait obtenir la clé de Fred en toute confiance ?  Elle peut demander cette clé à Bob, qui peut la lui envoyer, signée avec sa signature.  Mais si Christine veut la clé de Fred à son tour, il faut qu'elle demande cela à Alice maintenant.  Ce qui dérange, c'est qu'il faut déranger les gens pour leur demander des clés.  Est-ce qu'il y a un autre moyen ?

Bob pourrait rendre public sa signature de la clé de Fred.  Si Alice signe la clé de Bob, et Bob signe la clé de Fred, alors Christine, qui fait confiance à la clé d'Alice, sait qu'Alice fait confiance à la clé de Bob, et que Bob fait confiance à la clé de Fred.  Si ces clés et signatures sont publiquement disponibles il n'est pas nécessaire que Christine embête Alice pour cela.  Mais qu'est ce qui peut se passer ?  Supposons que Bob a signé un peu vite la clé de Fred soi-disant : il connaît bien Fred, mais un imposteur à réussi de se faire passer pour Fred et Bob à signé cette fausse clé par erreur.  Christine va penser qu'elle possède la vraie clé de Fred, et elle pourra être victime d'une AHDM dans un contact avec Fred (un vrai contact serait rejeté par les deux comme frauduleux).

Seulement, si plusieurs personnes ont signé la clé de Fred, il devient difficile pour un imposteur de se faire passer pour Fred chez tout le monde.  Ainsi, s'il y a plusieurs chemins variés pour arriver à partir de son ancre de confiance à une autre clé, il devient de plus en plus certain que cette clé est une bonne clé.  Si Christine peut arriver à la clé de Fred par la chaîne Alice-Bob-Fred, mais aussi par la chaîne Miriam-Jean-Louis-Fred et par la chaîne Mark-Joe-Fred, alors il y a peu de chances que la clé de Fred soit frauduleuse. 

 Cette façon de faire est appelé un réseau de confiance.  Les clés PGP pour l'e-mail sont traitées comme cela.  Il est très important de se souvenir qu'il faut seulement signer des clés dont vous avez réellement vérifié de l'authenticité, c.a.d. que cette clé appartient réellement à la personne en question.  On peut alors faire des dépositoires publics de ces clés et de leurs signatures.  Le fait qu'une clé se trouve sur ce dépositoire ne donne pas beaucoup de confiance en soi.  Si, par contre, cette clé est signée par d'autres ils commencent à former un réseau de confiance.  Si votre ancre de confiance fait partie du réseau de confiance, alors vous pouvez faire confiance à toutes les clés qui peuvent être joint à partir de votre point de départ. S'il y a plusieurs chemins divers pour atteindre la clé en question, la confiance que vous pouvez mettre dans cette clé devient grande (moins qu'il devient possible que cette clé soit frauduleuse, mais cependant signée par inadvertance ou mauvaise intention).

Défenses partielles: certificats

Une autre façon de faire pour se défendre contre des AHDM, est l'utilisation de certificats par des autorités de certificats.  C'est l'approche prise par TLS (Transport Layer Security), le protocole qui est utilisé par des protocoles sûrs sur internet, entre autre par https.

L'idée est d'avoir quelques (pas trop) d'entités centrales qui prennent sur eux de vérifier l'exactitude de chaque clé publique qu'ils signent.  D'une certaine façon, ils sont les Alices et les Bobs qui "sortent pour aller voir les gens à la gare en personne et d'accepter leur clé publique".   Si Alice va rencontrer tout le monde en Australie et signe toutes ces clés qui sont correctement associées aux gens la-bas, et Bob va rencontrer tout le monde en Suède qui veut une clé publique signée, alors Alice et Bob accordent ce qu'on appelle un certificat: un certificat est la combinaison d'une clé publique et une identité, signée par une signature d'une entité de confiance. Maintenant, partout dans le monde, les gens doivent seulement s'assurer que leurs copies de la clé publique de Alice et de Bob sont les bonnes.  Maintenant, ils peuvent vérifier tous les certificats en Suède et en Australie.  Ils peuvent faire confiance dans toutes les clés publiques signés en Suède et en Australie. Les auteurs de logiciels importants de communication sur l'internet (lisez: les navigateurs connus) peuvent inclure les clés publiques d'Alice et de Bob dans leur structure.  Si quelqu'un présente un certificat en prétendant que c'est signé par Alice ou par Bob, le logiciel peut tout de suite vérifier la signature avec la clé de Bob ou celle d'Alice.  Il y a des entités commerciales qui proposent le service de délivrer des certificats en leur nom.  Ils s’appellent des Autorités de certificat, et ils veulent que leurs clés publiques soient inclus dans les navigateurs importants.  Souvent, ils demandent une somme d'argent pour la délivrance d'un certificat, c'est à dire, pour vouloir signer une clé publique.

La question à poser est: peut-on avoir confiance dans les Autorités de certificat ?  S'ils signent des clés pour des imposteurs, tout le monde acceptant leur signature devra accepter ces certificats frauduleux, et s'exposer à une AHDM.

2-facteur et AHDM

Comme nous avons vu, notre seul espoir de se défendre contre une AHDM est de disposer d'un canal de communication que l'attaquant ne maîtrise pas.  Avec la venue des smart-phones, voila un chemin pratique de disposer d'un tel chemin.  Certaines personnes ont critiqué cela, car le téléphone sans fil possède aussi ses faiblesses, mais cependant, devoir maîtriser en même temps le lien téléphonique et le lien internet de quelqu'un augmente l'ampleur de l'AHDM nécessaire pour la rendre efficace, ce qui est justement la stratégie de défense contre ces attaques: agrandir l'ampleur nécessaire pour que l'attaquant finit par abandonner.

Cependant, la façon standard d'utiliser l'authentification à 2 facteurs lui enlève son potentiel de détecter une AHDM.  Effectivement, supposons que Mallory est bien installée au milieu du lien entre Alice et Bob comme nous l'avions décrit ci-dessus.  Supposons que Mallory ne peut pas intercepter le téléphone de Bob ou d'Alice: son attaque se fait seulement sur internet.  C'est le genre d'attaque qu'il faudrait pouvoir déceler justement, avec notre moyen de communication hors-internet.  Mais les deux façons standard d'utiliser ce deuxième facteur sont les suivantes:

  1. Bob envoie un code à Alice par SMS qu'elle doit renvoyer sur le site de Bob
  2. Bob demande à Alice le mot de passe unique (par exemple, avc Google Authenticator)

Dans les deux cas, cependant, Alice va envoyer sa "preuve de relevé de défi" sur le canal compromis: son lien internet.  Alors, Mallory peut lire la réponse d'Alice et la transmettre à Bob.  L'attaque de Mallory restera invisible !

La seule façon de détecter l'attaque, c'est en vérifiant l'exactitude des clés publiques.  Idéalement, Bob pourrait chiffrer un nombre aléatoire avec ce qu'il pense être la clé publique d'Alice, envoyer ce texte par SMS à Alice.  Il peut alors demander à Alice de déchiffrer ce message, ajouter un autre nombre aléatoire au texte, et de le chiffrer avec la clé qu'elle pense être celle de Bob, et lui renvoyer ceci par SMS aussi.  Mais ceci n'est pas pratique car les SMS sont trop courts pour pouvoir envoyer ce genre de message crypté.   Il faudrait résoudre le défi suivant si on veut utiliser les SMS:

  1. vérifier l'identité (possession du téléphone)
  2. vérifier la validité des clés publiques
  3. avoir des messages courts (SMS)

Une proposition simple de faire cela est la suivante:  Bob peut envoyer une empreinte courte de ce qu'il pense être la clé de Alice.  Dans le cas d'une AHDM, Bob va en faite envoyer l'empreinte de Mallory_1, et Alice va s'en apercevoir: ce n'est pas l'empreinte de sa clé publique !  Elle vient de découvrir l'attaque !  Mais comment dire à Bob ?

Bob pourrait envoyer un message SMS:

"Vérifiez que xxx.xxx est bien l'empreinte de votre clé publique.  Si c'est le cas, alors envoyez-moi yyy.yyy sur mon site ; si ce n'est pas le cas, envoyez-moi zzz.zzz sur mon site".

Ici, yyy.yyy et zzz.zzz sont deux nombres aléatoires que Bob a choisi.  Alice va dont taper zzz.zzz.  Mallory étant au milieu,  peut voir cette réponse, mais que peut-elle faire ?  Pour cacher l'attaque à Bob, il faudrait qu'elle envoie yyy.yyy, mais elle ne connaît pas yyy.yyy.  Ainsi, Mallory peut transmettre zzz.zzz, envoyer autre chose, ou ne rien envoyer à Bob.  Mais dans tous les cas, Bob ne recevra pas yyy.yyy et il sait donc qu'il y a une attaque HDM en cours, qu'Alice est une blagueuse, ou que la clé secrète d'Alice est compromise.  Dans tous les cas, il peut se défaire de la clé Mallory_1 dont il pensait qu'elle venait d'Alice.  Bien sûr on peut rendre cela symétrique et Alice pourrait demander à Bob:

"Vérifiez que XXX.XXX est bien l'empreinte de ma clé publique.  Si c'est le cas, alors envoyez-moi YYY.YYY par internet, sinon, envoyez-moi ZZZ.ZZZ."

Avec cette méthode, nous n'avons pas besoin de certificats ni d'autorités de certificat, juste d'une clé publique.  Mais maintenant, la question est: comment connaître le bon numéro de téléphone ... Il est clair que si le numéro de téléphone était obtenu par la même voie que la clé publique, toute cette histoire de 2-facteurs est inutile, parce que le numéro de téléphone va bien sûr être celui de Mallory.  En fait, 2-facteur à déplacé le problème "connaître la bonne clé publique" en "connaître la bonne clé publique et le bon numéro de téléphone".   Après tout, comment est-ce que Alice sait qu'elle a activé l'authentification par 2-facteurs pour de vrai sur le site de Bob ?  Si elle était déjà sous attaque par Mallory à ce moment, elle a envoyé sa demande et son numéro de téléphone à Mallory.  Mallory peut très bien ne pas avoir activé l'authentification à 2-facteurs sur le vrai site de Bob.   C'est donc le téléphone de Mallory qui a envoyé le message à Alice, et envoyé la page "de Bob" où elle peut répondre.  Alice a sagement répondu, mais comme xxx.xxx était l'empreinte de sa bonne clé (Mallory la détient), Alice pense que tout va bien.  Mallory n'a pas transmis de message à Bob qui ne demande rien.  Ceci donne donc un faux sens de sécurité à Alice.  Mais même si Bob demande l'authentification à deux facteurs, Mallory a envoyé (étant au milieu) son propre numéro de téléphone à Bob, et Bob va donc envoyer son message, non à Alice, mais à Mallory.  Elle pourra donc répondre "yyy.yyy" à Bob, qui, lui, aussi, sera faussement rassuré.

Nous constatons de nouveau que si l'AHDM couvre l'établissement de la mise en place de l'identification sûre, l'attaque reste invisible.  Mallory ne doit même pas cracker le téléphone de Bob ou d'Alice: ils avaient simplement les mauvais numéros de téléphone, comme ils ont les mauvaises clés publiques.

Même si Alice veut vérifier le numéro de Bob sur internet, (par exemple, sur le site de Bob), Mallory peut modifier ce qu'Alice verra sur ce site, et afficher ses propres numéros à la place de ceux de Bob sur le site web "de Bob" comme elle le reconstruit pour Alice.

Conclusion

Il ne peut y avoir que des défenses partielles contre l'AHDM.  L'essentiel de ces défenses consiste à obtenir une ancre de confiance, c'est à dire, avoir une confiance que certaines clés publiques ne sont pas frauduleuses.  A partir de là, on doit faire confiance que les entités correspondantes ont seulement signé des clés dont ils avaient vérifié eux-mêmes la véracité de l'identité du propriétaire.  Si cela est fait de façon décentralisée, comme avec PGP, on construit ainsi un réseau de confiance.  Si un réseau de confiance est étendu et maillé, alors on peut y mettre sa confiance (une AHDM/conspiration doit être massive pour le corrompre).  Si cela est fait de façon plus centralisée, on accepte des certificats de la part d'un petit nombre d'autorités du certificat qui délivrent ces certificats.  La confiance qu'on peut avoir dans un jeu d'autorités de certificat est la confiance qu'on peut avoir dans le moins fiable d'eux, de ne pas avoir délivré un certificat frauduleux.

Avec l'identification à deux facteurs, il y a un moyen de déceler une AHDM si le deuxième canal n'est pas compromis par le même attaquant, mais la plupart des implémentations à 2 facteurs le font mal.  Cependant, la difficulté, maintenant, est de savoir si on possède les bons numéros de téléphone.