đ 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.
PKI & X.509
Chaßne de confiance, CA, certificats, révocation, private PKI et audit défensif assisté IA.
PKIX.509CATLS 1.3 en profondeur
Handshake, PFS, ALPN, OCSP, HSTS, mTLS, Nginx et validation continue.
TLSPFSmTLSJWT, OAuth2, OIDC
Validation stricte, claims, audiences, JWKS, rotation et piĂšges applicatifs.
JWTOIDCJWKSSecrets & Key Management
Vault, KMS, HSM, CI/CD, rotation, détection et remédiation des secrets.
KMSHSMVaultAES, AEAD, HMAC
Modes sĂ»rs, nonces, intĂ©gritĂ©, password hashing et erreurs dâimplĂ©mentation.
AESGCMHMACRSA, ECC, Ed25519, X25519
Signatures, Ă©changes de clĂ©s, SSH, migration dâalgorithmes et usages corrects.
RSAECCEdDSAPost-Quantum Readiness
Inventaire, ML-KEM, ML-DSA, hybridation, données longues et roadmap PQC.
PQCML-KEMRoadmapRevue de code crypto
Patterns dangereux en Python, Java, JavaScript, Django et PR sécurisée.
Code reviewSASTDjangoCertificate Operations
Inventory, ACME, mTLS, monitoring, expiration et runbook dâurgence.
CertOpsACMEMonitoringRapport dâaudit crypto
Findings actionnables, scoring, preuves, roadmap 30/60/90 et management.
ReportRiskComplianceUne 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.
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.
| Objet | RĂŽle dĂ©fensif | Question dâaudit |
|---|---|---|
| Root CA | Ancre de confiance | Est-elle hors ligne, protégée, documentée ? |
| Intermediate CA | Signature opérationnelle | Rotation et révocation maßtrisées ? |
| Leaf | Identité du service | SAN, EKU, validité, clé et usage corrects ? |
| CRL/OCSP | Révocation | Fonctionne-t-elle réellement dans vos clients ? |
| Inventaire | Exploitation | Qui 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.
| Champ | Pourquoi câest important |
|---|---|
| Subject / Issuer | Relie le certificat Ă lâentitĂ© et Ă lâautoritĂ© signataire. |
| SAN | Le navigateur et beaucoup de clients modernes valident le nom via SAN, pas seulement CN. |
| Key Usage | Définit si la clé peut signer, chiffrer, établir une session. |
| Extended Key Usage | Différencie serverAuth, clientAuth, codeSigning, emailProtection. |
| Validity | FenĂȘtre opĂ©rationnelle ; expiration = incident probable. |
| Signature Algorithm | Doit éviter MD5/SHA-1 et algorithmes dépréciés. |
| Public Key | Type 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"
]
}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.
| Validation | Pourquoi |
|---|---|
| OpenSSL | Vérifie chaßne, SNI, dates, certificats servis. |
| Java truststore | Détecte les différences JVM/cacerts. |
| Navigateurs | Valide comportement utilisateur final. |
| mTLS client | Vérifie EKU clientAuth et CA attendue. |
| Monitoring | Dé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écanisme | Avantage | Limite |
|---|---|---|
| CRL | Simple, historique | Listes lourdes, rafraĂźchissement lent. |
| OCSP | Statut par certificat | DĂ©pend dâun service en ligne, privacy/availability. |
| OCSP stapling | Le serveur fournit la preuve | Doit ĂȘtre correctement configurĂ© et renouvelĂ©. |
| Short-lived certs | Réduit besoin de révocation | Exige automation fiable. |
| mTLS revocation | TrÚs important pour clients compromis | Nécessite design opérationnel clair. |
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ée | Autorisé | Interdit |
|---|---|---|
| Certificats publics | Oui | N/A |
| Private keys | Non | Ne jamais envoyer |
| Configs Nginx anonymisées | Oui | Secrets et chemins sensibles |
| Logs TLS | Oui si minimisés | PII, tokens, secrets |
| Trust store export | Oui | Mots 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
- Pourquoi un certificat valide peut-il échouer sur certains clients ?
- Quelle différence entre root CA, intermediate CA et leaf certificate ?
- Pourquoi le SAN est-il critique ?
- Comment testeriez-vous un incident dâintermĂ©diaire manquant ?
- Quand choisir mTLS plutĂŽt quâun simple bearer token ?
- Comment gérer une clé privée compromise ?
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Ă©ment | Risque si mal gĂ©rĂ© |
|---|---|
| SNI | Mauvais certificat servi, échec multi-domaines. |
| ALPN | HTTP/2 absent ou mal négocié. |
| PFS | Risque historique si clés long terme compromises. |
| 0-RTT | Risque 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;
| Directive | Pourquoi |
|---|---|
| TLSv1.2/TLSv1.3 | Compatibilité maßtrisée ; TLS 1.0/1.1 à éviter. |
| fullchain.pem | Sert leaf + intermédiaires. |
| session_tickets off | Réduit risques liés à clés de tickets mal gérées. |
| HSTS | Force HTTPS cÎté navigateur. |
| OCSP stapling | Amé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Îme | Cause fréquente | Preuve |
|---|---|---|
| Certificat expiré | Renouvellement ACME échoué | notAfter dépassé |
| Ăchec mobile uniquement | ChaĂźne incomplĂšte ou trust store ancien | s_client + logs mobile |
| Erreur sur un sous-domaine | SAN absent | subjectAltName |
| HTTP/2 non disponible | ALPN non configuré | openssl/curl -I |
| Alerte navigateur HSTS | Politique trop agressive | header 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 XChecklist 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
- Expliquez la différence entre TLS 1.2 et TLS 1.3 cÎté handshake.
- Pourquoi fullchain.pem est-il important ?
- Quels risques liés à HSTS includeSubDomains ?
- Comment diagnostiquer une erreur TLS uniquement cÎté Java ?
- Quand utiliser mTLS ?
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ĂŽle | Raison |
|---|---|
| Signature | EmpĂȘche modification du payload. |
| alg attendu | Ăvite lâacceptation dâalgorithmes non prĂ©vus. |
| iss | VĂ©rifie lâĂ©metteur. |
| aud | Vérifie que le token est destiné à cette API. |
| exp / nbf | ContrĂŽle la fenĂȘtre temporelle. |
| scope / roles | Autorisation applicative. |
| kid/JWKS | Associe 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")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 pratique | Impact |
|---|---|
| jwt.decode sans verify | Le backend fait confiance à un contenu non authentifié. |
| aud non vérifiée | Token destiné à une autre API accepté. |
| exp ignorée | Token réutilisable aprÚs expiration. |
| secret HS256 faible | Risque de compromission si secret exposé/faible. |
| roles dans token sans contrĂŽle serveur | Autorisation trop naĂŻve. |
| refresh token en localStorage | Risque 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
Ne pas confondre les rĂŽles
| ĂlĂ©ment | RĂŽle |
|---|---|
| OAuth2 | Autorisation déléguée. |
| OIDC | IdentitĂ© construite au-dessus dâOAuth2. |
| Access token | AccÚs API, durée courte. |
| ID token | Information dâidentitĂ© pour client, pas toujours destinĂ© Ă lâAPI. |
| Refresh token | Obtention de nouveaux access tokens, trĂšs sensible. |
| Authorization code + PKCE | Flux 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 == 401Checklist audit IA
| Artefact | Question |
|---|---|
| Middleware | Vérifie-t-il signature, iss, aud, exp ? |
| Config IdP | Les audiences/scopes sont-ils documentés ? |
| Logs | Peut-on distinguer expiration, scope, signature ? |
| Frontend | OĂč sont stockĂ©s les tokens ? |
| Rotation | JWKS cache et retrait de clés testés ? |
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 ?
| Type | Exemples | Risque |
|---|---|---|
| API keys | Stripe, SendGrid, OpenAI, AWS access keys | Usage frauduleux, exfiltration. |
| DB credentials | User/password MariaDB/PostgreSQL | AccÚs données. |
| Private keys | TLS, SSH, signing keys | Usurpation identité. |
| Tokens CI/CD | GitHub, registry, deploy token | Supply chain compromise. |
| Encryption keys | KMS data keys, app keys | Déchiffrement ou corruption. |
| JWT secrets | HS256 shared secret | Signature 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
Choisir le bon niveau de protection
| Solution | Usage typique | Point de vigilance |
|---|---|---|
| KMS cloud | Chiffrement applicatif, enveloppe, rotation gérée. | IAM et policies trÚs strictes. |
| Vault | Secrets dynamiques, leasing, rotation, accĂšs applicatif. | HA, unseal, policies, audit logs. |
| HSM | Racines de confiance, signatures critiques, clés non exportables. | Coût, intégration, performance. |
| Secrets manager | Secrets 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ĂŽle | Test |
|---|---|
| Secret masking | Forcer échec et vérifier logs. |
| OIDC | Pas de cloud keys statiques dans CI. |
| Branch protection | Secrets prod uniquement depuis branches protégées. |
| Environment approval | Déploiement prod validé humainement. |
| Least privilege | Deploy 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
- Identifier le secret et son périmÚtre exact.
- Révoquer ou désactiver immédiatement si possible.
- Créer un secret de remplacement.
- Déployer la configuration corrigée.
- Rechercher usages suspects dans logs.
- Nettoyer dĂ©pĂŽts, tickets et artefacts, mais ne pas croire que lâhistorique supprimĂ© suffit.
- 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.| Risque | Action IA |
|---|---|
| Secret prod actif | Priorité critique, rotation immédiate. |
| Secret test inactif | Nettoyage + prévention. |
| Private key TLS | Révocation certificat + rotation clé. |
| Token CI/CD | Révoquer token + auditer workflows. |
| DB password | Rotation + 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
- Pourquoi supprimer un secret de Git ne suffit-il pas ?
- Comment organiser une rotation sans downtime ?
- Différence entre KMS, HSM et secrets manager ?
- Comment empĂȘcher un workflow CI de lire les secrets prod ?
- Quelles métadonnées peut-on envoyer à un modÚle IA sans fuite ?
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.
| Mode | Statut défensif |
|---|---|
| ECB | à éviter : révÚle les motifs. |
| CBC | à utiliser seulement avec grande prudence et authentification séparée. |
| GCM | AEAD moderne, exige nonce unique. |
| CTR | Chiffrement en flot, exige nonce/compteur unique et authentification. |
| XTS | Usage stockage disque, pas messages applicatifs génériques. |
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_id | Oui | Aide rotation et debug sans exposer clé. |
| nonce | Oui selon contexte | Nâest pas secret, utile diagnostic. |
| ciphertext | Non en logs applicatifs | Peut contenir données sensibles chiffrées. |
| tag | Non nécessaire | Pas utile en logs standard. |
| plaintext | Jamais | Donné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 dangereux | Pourquoi |
|---|---|
| nonce = 0 | Réutilisation certaine. |
| nonce hardcodĂ© | MĂȘme valeur pour tous messages. |
| random non cryptographique | Prédictible. |
| compteur remis à zéro au redémarrage | Collision possible. |
| nonce dérivé de timestamp seul | Collision 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 valideNe 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éthode | Usage |
|---|---|
| Argon2id | Recommandé si disponible, mémoire + temps configurables. |
| bcrypt | TrÚs utilisé, robuste, attention limites longueur. |
| PBKDF2 | AcceptĂ© dans beaucoup dâenvironnements rĂ©glementĂ©s. |
| SHA-256 simple | à éviter pour mots de passe. |
| AES encryption | Mauvais 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.
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.
| Sujet | Recommandation défensive |
|---|---|
| Taille | Ăviter clĂ©s faibles ; 2048 minimum selon politique, 3072+ pour long terme. |
| Signature | Préférer PSS quand supporté ; éviter SHA-1. |
| Chiffrement | Utiliser OAEP si RSA encryption est nécessaire. |
| TLS | RSA cert peut ĂȘtre utilisĂ©, mais key exchange RSA historique Ă Ă©viter. |
| Migration | Planifier 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.
| Primitive | Usage typique |
|---|---|
| ECDSA P-256/P-384 | Certificats TLS, signatures compatibles. |
| Ed25519 | Signatures 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. |
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.
| Besoin | Primitive typique | Erreur fréquente |
|---|---|---|
| AuthenticitĂ© dâun message | Signature ou HMAC | Utiliser encryption comme preuve dâidentitĂ©. |
| Confidentialité | AEAD avec clé symétrique | RSA direct sur gros payload. |
| Ăchange de clĂ© | ECDH/X25519 | RĂ©utiliser une clĂ© statique partout. |
| Non-répudiation | Signature asymétrique | Stocker 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.
| Finding | Remédiation |
|---|---|
| Clé SSH sans owner | Associer propriétaire ou révoquer. |
| Clé utilisée par plusieurs humains | Créer identités individuelles. |
| Clé privée dans dépÎt | Révoquer immédiatement et auditer accÚs. |
| Host key changée sans procédure | Vé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
| Phase | Livrable |
|---|---|
| Discovery | Liste certs, clés, libs, protocoles. |
| Impact | Clients/partenaires concernés. |
| Pilot | Un service non critique. |
| Rollout | Déploiement par vagues. |
| Retirement | Suppression 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.
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
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.
| Couche | Ce quâil faut collecter |
|---|---|
| TLS/PKI | Certificats, algorithmes, clés, CA, clients. |
| Applications | Librairies crypto, usages JWT/signature/chiffrement. |
| Infrastructure | VPN, SSH, mTLS, service mesh. |
| Données | Durée de confidentialité et classification. |
| Partenaires | Protocoles inter-entreprises, compatibilité. |
| HSM/KMS | Capacité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.
| Famille | Usage |
|---|---|
| ML-KEM / Kyber family | Encapsulation/échange de clés post-quantique. |
| ML-DSA / Dilithium family | Signatures numériques post-quantiques. |
| SLH-DSA / SPHINCS+ family | Signatures basées hash, alternatives stateless. |
| Hybrid TLS | Combine classique + PQC pour transition. |
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.
| Risque | Mitigation |
|---|---|
| Handshake plus volumineux | Mesures de performance. |
| Clients incompatibles | Pilotage par segment. |
| Libs non maintenues | Vendor support et patching. |
| Fausse sécurité | Tests et validation cryptographique. |
Roadmap réaliste
- Mois 1-3 : inventaire crypto et classification des données.
- Mois 3-6 : identifier actifs à confidentialité longue.
- Mois 6-9 : vérifier support vendor, librairies et HSM/KMS.
- Mois 9-12 : pilotes hybrides sur services non critiques.
- Mois 12-15 : procĂ©dures de rotation et tests dâinterop.
- 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
- Quâest-ce que harvest now, decrypt later ?
- Pourquoi lâinventaire crypto prĂ©cĂšde le choix dâalgorithme ?
- Pourquoi utiliser une approche hybride ?
- Quels actifs prioriser pour PQC ?
- Quels risques opérationnels pendant migration ?
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
| Pattern | Pourquoi |
|---|---|
| TrustManager qui accepte tout | Désactive validation TLS. |
| HostnameVerifier permissif | Expose Ă MITM en environnement compromis. |
| MessageDigest SHA-256 pour password | Hash trop rapide. |
| Cipher AES/ECB | Mode dangereux. |
| JWT parser sans audience | Acceptation de tokens hors contexte. |
| Keystore mot de passe dans code | Secret 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ĂŽle | Test |
|---|---|
| TLS verification | Un certificat inconnu doit échouer. |
| JWT aud/iss | Mauvais aud rejeté. |
| Webhook HMAC | Signature invalide rejetée constant-time. |
| Secrets frontend | Bundle scan ne contient aucun secret. |
Catalogue défensif
| Mauvais pattern | Correction |
|---|---|
| Désactiver TLS verification | Installer CA correcte. |
| AES-ECB | AEAD avec nonce unique. |
| IV constant | Nonce aléatoire/unique stocké avec ciphertext. |
| SHA-256(password) | Argon2id/bcrypt/PBKDF2. |
| jwt.decode sans verify | Verifier strict signature + claims. |
| Secrets en dur | KMS/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
| Test | Objectif |
|---|---|
| Unit | Vérifier fonctions de validation. |
| Integration | Tester avec IdP, TLS, keystore ou KMS réels en staging. |
| Negative tests | Mauvais token/certificat doit échouer. |
| Rotation tests | Ancienne/nouvelle clé pendant migration. |
| Regression | Ăviter retour dâun mode dangereux. |
| Static checks | Dé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
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.
| Champ | Pourquoi |
|---|---|
| FQDN/SAN | Identifier le périmÚtre. |
| Owner | Savoir qui agit. |
| Environment | Prod/staging/dev. |
| NotAfter | Expiration. |
| CA/Issuer | Comprendre dépendance. |
| Private key location | Sans exposer la clĂ©, savoir oĂč elle est gĂ©rĂ©e. |
| Renewal method | ACME, manuel, vendor, internal CA. |
| Criticality | Prioriser alertes. |
Sources inventaire
ââ DNS
ââ Cloud load balancers
ââ Kubernetes ingress
ââ CDN / WAF
ââ Service mesh
ââ CMDB
ââ Scans TLS autorisĂ©s
â
Certificate inventory
â
Alerts + owners + runbooksACME : 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.
| Sujet | Bonne pratique |
|---|---|
| Client identity | SAN SPIFFE/service-name plutĂŽt que CN vague. |
| CA | CA dédiée par domaine de confiance. |
| Rotation | Durée courte + automation. |
| Revocation | Procédure testée pour service compromis. |
| Authorization | mTLS + 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étrique | Action |
|---|---|
| days_to_expiry < 30 | Ticket owner + escalade. |
| handshake_failure spike | Corréler déploiement/renouvellement. |
| unknown issuer | Vérifier changement CA ou MITM interne. |
| mTLS auth failures | Vérifier rotation client ou révocation. |
Runbook incident expiration
- Identifier le certificat expiré et les endpoints impactés.
- Identifier owner et méthode de renouvellement.
- Ămettre certificat de remplacement.
- Installer fullchain + key via mécanisme sécurisé.
- Reload/restart service de maniÚre contrÎlée.
- Valider avec SNI et clients critiques.
- Surveiller erreurs 4xx/5xx/handshake.
- 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.
Inventory diff â AI triage â Ticket per owner â Human approval â Automation renews â Synthetic tests â Close with evidence
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
- Executive summary.
- Scope et exclusions.
- MĂ©thode dâaudit.
- Inventaire des actifs crypto.
- Findings priorisés.
- Plan de remédiation.
- Tests de validation.
- Risques résiduels.
- 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
| Champ | Pourquoi |
|---|---|
| Evidence | Ăvite lâopinion non vĂ©rifiable. |
| Impact | Relie technique au risque. |
| Recommendation | Permet action dev/ops. |
| Validation | Prouve 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Ă©.
| Facteur | Exemple |
|---|---|
| Exposition | Internet, interne, CI/CD, partenaire. |
| Données | PII, santé, paiement, secrets, propriété intellectuelle. |
| Exploitabilité | Préconditions, auth requise, accÚs réseau. |
| Durée | Depuis combien de temps le problÚme existe ? |
| Preuve | Config observée, code, log, test. |
| Correction | Patch simple ou migration lourde. |
Severity = technical weakness
+ exposure
+ asset criticality
+ data sensitivity
+ exploitability
+ compensating controls
+ fix urgencyPack 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
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 technique | Message management |
|---|---|
| Audience JWT absente | Risque dâaccĂšs non autorisĂ© inter-applications. |
| Certificat expire dans 8 jours | Risque dâindisponibilitĂ© client. |
| Secret en Git | Risque de compromission dâun service externe ou cloud. |
| TLS legacy actif | Risque conformité et compatibilité sécurité. |
| Pas dâinventaire crypto | Risque opĂ©rationnel non maĂźtrisĂ©. |
Technique â Risque mĂ©tier â ProbabilitĂ© â Impact â CoĂ»t de correction â DĂ©cision
Plan 30/60/90 jours
| Horizon | Actions |
|---|---|
| 0-30 jours | Secrets exposés, JWT validation, certificats proches expiration. |
| 30-60 jours | Inventaire TLS/PKI, rotation CI/CD, tests négatifs auth. |
| 60-90 jours | mTLS governance, KMS policies, crypto coding standards. |
| 90+ jours | PQC 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
- Comment auditeriez-vous JWT dans une API microservices ?
- Que mettez-vous dans un rapport crypto pour un RSSI ?
- Comment prioriser secrets exposés vs certificat expirant ?
- Pourquoi un rapport doit-il inclure des tests de validation ?
- Comment Ă©viter quâun rapport de sĂ©curitĂ© fuite des secrets ?
