Project Oxygen & Ideo-LabIDEO LAB Dashboard 2026
IDEO-LAB HANDBOOK · PAGE 3 · CRYPTOGRAPHY, TRUST & DEFENSIVE AI

🔐 Cryptography & Trust Engineering for AI Cyber Defense

Cette page reprend le fichier d’origine et remplace les modales rĂ©pĂ©titives par un vrai contenu pĂ©dagogique : PKI, TLS, JWT/OIDC, secrets, chiffrement symĂ©trique/asymĂ©trique, post-quantique, revue de code crypto, CertOps et rapport d’audit. Tous les exemples sont orientĂ©s dĂ©fense, audit autorisĂ©, remĂ©diation et validation humaine.

3.1Avancé

PKI & X.509

Chaßne de confiance, CA, certificats, révocation, private PKI et audit défensif assisté IA.

PKIX.509CA
3.2Avancé

TLS 1.3 en profondeur

Handshake, PFS, ALPN, OCSP, HSTS, mTLS, Nginx et validation continue.

TLSPFSmTLS
3.3Avancé

JWT, OAuth2, OIDC

Validation stricte, claims, audiences, JWKS, rotation et piĂšges applicatifs.

JWTOIDCJWKS
3.4Avancé

Secrets & Key Management

Vault, KMS, HSM, CI/CD, rotation, détection et remédiation des secrets.

KMSHSMVault
3.5Avancé

AES, AEAD, HMAC

Modes sĂ»rs, nonces, intĂ©gritĂ©, password hashing et erreurs d’implĂ©mentation.

AESGCMHMAC
3.6Avancé

RSA, ECC, Ed25519, X25519

Signatures, Ă©changes de clĂ©s, SSH, migration d’algorithmes et usages corrects.

RSAECCEdDSA
3.7Avancé

Post-Quantum Readiness

Inventaire, ML-KEM, ML-DSA, hybridation, données longues et roadmap PQC.

PQCML-KEMRoadmap
3.8Avancé

Revue de code crypto

Patterns dangereux en Python, Java, JavaScript, Django et PR sécurisée.

Code reviewSASTDjango
3.9Avancé

Certificate Operations

Inventory, ACME, mTLS, monitoring, expiration et runbook d’urgence.

CertOpsACMEMonitoring
3.10Avancé

Rapport d’audit crypto

Findings actionnables, scoring, preuves, roadmap 30/60/90 et management.

ReportRiskCompliance
3.1 — PKI & X.509 : construire et auditer une chaüne de confiance

Une PKI n’est pas seulement une pile de certificats : c’est un systĂšme de gouvernance, d’identitĂ©, de rĂ©vocation, de rotation et d’exploitation. Un modĂšle Mythos-like peut aider Ă  cartographier cette confiance, mais chaque conclusion doit rester vĂ©rifiable.

La PKI comme systĂšme de confiance

Une PKI rĂ©pond Ă  une question simple : comment un client peut-il faire confiance Ă  l’identitĂ© cryptographique d’un serveur, d’un service ou d’un utilisateur ? La rĂ©ponse repose sur une hiĂ©rarchie de certificats, de politiques, de clĂ©s privĂ©es et de magasins de confiance.

  • Root CA : ancre de confiance, rarement utilisĂ©e directement, trĂšs protĂ©gĂ©e.
  • Intermediate CA : signe les certificats opĂ©rationnels, permet de limiter l’exposition de la root.
  • Leaf certificate : certificat utilisĂ© par un site, une API, un service interne ou un client mTLS.
  • Trust store : liste des autoritĂ©s auxquelles l’environnement fait confiance.
  • Policy : rĂšgles de durĂ©e, usage, rotation, rĂ©vocation, algorithmes, ownership.
Lecture dĂ©fensive : la question n’est pas seulement “le certificat est-il valide ?”, mais “la chaĂźne est-elle gouvernĂ©e, renouvelable, surveillĂ©e et compatible avec le risque mĂ©tier ?”
Client / Service
  ↓ vĂ©rifie
Leaf certificate
  ↓ signĂ© par
Intermediate CA
  ↓ signĂ© par
Root CA
  ↓ prĂ©sente dans
Trust Store

Si une seule étape est cassée :
- certificat expiré
- SAN incorrect
- intermédiaire manquant
- algorithme faible
- trust store incohérent
→ rupture de confiance ou risque opĂ©rationnel.
ObjetRĂŽle dĂ©fensifQuestion d’audit
Root CAAncre de confianceEst-elle hors ligne, protégée, documentée ?
Intermediate CASignature opérationnelleRotation et révocation maßtrisées ?
LeafIdentité du serviceSAN, EKU, validité, clé et usage corrects ?
CRL/OCSPRévocationFonctionne-t-elle réellement dans vos clients ?
InventaireExploitationQui possĂšde quel certificat et quand expire-t-il ?
Ce qu’un modùle doit extraire d’un certificat

Un certificat X.509 transporte bien plus qu’un nom de domaine. Il contient un ensemble de champs qui dĂ©terminent son usage, sa validitĂ©, sa chaĂźne de confiance et sa robustesse cryptographique.

ChampPourquoi c’est important
Subject / IssuerRelie le certificat Ă  l’entitĂ© et Ă  l’autoritĂ© signataire.
SANLe navigateur et beaucoup de clients modernes valident le nom via SAN, pas seulement CN.
Key UsageDéfinit si la clé peut signer, chiffrer, établir une session.
Extended Key UsageDifférencie serverAuth, clientAuth, codeSigning, emailProtection.
ValidityFenĂȘtre opĂ©rationnelle ; expiration = incident probable.
Signature AlgorithmDoit éviter MD5/SHA-1 et algorithmes dépréciés.
Public KeyType et taille : RSA, ECDSA, Ed25519 selon environnement.
Commande de lecture défensive
# Inspection locale d’un certificat fourni par l’équipe interne
openssl x509 -in server.crt -noout -text

# Vérifier subject, issuer, SAN, KU/EKU, dates, algorithme de signature
# Ne pas collecter de clé privée dans un outil IA.
Extraction structurée attendue
{
  "asset": "api.example.com",
  "issuer": "Example Intermediate CA",
  "san": ["api.example.com", "api.internal.example.com"],
  "not_after": "2026-11-12",
  "key_algorithm": "ECDSA P-256",
  "signature_algorithm": "sha256WithECDSA",
  "eku": ["serverAuth"],
  "findings": [
    "OCSP stapling not observed",
    "expiration monitoring required"
  ]
}
RĂšgle : l’IA peut analyser des mĂ©tadonnĂ©es de certificats, jamais recevoir de clĂ©s privĂ©es, secrets PKCS#12 non protĂ©gĂ©s ou dumps sensibles.
Pourquoi la chaĂźne casse souvent en production

Les incidents TLS/PKI les plus frĂ©quents ne viennent pas de mathĂ©matiques cassĂ©es, mais d’exploitation : intermĂ©diaire oubliĂ©, certificat expirĂ©, SAN incomplet, trust store diffĂ©rent entre environnements, ou renouvellement manuel ratĂ©.

  • Un certificat leaf est renouvelĂ© mais l’intermĂ©diaire n’est pas servi par Nginx.
  • Un service interne fait confiance Ă  une ancienne CA supprimĂ©e du trust store.
  • Un certificat wildcard couvre trop de services et complique l’isolation.
  • Un client mTLS utilise un EKU inadaptĂ© ou une CA trop large.
  • Une chaĂźne passe sur un navigateur mais Ă©choue sur Java, Python ou un Ă©quipement rĂ©seau.
# Vérifier la chaßne servie par un endpoint interne autorisé
openssl s_client -connect api.example.com:443 -servername api.example.com -showcerts

# Points à vérifier :
# - Le serveur renvoie-t-il la chaĂźne complĂšte ?
# - Le certificat leaf correspond-il au SNI ?
# - L’intermĂ©diaire est-il correct ?
# - Les dates et l’algorithme sont-ils acceptables ?
Incident typique

Renouvellement certificat
  ↓
Leaf installé
  ↓
Intermediate oublié
  ↓
Certains clients acceptent via cache
  ↓
Clients Java / mobile / IoT échouent
  ↓
Incident intermittent difficile Ă  diagnostiquer

Solution :
inventaire + automation + test multi-clients + monitoring.
ValidationPourquoi
OpenSSLVérifie chaßne, SNI, dates, certificats servis.
Java truststoreDétecte les différences JVM/cacerts.
NavigateursValide comportement utilisateur final.
mTLS clientVérifie EKU clientAuth et CA attendue.
MonitoringDétecte expiration avant incident.
Révocation : souvent mal comprise

Révoquer un certificat ne signifie pas toujours que tous les clients le rejetteront immédiatement. CRL, OCSP, OCSP stapling et certificats courts ont des comportements variables selon clients, politiques et disponibilité réseau.

MécanismeAvantageLimite
CRLSimple, historiqueListes lourdes, rafraĂźchissement lent.
OCSPStatut par certificatDĂ©pend d’un service en ligne, privacy/availability.
OCSP staplingLe serveur fournit la preuveDoit ĂȘtre correctement configurĂ© et renouvelĂ©.
Short-lived certsRéduit besoin de révocationExige automation fiable.
mTLS revocationTrÚs important pour clients compromisNécessite design opérationnel clair.
Usage IA : demander au modĂšle d’identifier les scĂ©narios oĂč la rĂ©vocation est supposĂ©e fonctionner mais n’est pas testĂ©e.
Clé privée soupçonnée compromise
  ↓
Identifier certificats associés
  ↓
Révoquer via CA
  ↓
Vérifier publication CRL/OCSP
  ↓
Déployer certificat remplacant
  ↓
Tester clients critiques
  ↓
Journaliser l’incident
  ↓
Mettre Ă  jour inventaire et postmortem
Comment utiliser un modĂšle type Mythos-like

Le modĂšle peut relire une exportation d’inventaire, des outputs OpenSSL, la configuration Nginx, les policies de CA internes et les tickets d’incident. Il doit produire une analyse structurĂ©e : preuve → risque → correction → validation.

Prompt défensif :

Voici un inventaire de certificats, une configuration Nginx et des outputs openssl.
1. Identifie les certificats proches expiration.
2. Détecte SAN manquants, algorithmes faibles, EKU incohérents.
3. Signale les chaĂźnes incomplĂštes.
4. Classe les risques selon exposition et criticité métier.
5. Propose un plan de correction et des tests.
6. Ne suppose rien sans preuve ; indique les incertitudes.
EntréeAutoriséInterdit
Certificats publicsOuiN/A
Private keysNonNe jamais envoyer
Configs Nginx anonymiséesOuiSecrets et chemins sensibles
Logs TLSOui si minimisésPII, tokens, secrets
Trust store exportOuiMots de passe keystore
Format de finding attendu
Finding: Intermediate certificate not served
Evidence:
- openssl s_client output: verify return code 21
- nginx ssl_certificate points to leaf only
Impact:
- Certains clients ne peuvent pas valider la chaĂźne.
- Risque d’indisponibilitĂ© partielle.
Remediation:
- Installer fullchain.pem.
Validation:
- openssl s_client with SNI.
- Test Java client.
- Monitoring synthetic check.
Residual risk:
- Faible aprĂšs automation du renouvellement.
Checklist opérationnelle
  • Inventaire complet des certificats publics, internes et mTLS.
  • Owner mĂ©tier et owner technique pour chaque certificat.
  • Alerte Ă  J-60, J-30, J-14, J-7 et J-1 avant expiration.
  • ChaĂźne complĂšte vĂ©rifiĂ©e avec SNI.
  • SAN corrects, pas de CN legacy comme seule source d’identitĂ©.
  • EKU cohĂ©rent avec l’usage : serverAuth, clientAuth, codeSigning.
  • Algorithmes modernes : SHA-256 ou mieux, clĂ©s conformes aux politiques.
  • ProcĂ©dure de rĂ©vocation testĂ©e au moins une fois par an.
  • Pas de clĂ© privĂ©e dans Git, tickets, logs, prompts ou exports non chiffrĂ©s.
  • Runbook de rotation d’urgence documentĂ©.
Questions d’entretien
  1. Pourquoi un certificat valide peut-il échouer sur certains clients ?
  2. Quelle différence entre root CA, intermediate CA et leaf certificate ?
  3. Pourquoi le SAN est-il critique ?
  4. Comment testeriez-vous un incident d’intermĂ©diaire manquant ?
  5. Quand choisir mTLS plutît qu’un simple bearer token ?
  6. Comment gérer une clé privée compromise ?
3.2 — TLS 1.3 : handshake, durcissement et validation continue

TLS protĂšge les flux, mais son efficacitĂ© dĂ©pend de la configuration, de la chaĂźne, des versions, des ciphers, des certificats et de l’exploitation. L’IA peut aider Ă  relier configuration, tests et risques mĂ©tier.

Ce que TLS 1.3 simplifie

TLS 1.3 réduit la surface de négociation, supprime plusieurs algorithmes historiques et rend la confidentialité persistante plus naturelle grùce aux échanges éphémÚres. Pour un ingénieur défense, il faut comprendre le handshake pour diagnostiquer les erreurs et choisir les bons contrÎles.

  • Le client envoie ClientHello avec SNI, ALPN, versions supportĂ©es et groupes clĂ©s.
  • Le serveur rĂ©pond avec son certificat et les paramĂštres choisis.
  • L’échange Ă©phĂ©mĂšre permet la Perfect Forward Secrecy.
  • Les clĂ©s de session sont dĂ©rivĂ©es et utilisĂ©es pour protĂ©ger le trafic applicatif.
  • ALPN permet de nĂ©gocier HTTP/2 ou HTTP/1.1.
TLS 1.3 simplifié

ClientHello
  SNI + ALPN + key share
        ↓
ServerHello
  selected key share + certificate
        ↓
Certificate verification
        ↓
Finished messages
        ↓
Encrypted HTTP traffic

Point défense :
observer version, certificat, ALPN, SNI, PFS et erreurs clients.
ÉlĂ©mentRisque si mal gĂ©rĂ©
SNIMauvais certificat servi, échec multi-domaines.
ALPNHTTP/2 absent ou mal négocié.
PFSRisque historique si clés long terme compromises.
0-RTTRisque de rejeu si activé sans prudence.
Cert chainÉchecs intermittents selon clients.
Durcissement sans dogmatisme

Une configuration TLS doit ĂȘtre moderne, mais aussi compatible avec les clients rĂ©els. Le rĂŽle d’un modĂšle IA est d’identifier les options dangereuses, les incohĂ©rences et les Ă©carts par rapport Ă  la politique de l’entreprise.

# Exemple indicatif à adapter et tester, pas à coller aveuglément
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers off;

ssl_certificate     /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

ssl_session_timeout 1d;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
Attention : HSTS includeSubDomains peut casser des sous-domaines non prĂȘts. Toujours auditer l’ensemble du domaine avant activation longue durĂ©e.
DirectivePourquoi
TLSv1.2/TLSv1.3Compatibilité maßtrisée ; TLS 1.0/1.1 à éviter.
fullchain.pemSert leaf + intermédiaires.
session_tickets offRéduit risques liés à clés de tickets mal gérées.
HSTSForce HTTPS cÎté navigateur.
OCSP staplingAméliore validation révocation si correctement configurée.
Tests à intégrer en CI ou monitoring

Le test TLS ne doit pas ĂȘtre manuel tous les six mois. Il doit ĂȘtre automatisĂ© en prĂ©production, en production et lors de chaque renouvellement majeur.

# Vérifier handshake, SNI et chaßne
openssl s_client -connect example.com:443 -servername example.com -showcerts

# Vérifier dates du certificat
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null   | openssl x509 -noout -dates -issuer -subject

# Test synthétique cÎté applicatif
curl -Iv https://example.com/
  • Tester depuis plusieurs rĂ©seaux si CDN, WAF ou reverse proxies.
  • Tester clients critiques : Java, Python, mobile, Ă©quipements legacy.
  • VĂ©rifier HTTP vers HTTPS, HSTS et absence de mixed content.
  • Mettre une alerte avant expiration et aprĂšs renouvellement.
Déploiement TLS
  ↓
Test openssl
  ↓
Test curl
  ↓
Test client applicatif réel
  ↓
Test monitoring externe
  ↓
Validation logs Nginx / ALB
  ↓
Ticket clÎturé avec preuves
Incidents typiques et diagnostic
SymptÎmeCause fréquentePreuve
Certificat expiréRenouvellement ACME échouénotAfter dépassé
Échec mobile uniquementChaüne incomplùte ou trust store anciens_client + logs mobile
Erreur sur un sous-domaineSAN absentsubjectAltName
HTTP/2 non disponibleALPN non configuréopenssl/curl -I
Alerte navigateur HSTSPolitique trop agressiveheader HSTS + sous-domaines
Ce que l’IA doit produire
  • HypothĂšses classĂ©es par probabilitĂ©.
  • Commandes de validation dĂ©fensive.
  • Risques opĂ©rationnels associĂ©s.
  • RemĂ©diation avec rollback.
  • Message clair pour support et management.
Finding: HSTS includeSubDomains enabled while legacy subdomain remains HTTP-only
Evidence:
- Response header on apex domain includes includeSubDomains.
- legacy.example.com does not serve valid HTTPS.
Impact:
- Browsers may refuse access after HSTS caching.
Remediation:
- Enable HTTPS on legacy subdomain or remove includeSubDomains until ready.
Validation:
- Browser clean profile + curl + synthetic monitoring.
mTLS : identité machine à machine

mTLS ajoute une authentification du client par certificat. C’est puissant pour service-to-service, mais demande une discipline opĂ©rationnelle : Ă©mission, distribution, rotation, rĂ©vocation, mapping d’identitĂ© et logs.

  • Utiliser une CA dĂ©diĂ©e aux clients mTLS, pas la mĂȘme que les certificats publics.
  • Limiter les EKU Ă  clientAuth pour les certificats clients.
  • Mapper l’identitĂ© certificat vers un service, pas vers un humain gĂ©nĂ©rique.
  • DĂ©finir une durĂ©e de vie courte si l’automation le permet.
  • Journaliser subject/SAN/serial sans exposer de donnĂ©es inutiles.
Service A
  présente client certificate
        ↓
Gateway / Service B
  vérifie CA + EKU + identité
        ↓
Policy mapping
  subject/SAN → service identity
        ↓
Autorisation
  service A peut appeler endpoint X
PiĂšge : mTLS authentifie une entitĂ© technique ; il ne remplace pas toujours l’autorisation applicative fine.
Checklist rapide
  • TLS 1.0/1.1 dĂ©sactivĂ©s sauf contrainte documentĂ©e.
  • TLS 1.3 activĂ© si stack compatible.
  • ChaĂźne complĂšte servie avec SNI.
  • Certificats surveillĂ©s et renouvelĂ©s automatiquement.
  • HSTS activĂ© progressivement, includeSubDomains seulement aprĂšs inventaire.
  • OCSP stapling Ă©valuĂ© et testĂ© si utilisĂ©.
  • Pas de clĂ©s privĂ©es dans tickets, prompts ou dĂ©pĂŽts.
  • Tests multi-clients aprĂšs chaque changement.
  • Runbook d’expiration et rollback disponible.
Questions d’entretien
  1. Expliquez la différence entre TLS 1.2 et TLS 1.3 cÎté handshake.
  2. Pourquoi fullchain.pem est-il important ?
  3. Quels risques liés à HSTS includeSubDomains ?
  4. Comment diagnostiquer une erreur TLS uniquement cÎté Java ?
  5. Quand utiliser mTLS ?
3.3 — JWT, OAuth2, OIDC : validation stricte et dĂ©rives applicatives

Les tokens sont souvent le point le plus fragile de l’authentification moderne. L’IA peut aider Ă  relire code, configuration IdP, claims, JWKS et logs pour dĂ©tecter des Ă©carts de validation.

JWT : transport de claims, pas preuve magique

Un JWT est un conteneur signĂ© contenant des claims. Sa sĂ©curitĂ© dĂ©pend de la signature, de l’algorithme attendu, de l’émetteur, de l’audience, des dates, de la rotation des clĂ©s et du contexte applicatif.

  • Header : algorithme, type, key id.
  • Payload : claims comme sub, iss, aud, exp, nbf, scope.
  • Signature : protĂšge l’intĂ©gritĂ© et l’authenticitĂ©.
  • JWKS : distribution des clĂ©s publiques pour vĂ©rifier les signatures.
  • IdP : fournisseur d’identitĂ© qui Ă©met les tokens.
Client
  ↓ obtient token
Identity Provider
  ↓ signe JWT
API Gateway / Backend
  ↓ vĂ©rifie signature + claims
Ressource protégée

Défense :
ne jamais décoder seulement.
toujours vérifier signature + issuer + audience + expiration + scopes.
Ce qu’une API doit valider
ContrĂŽleRaison
SignatureEmpĂȘche modification du payload.
alg attenduÉvite l’acceptation d’algorithmes non prĂ©vus.
issVĂ©rifie l’émetteur.
audVérifie que le token est destiné à cette API.
exp / nbfContrĂŽle la fenĂȘtre temporelle.
scope / rolesAutorisation applicative.
kid/JWKSAssocie correctement la clé de vérification.
# Pseudo-code défensif
token = parse_authorization_header(request)
claims = jwt_library.verify(
    token,
    jwks=trusted_jwks,
    allowed_algorithms=["RS256", "ES256"],
    issuer="https://idp.example.com/",
    audience="api://orders"
)
require_scope(claims, "orders:read")
Point clĂ© : beaucoup d’incidents viennent d’un token “dĂ©codĂ©â€ mais non vĂ©rifiĂ©, ou vĂ©rifiĂ© sans audience.
Validation JWT robuste
  ↓
1. Extraire Bearer token
2. Vérifier signature
3. Vérifier algorithme autorisé
4. Vérifier issuer
5. Vérifier audience
6. Vérifier dates
7. Vérifier scopes/roles
8. Appliquer autorisation métier
Erreurs que l’IA peut repĂ©rer dans le code
Mauvaise pratiqueImpact
jwt.decode sans verifyLe backend fait confiance à un contenu non authentifié.
aud non vérifiéeToken destiné à une autre API accepté.
exp ignoréeToken réutilisable aprÚs expiration.
secret HS256 faibleRisque de compromission si secret exposé/faible.
roles dans token sans contrĂŽle serveurAutorisation trop naĂŻve.
refresh token en localStorageRisque XSS cÎté navigateur.
Exemple de finding défensif
Finding: Audience claim not enforced
Evidence:
- Auth middleware verifies signature but does not check aud.
- API expects tokens for api://orders.
Impact:
- A token issued for another service may be accepted.
Remediation:
- Configure JWT verifier with strict audience.
Validation:
- Unit test rejects token with wrong aud.
Anti-patterns cÎté architecture
  • Multiplier les middlewares maison dans plusieurs services.
  • Copier des secrets JWT dans variables d’environnement non gĂ©rĂ©es.
  • Confondre authentification et autorisation.
  • Utiliser des tokens trop longs sans rotation ou revocation strategy.
  • Absence de logs utiles sur rejets de tokens.
Rotation des clés de signature

La rotation JWKS doit ĂȘtre conçue pour Ă©viter deux incidents opposĂ©s : accepter indĂ©finiment de vieilles clĂ©s, ou casser l’API au moment de la rotation.

  • Les tokens existants peuvent rester valides jusqu’à expiration.
  • Les backends doivent rafraĂźchir JWKS avec cache maĂźtrisĂ©.
  • Le kid doit permettre d’identifier la bonne clĂ©.
  • Les clĂ©s retirĂ©es trop tĂŽt provoquent des erreurs 401 massives.
  • Les clĂ©s conservĂ©es trop longtemps augmentent le risque rĂ©siduel.
Rotation JWKS
  ↓
1. Publier nouvelle clé
2. Commencer à signer avec nouvelle clé
3. Laisser expirer tokens signés ancienne clé
4. Retirer ancienne clé
5. Vérifier taux 401 et logs
Usage IA : analyser logs 401 autour d’une rotation pour distinguer bug de dĂ©ploiement, cache JWKS ou vraie anomalie.
Ne pas confondre les rĂŽles
ÉlĂ©mentRĂŽle
OAuth2Autorisation déléguée.
OIDCIdentitĂ© construite au-dessus d’OAuth2.
Access tokenAccÚs API, durée courte.
ID tokenInformation d’identitĂ© pour client, pas toujours destinĂ© Ă  l’API.
Refresh tokenObtention de nouveaux access tokens, trĂšs sensible.
Authorization code + PKCEFlux recommandé pour clients publics.

Un moteur IA doit vĂ©rifier que l’API ne traite pas n’importe quel token comme preuve d’identitĂ©. L’audience et l’usage du token sont essentiels.

Mauvaise architecture
ID token → API backend → accùs ressources

Architecture attendue
Access token destinĂ© Ă  l’API
  ↓
Vérification signature + aud + scopes
  ↓
Autorisation métier
Tests défensifs à écrire
  • Rejeter un token expirĂ©.
  • Rejeter un token avec mauvais issuer.
  • Rejeter un token avec mauvaise audience.
  • Rejeter un token signĂ© par une clĂ© inconnue.
  • Rejeter un token avec scope insuffisant.
  • Accepter uniquement algorithmes explicitement configurĂ©s.
  • VĂ©rifier que les erreurs ne rĂ©vĂšlent pas de dĂ©tails sensibles.
  • Tester rotation JWKS en prĂ©production.
# Exemple de test conceptuel
def test_reject_wrong_audience(api_client, token_factory):
    token = token_factory(aud="api://billing")
    response = api_client.get("/api/orders", headers={"Authorization": "Bearer " + token})
    assert response.status_code == 401
Checklist audit IA
ArtefactQuestion
MiddlewareVérifie-t-il signature, iss, aud, exp ?
Config IdPLes audiences/scopes sont-ils documentés ?
LogsPeut-on distinguer expiration, scope, signature ?
FrontendOĂč sont stockĂ©s les tokens ?
RotationJWKS cache et retrait de clés testés ?
3.4 — Secrets & Key Management : Ă©viter l’incident banal qui devient critique

La gestion des secrets est rarement un problùme cryptographique pur ; c’est un problùme d’inventaire, d’accùs, de rotation, de CI/CD, d’incident response et de culture DevSecOps.

Qu’est-ce qu’un secret ?
TypeExemplesRisque
API keysStripe, SendGrid, OpenAI, AWS access keysUsage frauduleux, exfiltration.
DB credentialsUser/password MariaDB/PostgreSQLAccÚs données.
Private keysTLS, SSH, signing keysUsurpation identité.
Tokens CI/CDGitHub, registry, deploy tokenSupply chain compromise.
Encryption keysKMS data keys, app keysDéchiffrement ou corruption.
JWT secretsHS256 shared secretSignature de tokens si compromis.

Un modÚle IA peut classer les secrets détectés, mais ne doit pas les recevoir en clair. Il faut redacter, hacher ou remplacer par des marqueurs.

Secret lifecycle

Create
  ↓
Store securely
  ↓
Use with least privilege
  ↓
Monitor
  ↓
Rotate
  ↓
Revoke
  ↓
Destroy / archive evidence
RĂšgle : un secret trouvĂ© dans Git doit ĂȘtre considĂ©rĂ© compromis, mĂȘme si le commit a Ă©tĂ© supprimĂ©.
Choisir le bon niveau de protection
SolutionUsage typiquePoint de vigilance
KMS cloudChiffrement applicatif, enveloppe, rotation gérée.IAM et policies trÚs strictes.
VaultSecrets dynamiques, leasing, rotation, accĂšs applicatif.HA, unseal, policies, audit logs.
HSMRacines de confiance, signatures critiques, clés non exportables.Coût, intégration, performance.
Secrets managerSecrets applicatifs avec rotation.Ne pas donner accĂšs trop large aux workloads.
Ce que l’IA peut vĂ©rifier
  • Les workloads ont-ils seulement accĂšs aux secrets nĂ©cessaires ?
  • Les clĂ©s KMS sont-elles sĂ©parĂ©es par environnement ?
  • Les politiques permettent-elles un accĂšs wildcard dangereux ?
  • Les rotations sont-elles rĂ©ellement activĂ©es ou seulement documentĂ©es ?
Exemple de finding défensif :

Finding: Production deployment role can read all secrets in account
Evidence:
- IAM policy contains secretsmanager:GetSecretValue on resource "*"
Impact:
- Compromise of CI/CD role exposes database, API and signing secrets.
Remediation:
- Restrict policy to explicit secret ARNs per application.
Validation:
- IAM access analyzer + integration test deploy.
Le pipeline est un coffre-fort exposé

Un pipeline CI/CD peut construire, signer, publier et dĂ©ployer. S’il contient des secrets trop puissants, la compromission du pipeline devient une compromission de production.

  • Utiliser OIDC federation vers cloud plutĂŽt que clĂ©s statiques longues.
  • Limiter les secrets par environnement : dev, staging, prod.
  • Éviter les secrets dans logs de build.
  • EmpĂȘcher les workflows de forks non fiables d’accĂ©der aux secrets.
  • VĂ©rifier les permissions GitHub Actions ou GitLab CI.
Developer push
  ↓
CI workflow
  ↓
Build artifact
  ↓
Registry
  ↓
Deploy role
  ↓
Production

Question défense :
Quelle identité peut lire quels secrets à chaque étape ?
ContrĂŽleTest
Secret maskingForcer échec et vérifier logs.
OIDCPas de cloud keys statiques dans CI.
Branch protectionSecrets prod uniquement depuis branches protégées.
Environment approvalDéploiement prod validé humainement.
Least privilegeDeploy role limité par service.
Planifier la rotation avant l’incident

La rotation ne doit pas ĂȘtre improvisĂ©e pendant une fuite. Elle doit ĂȘtre testĂ©e avec double publication, pĂ©riode de chevauchement, rollback et validation applicative.

Rotation sûre

1. Créer nouveau secret
2. Déployer application capable de lire nouveau + ancien
3. Basculer production vers nouveau
4. Vérifier logs et métriques
5. Révoquer ancien secret
6. Confirmer qu’aucun client ne l’utilise
Runbook en cas de fuite
  1. Identifier le secret et son périmÚtre exact.
  2. Révoquer ou désactiver immédiatement si possible.
  3. Créer un secret de remplacement.
  4. Déployer la configuration corrigée.
  5. Rechercher usages suspects dans logs.
  6. Nettoyer dĂ©pĂŽts, tickets et artefacts, mais ne pas croire que l’historique supprimĂ© suffit.
  7. Documenter l’incident et amĂ©liorer les contrĂŽles.
Détection sans exfiltrer

Un agent IA ne doit pas collecter des secrets bruts. Il peut recevoir des métadonnées : type détecté, chemin, commit, date, statut actif/inactif, propriétaire, environnement.

EntrĂ©e autorisĂ©e vers l’IA :
{
  "type": "AWS_ACCESS_KEY_ID",
  "file": "settings.py",
  "line": 42,
  "secret_redacted": "AKIA************",
  "commit_date": "2026-07-09",
  "environment": "unknown",
  "active_status": "not_tested"
}

Entrée interdite :
la clé complÚte, le secret complet, un dump .env complet.
RisqueAction IA
Secret prod actifPriorité critique, rotation immédiate.
Secret test inactifNettoyage + prévention.
Private key TLSRévocation certificat + rotation clé.
Token CI/CDRévoquer token + auditer workflows.
DB passwordRotation + revue accĂšs + logs.
Checklist secrets
  • Aucun secret dans Git, Dockerfile, logs, tickets, prompts.
  • Secrets par environnement et par service.
  • IAM minimal pour accĂ©der aux secrets.
  • Rotation testĂ©e et documentĂ©e.
  • DĂ©tection prĂ©-commit et cĂŽtĂ© serveur.
  • Logs de consultation des secrets activĂ©s.
  • ProcĂ©dure de rĂ©vocation d’urgence disponible.
  • OIDC CI/CD prĂ©fĂ©rĂ© aux clĂ©s cloud statiques.
  • Pas de clĂ© privĂ©e envoyĂ©e Ă  un modĂšle IA.
  • Revue rĂ©guliĂšre des secrets orphelins.
Questions d’entretien
  1. Pourquoi supprimer un secret de Git ne suffit-il pas ?
  2. Comment organiser une rotation sans downtime ?
  3. Différence entre KMS, HSM et secrets manager ?
  4. Comment empĂȘcher un workflow CI de lire les secrets prod ?
  5. Quelles métadonnées peut-on envoyer à un modÚle IA sans fuite ?
3.5 — AES, AEAD, HMAC : chiffrement symĂ©trique sans bricolage

Le chiffrement symĂ©trique est rapide et robuste quand il est utilisĂ© correctement. Les erreurs classiques viennent des modes, des nonces, de l’absence d’authentification et du stockage des clĂ©s.

AES n’est pas un mode

AES est un bloc cipher. Son usage sĂ»r dĂ©pend du mode. Beaucoup de vulnĂ©rabilitĂ©s viennent d’un mode inadaptĂ©, d’un IV rĂ©utilisĂ©, ou de l’absence d’authentification.

ModeStatut défensif
ECBÀ Ă©viter : rĂ©vĂšle les motifs.
CBCÀ utiliser seulement avec grande prudence et authentification sĂ©parĂ©e.
GCMAEAD moderne, exige nonce unique.
CTRChiffrement en flot, exige nonce/compteur unique et authentification.
XTSUsage stockage disque, pas messages applicatifs génériques.
RÚgle moderne : préférer AEAD comme AES-GCM ou ChaCha20-Poly1305 via une bibliothÚque maintenue.
Mauvais réflexe
AES + mode choisi au hasard + IV constant
  ↓
risque cryptographique

Bon réflexe
Librairie maintenue
  ↓
AEAD
  ↓
nonce unique
  ↓
key management
  ↓
tests et rotation
Authenticated Encryption with Associated Data

AEAD fournit confidentialité et intégrité. On peut aussi authentifier des données non chiffrées mais liées au message : version, tenant, user id, contexte de protocole.

  • Le ciphertext seul ne suffit pas ; le tag d’authentification est indispensable.
  • Le nonce doit ĂȘtre unique pour une clĂ© donnĂ©e.
  • L’AAD doit ĂȘtre identique lors du chiffrement et du dĂ©chiffrement.
  • Une erreur de tag doit ĂȘtre traitĂ©e comme Ă©chec de sĂ©curitĂ©, pas comme simple bug.
# Pseudo-code conceptuel
nonce = secure_random_96_bits()
aad = "tenant=acme;purpose=session-v1"
ciphertext, tag = aead_encrypt(key, nonce, plaintext, aad)

# À stocker/transmettre :
version || key_id || nonce || aad_id || ciphertext || tag
ÉlĂ©mentÀ journaliser ?Pourquoi
key_idOuiAide rotation et debug sans exposer clé.
nonceOui selon contexteN’est pas secret, utile diagnostic.
ciphertextNon en logs applicatifsPeut contenir données sensibles chiffrées.
tagNon nécessairePas utile en logs standard.
plaintextJamaisDonnée sensible.
Le piÚge numéro 1 : la réutilisation

Dans beaucoup de modes modernes, rĂ©utiliser un nonce avec la mĂȘme clĂ© peut ĂȘtre catastrophique. L’IA doit rechercher les patterns de nonce constant, compteur mal initialisĂ©, random insuffisant ou valeurs dĂ©rivĂ©es prĂ©dictibles.

Pattern dangereuxPourquoi
nonce = 0Réutilisation certaine.
nonce hardcodĂ©MĂȘme valeur pour tous messages.
random non cryptographiquePrédictible.
compteur remis à zéro au redémarrageCollision possible.
nonce dérivé de timestamp seulCollision sous charge.
Finding: Constant IV used for AES-GCM
Evidence:
- crypto.py line 87: iv = b"000000000000"
Impact:
- Reuse with same key can break confidentiality/integrity guarantees.
Remediation:
- Generate unique 96-bit nonce per encryption.
- Store nonce with ciphertext.
Validation:
- Unit test encrypts 10,000 messages and verifies nonce uniqueness.
HMAC : intégrité et authenticité

HMAC protĂšge l’intĂ©gritĂ© d’un message avec une clĂ© secrĂšte partagĂ©e. Il est utile pour webhooks, signatures de requĂȘtes, messages internes ou tokens simples. Il ne chiffre pas.

  • Utiliser SHA-256 ou mieux selon politique.
  • Comparer avec une fonction constant-time.
  • Inclure mĂ©thode, path, body hash, timestamp et nonce dans la chaĂźne signĂ©e si protocole maison.
  • Limiter la fenĂȘtre temporelle pour Ă©viter rejeu.
  • PrĂ©fĂ©rer des protocoles standards quand possible.
Webhook sécurisé

Provider
  calcule HMAC(secret, timestamp + body)
        ↓
Envoie body + timestamp + signature
        ↓
Backend
  vérifie timestamp récent
  recalcule HMAC
  compare constant-time
  traite seulement si valide
Important : HMAC ne remplace pas TLS. Les deux se complĂštent.
Ne jamais chiffrer les mots de passe

Les mots de passe doivent ĂȘtre hachĂ©s avec une fonction dĂ©diĂ©e lente et salĂ©e : Argon2id, bcrypt ou PBKDF2 selon contexte et contraintes. AES/HMAC/SHA-256 seul ne sont pas des solutions de stockage de mots de passe.

MéthodeUsage
Argon2idRecommandé si disponible, mémoire + temps configurables.
bcryptTrÚs utilisé, robuste, attention limites longueur.
PBKDF2AcceptĂ© dans beaucoup d’environnements rĂ©glementĂ©s.
SHA-256 simpleÀ Ă©viter pour mots de passe.
AES encryptionMauvais modÚle : si clé compromise, tous les mots de passe sont récupérables.
Finding: Passwords hashed with raw SHA-256
Impact:
- Fast hash enables large-scale offline guessing if DB leaks.
Remediation:
- Migrate to Argon2id/bcrypt/PBKDF2 with per-user salt.
- Rehash on next successful login.
Validation:
- New accounts use strong password hashing.
- Old hashes migrate progressively.
Checklist chiffrement symétrique
  • Ne pas implĂ©menter son propre algorithme.
  • Utiliser une librairie maintenue.
  • PrĂ©fĂ©rer AEAD.
  • Nonce unique par clĂ© et message.
  • Key id inclus pour rotation.
  • ClĂ©s dans KMS/Vault/HSM selon criticitĂ©.
  • Pas de plaintext en logs.
  • Pas de mot de passe stockĂ© par chiffrement rĂ©versible.
  • Tests de non-rĂ©gression crypto.
  • Documentation du format de message chiffrĂ©.
Prompt de revue IA
Analyse ce module de chiffrement applicatif.
RepÚre seulement les mauvaises pratiques défensives :
- mode dangereux
- nonce/IV réutilisé
- absence d’authentification
- clés hardcodées
- logging de données sensibles
- password hashing incorrect
Retourne preuves, impact, patch recommandé et tests.
3.6 — RSA, ECC, Ed25519, X25519 : signatures, identitĂ© et Ă©changes de clĂ©s

La cryptographie asymétrique sert à signer, vérifier, établir des clés et représenter des identités. Le danger vient souvent de la confusion entre usages, de la migration incomplÚte et du mauvais choix de primitives.

RSA : encore présent, mais à encadrer

RSA reste largement utilisé pour certificats, signatures et compatibilité. En défense, il faut surveiller tailles de clés, padding, algorithmes de signature et usages legacy.

SujetRecommandation défensive
TailleÉviter clĂ©s faibles ; 2048 minimum selon politique, 3072+ pour long terme.
SignaturePréférer PSS quand supporté ; éviter SHA-1.
ChiffrementUtiliser OAEP si RSA encryption est nécessaire.
TLSRSA cert peut ĂȘtre utilisĂ©, mais key exchange RSA historique Ă  Ă©viter.
MigrationPlanifier ECDSA/EdDSA selon compatibilité.
Finding: RSA key size below policy
Evidence:
- certificate public key: RSA 1024
Impact:
- Non-compliant with modern security policy.
Remediation:
- Reissue certificate with RSA 2048/3072 or ECDSA P-256.
Validation:
- openssl x509 -text confirms new key.
Courbes modernes

ECC permet des clĂ©s plus petites et de bonnes performances. Ed25519 est courant pour signatures modernes, X25519 pour Ă©change de clĂ©s. En entreprise, la compatibilitĂ© clients et l’écosystĂšme doivent guider la migration.

PrimitiveUsage typique
ECDSA P-256/P-384Certificats TLS, signatures compatibles.
Ed25519Signatures modernes, SSH, protocoles récents.
X25519Échange de clĂ©s, TLS, messageries sĂ©curisĂ©es.
secp256k1ÉcosystĂšmes blockchain ; pas choix par dĂ©faut enterprise.
Prudence : la force d’une primitive ne suffit pas. ImplĂ©mentation, bibliothĂšque, stockage des clĂ©s et compatibilitĂ© sont aussi importants.
Choix défensif
  ↓
Compatibilité clients
  ↓
BibliothĂšque maintenue
  ↓
Politique algorithmes
  ↓
Key management
  ↓
Tests interop
  ↓
Migration progressive
Ne pas confondre les usages

Signer n’est pas chiffrer. Chiffrer n’authentifie pas toujours. Établir une clĂ© n’est pas signer. Un modĂšle IA doit dĂ©tecter ces confusions dans les designs et les revues de code.

BesoinPrimitive typiqueErreur fréquente
AuthenticitĂ© d’un messageSignature ou HMACUtiliser encryption comme preuve d’identitĂ©.
ConfidentialitéAEAD avec clé symétriqueRSA direct sur gros payload.
Échange de clĂ©ECDH/X25519RĂ©utiliser une clĂ© statique partout.
Non-répudiationSignature asymétriqueStocker clé privée non protégée.
Exemple de conclusion IA attendue :
Le module utilise RSA pour chiffrer directement un payload applicatif volumineux.
Recommandation : utiliser un schéma hybride standard :
- générer une clé symétrique par message
- chiffrer le payload avec AEAD
- protéger la clé selon KMS/protocole standard
Clés SSH : identité opérationnelle critique

Les clĂ©s SSH donnent souvent accĂšs aux serveurs et pipelines. L’audit doit vĂ©rifier type de clĂ©, passphrase, stockage, rotation, agents, comptes partagĂ©s et logs.

  • Éviter comptes partagĂ©s et clĂ©s sans propriĂ©taire.
  • PrĂ©fĂ©rer clĂ©s modernes supportĂ©es par l’environnement.
  • ProtĂ©ger clĂ©s privĂ©es par passphrase ou hardware key.
  • DĂ©sactiver clĂ©s orphelines.
  • Documenter accĂšs break-glass sĂ©parĂ©ment.
FindingRemédiation
Clé SSH sans ownerAssocier propriétaire ou révoquer.
Clé utilisée par plusieurs humainsCréer identités individuelles.
Clé privée dans dépÎtRévoquer immédiatement et auditer accÚs.
Host key changée sans procédureVérifier incident ou rotation planifiée.
La migration est un projet, pas une ligne de config

Changer d’algorithme peut casser des clients, appliances, bibliothùques, partenaires et systùmes legacy. L’IA peut aider à construire l’inventaire et simuler les impacts.

Inventaire algorithmes
  ↓
Classer par actif et criticité
  ↓
Identifier clients incompatibles
  ↓
Créer mode dual-stack
  ↓
Tester préproduction
  ↓
Déployer progressivement
  ↓
Retirer algorithme legacy
  ↓
Documenter risque résiduel
PhaseLivrable
DiscoveryListe certs, clés, libs, protocoles.
ImpactClients/partenaires concernés.
PilotUn service non critique.
RolloutDéploiement par vagues.
RetirementSuppression legacy + monitoring.
Prompt de revue asymétrique
Analyse cette configuration crypto asymétrique.
Pour chaque clé/certificat/usage :
- identifie l’usage rĂ©el : signature, chiffrement, key exchange, SSH, TLS
- vérifie taille, algorithme, dates, owner, stockage
- repùre confusion d’usage
- propose migration prudente
- liste tests d’interop et rollback
Checklist
  • Inventaire clĂ©s publiques/privĂ©es.
  • Owner technique.
  • Algorithme et taille conformes.
  • Usage documentĂ©.
  • ClĂ© privĂ©e protĂ©gĂ©e.
  • Rotation et rĂ©vocation possibles.
  • Tests de compatibilitĂ©.
  • Suppression des clĂ©s orphelines.
  • Pas de private key dans IA, logs ou tickets.
3.7 — Post-Quantum Readiness : inventaire avant panique

Le post-quantique est d’abord un problĂšme d’inventaire et de migration. Avant de changer des algorithmes, il faut savoir oĂč la cryptographie existe dans le SI et quelles donnĂ©es ont une durĂ©e de confidentialitĂ© longue.

Harvest now, decrypt later

La menace la plus concrĂšte pour certaines organisations n’est pas un ordinateur quantique opĂ©rationnel aujourd’hui, mais la capture de donnĂ©es chiffrĂ©es maintenant pour les dĂ©chiffrer plus tard si les primitives vulnĂ©rables tombent.

  • DonnĂ©es de santĂ©, dĂ©fense, propriĂ©tĂ© intellectuelle et identitĂ© ont une durĂ©e de confidentialitĂ© longue.
  • Les Ă©changes TLS d’aujourd’hui peuvent ĂȘtre collectĂ©s par un acteur bien placĂ©.
  • Les migrations cryptographiques prennent des annĂ©es dans les grandes organisations.
  • Le sujet concerne autant l’inventaire que les algorithmes.
Question stratégique

Donnée capturée en 2026
  ↓
Doit rester secrùte jusqu’en 2040 ?
  ↓
Si oui : priorité PQC plus forte
  ↓
Inventaire + hybridation + migration
Position défensive : pas de panique ; construire une roadmap réaliste basée sur criticité et durée de confidentialité.
Crypto inventory

Un inventaire post-quantique doit couvrir TLS, VPN, SSH, PKI, code signing, JWT, S/MIME, bases de données, archives, backups, KMS, HSM, librairies et protocoles partenaires.

CoucheCe qu’il faut collecter
TLS/PKICertificats, algorithmes, clés, CA, clients.
ApplicationsLibrairies crypto, usages JWT/signature/chiffrement.
InfrastructureVPN, SSH, mTLS, service mesh.
DonnéesDurée de confidentialité et classification.
PartenairesProtocoles inter-entreprises, compatibilité.
HSM/KMSCapacités algorithmiques et roadmap vendor.
Entrée IA structurée :
asset, protocol, algorithm, key_size, library, owner,
data_classification, confidentiality_lifetime, external_dependency,
migration_blockers, test_environment
Familles Ă  connaĂźtre

Les standards post-quantiques modernes distinguent principalement encapsulation de clés, signatures et signatures stateless hash-based. Le guide doit rester prudent sur les noms exacts selon adoption fournisseur, mais les familles sont essentielles.

FamilleUsage
ML-KEM / Kyber familyEncapsulation/échange de clés post-quantique.
ML-DSA / Dilithium familySignatures numériques post-quantiques.
SLH-DSA / SPHINCS+ familySignatures basées hash, alternatives stateless.
Hybrid TLSCombine classique + PQC pour transition.
Prudence : vérifier les standards et implémentations supportés par vos vendors avant toute décision de production.
Transition plausible

Classique uniquement
  ↓
Hybrid classique + PQC
  ↓
PQC standardisé + interop validée
  ↓
Retrait progressif des primitives vulnérables
Pourquoi hybride ?

L’hybridation combine un mĂ©canisme classique Ă©prouvĂ© avec un mĂ©canisme post-quantique. L’objectif est de rĂ©duire le risque tout en conservant la sĂ©curitĂ© si l’un des mĂ©canismes se rĂ©vĂšle fragile pendant la transition.

  • Tester compatibilitĂ© clients, proxies, WAF, CDN et observabilitĂ©.
  • Mesurer impact taille handshake, latence et CPU.
  • DĂ©ployer d’abord sur services pilotes.
  • Surveiller erreurs handshake et fallback.
  • Documenter les clients incompatibles.
RisqueMitigation
Handshake plus volumineuxMesures de performance.
Clients incompatiblesPilotage par segment.
Libs non maintenuesVendor support et patching.
Fausse sécuritéTests et validation cryptographique.
Roadmap réaliste
  1. Mois 1-3 : inventaire crypto et classification des données.
  2. Mois 3-6 : identifier actifs à confidentialité longue.
  3. Mois 6-9 : vérifier support vendor, librairies et HSM/KMS.
  4. Mois 9-12 : pilotes hybrides sur services non critiques.
  5. Mois 12-15 : procĂ©dures de rotation et tests d’interop.
  6. Mois 15-18 : déploiement progressif sur services prioritaires.
PQC readiness
  ↓
Inventory
  ↓
Risk classification
  ↓
Vendor readiness
  ↓
Pilot hybrid
  ↓
Operational runbooks
  ↓
Progressive migration
Ce qu’un modùle peut faire utilement
  • Extraire usages crypto dans code et configs.
  • Construire une matrice actif → algorithme → owner → criticitĂ©.
  • RepĂ©rer dĂ©pendances non maintenues.
  • Comparer support des bibliothĂšques.
  • GĂ©nĂ©rer une roadmap et des tickets de migration.
  • RĂ©diger une note exĂ©cutive claire.
Prompt :
À partir de cet inventaire d’actifs et de dĂ©pendances, produis une matrice PQC readiness.
Priorise selon durée de confidentialité, exposition, contraintes vendor et criticité métier.
Ne recommande pas de migration en production sans phase pilote et tests d’interop.
Questions d’entretien
  1. Qu’est-ce que harvest now, decrypt later ?
  2. Pourquoi l’inventaire crypto prĂ©cĂšde le choix d’algorithme ?
  3. Pourquoi utiliser une approche hybride ?
  4. Quels actifs prioriser pour PQC ?
  5. Quels risques opérationnels pendant migration ?
3.8 — Revue de code crypto : transformer Mythos-like en reviewer dĂ©fensif

Le but n’est pas d’écrire de la cryptographie artisanale, mais de repĂ©rer les mauvais usages : clĂ©s hardcodĂ©es, modes obsolĂštes, absence de vĂ©rification, secrets exposĂ©s et tests insuffisants.

Patterns Ă  rechercher
  • settings.SECRET_KEY exposĂ©e ou rĂ©utilisĂ©e pour d’autres usages.
  • DEBUG=True en production.
  • verify=False dans requests.
  • JWT dĂ©codĂ© sans vĂ©rification.
  • Fernet/AES avec clĂ© hardcodĂ©e.
  • Password hashing maison.
  • Secrets dans settings.py, .env commitĂ© ou logs.
# Mauvais signal défensif à détecter
requests.get(url, verify=False)

# Correction attendue
requests.get(url, timeout=5)  # vérification TLS par défaut
# Si CA interne : fournir un bundle CA géré, pas désactiver verify.
Prompt revue Django :
Analyse ces fichiers settings.py, middleware.py, auth.py et requirements.txt.
Recherche uniquement des mauvaises pratiques crypto/auth défensives.
Retourne : fichier, ligne, preuve, impact, correction, test.
Masque tous les secrets détectés.
Points de contrĂŽle Java
PatternPourquoi
TrustManager qui accepte toutDésactive validation TLS.
HostnameVerifier permissifExpose Ă  MITM en environnement compromis.
MessageDigest SHA-256 pour passwordHash trop rapide.
Cipher AES/ECBMode dangereux.
JWT parser sans audienceAcceptation de tokens hors contexte.
Keystore mot de passe dans codeSecret exposé.
Finding défensif :
- Classe: InsecureTrustManager
- Méthode: checkServerTrusted ne valide rien
- Impact: le client accepte tout certificat
- Remédiation: utiliser truststore géré ou CA interne explicite
- Test: certificat non approuvé doit échouer
Revue Java crypto
  ↓
Truststore / keystore
  ↓
TLS clients
  ↓
JWT validation
  ↓
Password hashing
  ↓
Cipher modes
  ↓
Secrets in config
  ↓
Tests unitaires et intégration
Risques fréquents
  • NODE_TLS_REJECT_UNAUTHORIZED=0.
  • JWT vĂ©rifiĂ© sans issuer/audience.
  • Tokens stockĂ©s en localStorage dans contexte XSS non maĂźtrisĂ©.
  • Crypto Node utilisĂ©e sans authentification.
  • Secrets dans bundle frontend.
  • Webhook HMAC comparĂ© avec simple ==.
# Finding attendu
Environment variable disables TLS verification:
NODE_TLS_REJECT_UNAUTHORIZED=0

Remediation:
- Remove this variable.
- Install internal CA in runtime image.
- Add integration test against untrusted certificate.
ContrĂŽleTest
TLS verificationUn certificat inconnu doit échouer.
JWT aud/issMauvais aud rejeté.
Webhook HMACSignature invalide rejetée constant-time.
Secrets frontendBundle scan ne contient aucun secret.
Catalogue défensif
Mauvais patternCorrection
Désactiver TLS verificationInstaller CA correcte.
AES-ECBAEAD avec nonce unique.
IV constantNonce aléatoire/unique stocké avec ciphertext.
SHA-256(password)Argon2id/bcrypt/PBKDF2.
jwt.decode sans verifyVerifier strict signature + claims.
Secrets en durKMS/Vault/secrets manager.
Comparaison signature avec ==Comparaison constant-time.
Finding crypto code
  ↓
Preuve précise
  ↓
Pourquoi c’est risquĂ©
  ↓
Correction minimale
  ↓
Test automatisé
  ↓
PR + revue humaine
Template de Pull Request
Title: Harden JWT audience validation

Problem:
The API validates token signature but does not enforce expected audience.

Evidence:
auth/middleware.py did not pass audience to verifier.

Change:
- Added strict audience check.
- Added tests for wrong aud, missing aud and valid aud.

Risk:
Could reject misconfigured clients; staging validation required.

Rollback:
Revert middleware change if unexpected 401 spike occurs.

Validation:
- Unit tests pass.
- Staging tested with IdP client.
- Logs monitored for 401 reason codes.
Critùres d’acceptation
  • La correction ne baisse pas le niveau de sĂ©curitĂ© ailleurs.
  • Les tests prouvent le comportement sĂ©curisĂ©.
  • Les logs sont utiles sans fuite.
  • La migration est compatible clients.
  • Rollback dĂ©fini.
Types de tests crypto
TestObjectif
UnitVérifier fonctions de validation.
IntegrationTester avec IdP, TLS, keystore ou KMS réels en staging.
Negative testsMauvais token/certificat doit échouer.
Rotation testsAncienne/nouvelle clé pendant migration.
RegressionÉviter retour d’un mode dangereux.
Static checksDétecter patterns interdits.
Exemples de tests négatifs :
- token expiré rejeté
- certificat non approuvé rejeté
- mauvaise audience rejetée
- nonce dupliqué détecté en test
- HMAC invalide rejeté
- secret factice détecté par scanner pré-commit
3.9 — Certificate Operations : Ă©viter l’incident d’expiration et maĂźtriser mTLS

Les certificats Ă©chouent rarement parce que X.509 est incompris ; ils Ă©chouent parce que personne ne possĂšde l’inventaire, le renouvellement, la surveillance et le runbook.

Inventaire vivant

Un certificat sans owner est un incident en attente. L’inventaire doit ĂȘtre alimentĂ© automatiquement par scans, CMDB, cloud APIs, Kubernetes ingress, service mesh, CDN, WAF et dĂ©pĂŽts IaC.

ChampPourquoi
FQDN/SANIdentifier le périmÚtre.
OwnerSavoir qui agit.
EnvironmentProd/staging/dev.
NotAfterExpiration.
CA/IssuerComprendre dépendance.
Private key locationSans exposer la clĂ©, savoir oĂč elle est gĂ©rĂ©e.
Renewal methodACME, manuel, vendor, internal CA.
CriticalityPrioriser alertes.
Sources inventaire
  ├─ DNS
  ├─ Cloud load balancers
  ├─ Kubernetes ingress
  ├─ CDN / WAF
  ├─ Service mesh
  ├─ CMDB
  └─ Scans TLS autorisĂ©s
        ↓
Certificate inventory
        ↓
Alerts + owners + runbooks
ACME : automation, mais pas abandon

ACME automatise l’émission et le renouvellement. Il faut cependant surveiller DNS challenge, HTTP challenge, quotas, permissions, reload Nginx, propagation et Ă©chec silencieux.

  • Tester renouvellement dry-run.
  • Alerter si le certificat installĂ© ne change pas aprĂšs renouvellement.
  • VĂ©rifier reload du reverse proxy.
  • Limiter permissions DNS API utilisĂ©es pour DNS-01.
  • Documenter fallback manuel d’urgence.
# Exemple opérationnel, à adapter
certbot renew --dry-run

# Validation post-renew
openssl s_client -connect example.com:443 -servername example.com 2>/dev/null  | openssl x509 -noout -dates -issuer -subject
mTLS à grande échelle

mTLS fonctionne bien quand l’identitĂ© de service est claire. Il Ă©choue quand les certificats clients sont copiĂ©s, non renouvelĂ©s, non rĂ©voquĂ©s ou partagĂ©s entre environnements.

SujetBonne pratique
Client identitySAN SPIFFE/service-name plutĂŽt que CN vague.
CACA dédiée par domaine de confiance.
RotationDurée courte + automation.
RevocationProcédure testée pour service compromis.
AuthorizationmTLS + policy applicative, pas seulement certificat valide.
Service A certificate
  ↓
Gateway verifies client CA
  ↓
Extract service identity
  ↓
Policy:
  service A can call /payments/read
  service A cannot call /payments/admin
Alertes utiles
  • Expiration J-60/J-30/J-14/J-7/J-1.
  • Certificat servi diffĂ©rent du certificat attendu.
  • Issuer inattendu.
  • SAN manquant pour endpoint connu.
  • ChaĂźne incomplĂšte.
  • Échec renouvellement ACME.
  • Spike TLS handshake failures.
  • OCSP stapling absent si requis.
MétriqueAction
days_to_expiry < 30Ticket owner + escalade.
handshake_failure spikeCorréler déploiement/renouvellement.
unknown issuerVérifier changement CA ou MITM interne.
mTLS auth failuresVérifier rotation client ou révocation.
Runbook incident expiration
  1. Identifier le certificat expiré et les endpoints impactés.
  2. Identifier owner et méthode de renouvellement.
  3. Émettre certificat de remplacement.
  4. Installer fullchain + key via mécanisme sécurisé.
  5. Reload/restart service de maniÚre contrÎlée.
  6. Valider avec SNI et clients critiques.
  7. Surveiller erreurs 4xx/5xx/handshake.
  8. RĂ©diger postmortem : pourquoi l’alerte n’a pas fonctionnĂ© ?
Incident note:
- Asset:
- Certificate serial:
- Expired at:
- Customer impact:
- Root cause:
- Immediate fix:
- Permanent fix:
- Monitoring added:
- Owner:
Ce que l’IA peut automatiser sans risque excessif
  • Comparer inventaire et certificats rĂ©ellement servis.
  • RĂ©diger tickets par owner.
  • Prioriser selon exposition et criticitĂ©.
  • RĂ©sumer incidents d’expiration.
  • SuggĂ©rer tests de validation.
  • GĂ©nĂ©rer runbooks spĂ©cifiques par stack.
Limite : ne jamais demander au modÚle de manipuler directement des clés privées ou de déployer en production sans approbation.
Inventory diff
  ↓
AI triage
  ↓
Ticket per owner
  ↓
Human approval
  ↓
Automation renews
  ↓
Synthetic tests
  ↓
Close with evidence
3.10 — Rapport d’audit crypto : transformer le technique en dĂ©cisions

Un rapport crypto utile ne se limite pas à lister des erreurs. Il relie preuve, risque, impact métier, correction, validation, propriétaire, échéance et risque résiduel.

Structure recommandée
  1. Executive summary.
  2. Scope et exclusions.
  3. MĂ©thode d’audit.
  4. Inventaire des actifs crypto.
  5. Findings priorisés.
  6. Plan de remédiation.
  7. Tests de validation.
  8. Risques résiduels.
  9. Annexes techniques.
Executive summary:
L’audit a identifiĂ© 12 findings crypto :
- 2 critiques : secrets exposés et validation JWT incomplÚte.
- 4 Ă©levĂ©s : certificats proches expiration, absence d’audience JWT, mTLS sans rotation.
- 6 moyens/faibles : documentation, monitoring, ownership.

Recommandation :
corriger les critiques sous 7 jours, les élevés sous 30 jours,
puis industrialiser inventaire et tests automatisés.
Un finding doit ĂȘtre actionnable
ID: CRYPTO-003
Title: JWT audience not enforced
Severity: High
Asset: orders-api
Evidence:
- auth/middleware.py verifies signature but no audience parameter
- tests do not include wrong-audience token
Impact:
- Token issued for another API may be accepted
Recommendation:
- Enforce aud == api://orders
- Add negative tests
Validation:
- Wrong aud rejected with 401
Owner: Backend Team
Due date: 30 days
Residual risk: Low after fix and monitoring
ChampPourquoi
EvidenceÉvite l’opinion non vĂ©rifiable.
ImpactRelie technique au risque.
RecommendationPermet action dev/ops.
ValidationProuve correction.
OwnerÉvite les findings orphelins.
Scoring crypto contextualisé

Le score doit combiner sensibilitĂ© de la donnĂ©e, exposition, exploitabilitĂ©, probabilitĂ© d’erreur, facilitĂ© de correction et conformitĂ©.

FacteurExemple
ExpositionInternet, interne, CI/CD, partenaire.
DonnéesPII, santé, paiement, secrets, propriété intellectuelle.
ExploitabilitéPréconditions, auth requise, accÚs réseau.
DuréeDepuis combien de temps le problÚme existe ?
PreuveConfig observée, code, log, test.
CorrectionPatch simple ou migration lourde.
Severity = technical weakness
         + exposure
         + asset criticality
         + data sensitivity
         + exploitability
         + compensating controls
         + fix urgency
Pack de preuves sans fuite
  • Captures ou extraits masquĂ©s.
  • Outputs openssl sans clĂ© privĂ©e.
  • Fragments de configuration sans secrets.
  • Chemins de fichiers et numĂ©ros de lignes.
  • Logs minimisĂ©s sans token complet.
  • Hashes ou identifiants redacted.
  • RĂ©sultats de tests nĂ©gatifs.
Redaction examples:
Authorization: Bearer eyJhbGciOi...<redacted>
AWS_SECRET_ACCESS_KEY=<redacted>
Private key block: NEVER INCLUDE
Certificate public metadata: OK
QualitĂ© : un rapport de sĂ©curitĂ© doit ĂȘtre assez prĂ©cis pour corriger, mais assez minimisĂ© pour ne pas devenir un nouveau risque.
Traduire pour le management

Le management n’a pas besoin de connaĂźtre chaque extension X.509. Il doit comprendre l’impact, les prioritĂ©s, les ressources nĂ©cessaires, le risque de ne rien faire et les dĂ©lais.

Message techniqueMessage management
Audience JWT absenteRisque d’accĂšs non autorisĂ© inter-applications.
Certificat expire dans 8 joursRisque d’indisponibilitĂ© client.
Secret en GitRisque de compromission d’un service externe ou cloud.
TLS legacy actifRisque conformité et compatibilité sécurité.
Pas d’inventaire cryptoRisque opĂ©rationnel non maĂźtrisĂ©.
Technique
  ↓
Risque métier
  ↓
Probabilité
  ↓
Impact
  ↓
Coût de correction
  ↓
Décision
Plan 30/60/90 jours
HorizonActions
0-30 joursSecrets exposés, JWT validation, certificats proches expiration.
30-60 joursInventaire TLS/PKI, rotation CI/CD, tests négatifs auth.
60-90 joursmTLS governance, KMS policies, crypto coding standards.
90+ joursPQC inventory, automation CertOps, maturity metrics.
Metrics de maturité
  • Pourcentage de certificats avec owner.
  • Certificats expirant < 30 jours.
  • Secrets statiques vs OIDC/short-lived.
  • Services avec tests JWT nĂ©gatifs.
  • Pourcentage de clĂ©s avec rotation documentĂ©e.
  • Findings crypto rĂ©currents par Ă©quipe.
Références à intégrer dans le guide
  • OWASP ASVS : contrĂŽles applicatifs.
  • OWASP Cheat Sheets : TLS, JWT, password storage, secrets management.
  • NIST : recommandations cryptographiques et PQC.
  • CIS Benchmarks : configurations systĂšmes/cloud.
  • Cloud provider docs : KMS, secrets manager, IAM.
  • Mozilla TLS guidelines : profils TLS cĂŽtĂ© serveur.
  • OpenID Foundation : OIDC specs.
Questions d’entretien
  1. Comment auditeriez-vous JWT dans une API microservices ?
  2. Que mettez-vous dans un rapport crypto pour un RSSI ?
  3. Comment prioriser secrets exposés vs certificat expirant ?
  4. Pourquoi un rapport doit-il inclure des tests de validation ?
  5. Comment Ă©viter qu’un rapport de sĂ©curitĂ© fuite des secrets ?