Challenge–Response : 3 echanges + 3 attaques

Published

January 12, 2026

0.1 Introduction

On compare 3 variantes de schemas challenge–response et on illustre, pour chacun, une attaque typique.
Ici “signature” couvre MAC/HMAC (symetrique) ou signature (asymetrique).

Note: Mermaid (sequenceDiagram) est parfois strict sur la syntaxe.
Pour eviter les erreurs: pas de participants avec parentheses dans leur nom, et pas de fleche bidirectionnelle V<->>P.


1 1) echange 1 — Cle constante -> Reponse constante (statique)

1.1 1.1 Sequence

sequenceDiagram
  autonumber
  participant V as Verifieur
  participant P as Prouveur

  Note over P: Secret K (constant)
  V->>P: Requete preuve
  P-->>V: R = f(K) (constant)
  V->>V: Verifie R

1.2 1.2 Attaques typiques (classes)

  • Replay : capture une fois, rejoue a vie.
  • Clonage par copie : fuite de R = identite copiee.
  • Brute-force / oracle offline : si f(K) ou K faibles.
  • Extraction de secret : compromis de P = K expose.
  • Interception passive : l’ecoute suffit.

1.3 1.3 Attaque illustree — Replay

sequenceDiagram
  autonumber
  participant V as Verifieur
  participant A as Attaquant
  participant P as Prouveur

  Note over A: Phase 1 - Capture
  V->>P: Requete preuve
  P-->>V: R = f(K)
  A-->>A: Enregistre R

  Note over A: Phase 2 - Rejeu (plus tard)
  V->>A: Requete preuve
  A-->>V: R (rejoue)
  V->>V: Accepte si R attendu


2 2) echange 2 — Cle -> ChallengeRand -> Signed Response -> Chiffrement

2.1 2.1 Sequence

sequenceDiagram
  autonumber
  participant V as Verifieur
  participant P as Prouveur

  Note over P: K = secret partage (MAC) ou cle privee (signature)
  V->>P: C = Random() (challenge)
  P-->>V: S = MAC/Sign(K, C)
  V->>V: Verifie S

  alt S valide
    Note over V,P: cle_session = KDF(C, transcript)
    V->>P: Demarre chiffrement (session)
    P-->>V: OK (session active)
  else S invalide
    V-->>P: Reject
  end

2.2 2.2 Attaques typiques (classes)

  • Replay : normalement bloque si C est unique et verifie.
  • RNG faible : challenge predictible -> pre-calcul / reutilisation.
  • MitM sur negociation crypto : downgrade/strip si transcript pas authentifie.
  • Relai (relay attack) : l’attaquant relaie C au vrai P et renvoie S a V.
  • DoS : flood de challenges (cout calcul cote P).

2.3 2.3 Attaque illustree — Relai (cable humain)

sequenceDiagram
  autonumber
  participant V as Verifieur
  participant A as Relai
  participant P as Prouveur

  Note over A: Attaquant = "cable humain" (relay)
  V->>A: C = Random()
  A->>P: C (relay)
  P-->>A: S = MAC/Sign(K, C)
  A-->>V: S (relay)
  V->>V: Verifie S -> OK


3 3) echange 3 — Cle -> ChallengeRand + Nonce(s) -> Signed Response -> Chiffrement

3.1 3.1 Sequence

sequenceDiagram
  autonumber
  participant V as Verifieur
  participant P as Prouveur

  Note over P: K = secret (MAC) ou cle privee (signature)
  V->>P: C = Random(), Nv = NonceV
  P-->>V: Np = NonceP
  P-->>V: S = MAC/Sign(K, C + Nv + Np)
  V->>V: Verifie S

  alt S valide
    Note over V,P: cle_session = KDF(C, Nv, Np, IDs, params)
    V->>P: Demarre chiffrement (session)
    P-->>V: OK (session active)
  else S invalide
    V-->>P: Reject
  end

3.2 3.2 Attaques typiques (classes)

  • Relai : toujours possible meme avec nonces (forward en live, aucune forge).
  • RNG faible : C/Nv/Np predictibles -> memes problemes que (2).
  • Replay : bloque si C/Nv uniques et correctement verifies.
  • Reflection : si roles confondus / messages symetriques sans separation de domaine.
  • Unknown key-share : si IDs/roles/params pas inclus dans ce qui est MACe/signe.
  • Downgrade / transcript tampering : si la cle session ne lie pas le transcript complet.

3.3 3.3 Attaque illustree — Relai malgre nonces (fraicheur != proximite)

sequenceDiagram
  autonumber
  participant V as Verifieur
  participant A as Relai
  participant P as Prouveur

  Note over A: Attaquant relaie tout en temps reel
  V->>A: C, Nv
  A->>P: C, Nv (relay)
  P-->>A: Np
  P-->>A: S = MAC/Sign(K, C + Nv + Np)
  A-->>V: Np
  A-->>V: S (relay)
  V->>V: Verifie S -> OK
  Note over V,A: V accepte, mais A n'est pas P (attaque de proximite)


4 Tableau — classes d’attaques (resume)

Classe d’attaque 1) Reponse statique 2) Challenge+Sign 3) + Nonces + transcript
Replay (rejeu) Vulnerable Bloque si bien fait Bloque si bien fait
Relai / Proximite (relay) N/A Vulnerable Vulnerable
RNG faible / challenge predictible N/A Vulnerable Vulnerable
Downgrade / strip (nego crypto) N/A Possible Reduit si transcript lie
Reflection (roles confondus) N/A Possible Reduit si domain-sep
Unknown key-share / identite mal liee Possible Possible Reduit si IDs inclus
Brute-force offline (si MAC/cle faibles) Possible Selon construction Selon construction
DoS (flood de challenges) Faible Vulnerable Vulnerable

5 Conclusion

  • echange 1 (statique) : casse par replay (et clonage).
  • echange 2 (challenge–response) : solide contre replay si RNG correct, mais vulnerable au relai et aux downgrades si le transcript n’est pas authentifie.
  • echange 3 (nonces + transcript) : meilleure liaison de session/parametres, mais le relai reste possible sans preuve de proximite (distance-bounding / timing / canal).