title: Protocole de Needham-Schroeder
text: # Protocole de Needham-Schroeder
  
  Le protocole de Needham-Schroeder est un protocole d'authentification conçu pour être utilisé dans des réseaux informatiques non sûrs (Internet par exemple), et inventé par Roger Needham et Michael Schroeder en 1978. Le protocole permet à des tiers communiquant à travers un réseau de prouver (l'un à l'autre respectivement) leurs identités respectives.
  
  ## Protocole symétrique
  
  En notation de protocole de sécurité, quand Alice (A) s'authentifie auprès de Bob (B) en utilisant un serveur (S), le protocole se décrit :
  
  $A\rightarrow S:A,B,N_{A}$
  
      Alice informe le serveur qu'elle veut communiquer avec Bob.
  
  $S\rightarrow A:\{N_{A},K_{AB},B,\{K_{AB},A\}_{K_{BS}}\}_{K_{AS}}$
  
      Le serveur génère ${K_{AB}}$ et envoie une copie chiffrée avec ${K_{BS}}$ (la clé secrète que le serveur partage avec B) à Alice pour qu'elle fasse suivre à Bob, une copie claire est envoyée à Alice. Le nombre à usage unique garantit le maintien de la session, et que ${K_{AB}}$ est "frais".
  
  $A\rightarrow B:\{K_{AB},A\}_{K_{BS}}$
  
      Alice transmet la clé Bob.
  
  $B\rightarrow A:\{N_{B}\}_{K_{AB}}$
  
      Bob envoie à Alice un nombre à usage unique chiffré avec ${K_{AB}}$ pour montrer qu'il a la clé.
  
  $A\rightarrow B:\{N_{B}-1\}_{K_{AB}}$
  
      Alice effectue une opération simple sur le nombre, le ré-encode et renvoie pour prouver qu'elle est toujours disponible et qu'elle a la clé.
  
  Ce protocole n'est plus considéré sûr parce que Bob ne sait pas si la clé est nouvelle (une attaque de type replay est possible)
  
  ## Protocole asymétrique
  
  1. A → S : A, B
  
  Alice demande la clé publique de Bob au serveur.
  
  2. S → A : {KPB, B}KSS
  
  Le serveur répond à Alice avec la clé publique de Bob en même temps que son identité, le tout étant signé par la clé du serveur.
  
  3. A → B : {NA, A}KPB
  
  Alice choisit un nonce, le chiffre avec la clé publique de Bob avant de lui envoyer.
  
  4. B → S : B, A
  
  Bob demande la clé publique d’Alice au serveur.
  
  5. S → B : {KPA, A}KSS
  
  Le serveur répond à Bob avec la clé publique d’Alice en même temps que son identité, le tout étant signé par la clé du serveur
  
  6. B → A : {NA, NB}KPA
  
  Bob choisit un nonce, le chiffre avec la clé publique de Alice en même temps que le nonce que celle-ci a généré afin de prouver qu’il a pu déchiffrer le message envoyé à l’étape 3.
  
  7. A → B : {NB}KPB
  
  Alice envoie NB à Bob pour prouver qu’elle a pu déchiffrer le message envoyé à l’étape précédente.
  
  