Vérificateur de Conformité Fintech
Workflow en 5 étapes
- Cartographier le périmètre : identifier les flux de données financières (carte, virement, wallet, crypto) et les marchés cibles (UE, US, MENA…).
- Sélectionner les référentiels : croiser type de service × géographie → liste des normes applicables (tableau ci-dessous).
- Auditer point par point : pour chaque norme, dérouler la checklist correspondante ; noter les gaps avec niveau de risque (critique / élevé / moyen).
- Corriger et prioriser : implémenter les contrôles manquants critiques en premier ; documenter chaque décision (ADR ou ticket).
- Maintenir la preuve : logs d'audit, scans périodiques, enregistrement des consentements — tout doit être traçable et exportable.
1. Sélection des référentiels applicables
| Service |
Réglementations applicables |
| Paiement par carte |
PCI-DSS v4, PSD2, RGPD |
| Wallet / compte de paiement |
KYC/AML (DLTF/5AMLD), PSD2, RGPD |
| Transfert d'argent (remittance) |
Règlement UE 2015/847, KYC/AML, RGPD |
| Prêt / crédit consommation |
Directive 2023/2225, RGPD |
| Crypto-actifs |
MiCA (applicable depuis déc. 2024), KYC/AML, RGPD |
| Open Banking / AISP-PISP |
PSD2, Berlin Group API, RGPD |
2. PCI-DSS v4 — Checklist développeur
Données de carte : ce qui est interdit
INTERDIT (même chiffré) :
- Stocker le CVV/CVC après autorisation
- Stocker le contenu de la piste magnétique
- Logger le PAN complet dans les fichiers de log
INTERDIT :
- Envoyer des données de carte par email, chat, SMS
- Recevoir le numéro de carte sur vos propres serveurs si scope SAQ A possible
Tokenisation — flux recommandé
# Stripe / Adyen / Braintree
Client (browser/app)
└─► Stripe.js / Hosted Fields
└─► PSP (hors scope PCI)
└─► token tok_live_xxxxx → votre backend
↓
api.stripe.com/v1/charges { source: tok_live_xxxxx }
Votre backend ne voit jamais le PAN. Scope réduit à SAQ A ou SAQ A-EP.
Niveaux PCI-DSS et obligations
| Niveau |
Volume annuel |
Exigence minimale |
| 1 |
> 6 M transactions |
Audit QSA sur site + ASV scan trimestriel |
| 2 |
1–6 M |
SAQ + ASV scan trimestriel |
| 3 |
20 K–1 M (e-commerce) |
SAQ A-EP ou SAQ D |
| 4 |
< 20 K (e-commerce) |
SAQ A (si full-redirect PSP) |
Exigences techniques PCI-DSS v4 nouvelles (2025+)
- Exigence 6.4.3 : gestion d'inventaire et intégrité de tous les scripts de page de paiement (CSP + SRI).
- Exigence 11.6.1 : détection des modifications non autorisées des pages de paiement (script tamper detection).
- TLS 1.0 et 1.1 définitivement interdits ; TLS 1.2 minimum, TLS 1.3 recommandé.
# Vérifier TLS d'un endpoint
openssl s_client -connect api.monservice.com:443 -tls1_2 </dev/null 2>&1 | grep "Protocol"
# Ou avec testssl.sh (outil open source)
./testssl.sh --protocols api.monservice.com
3. KYC/AML — Approche basée sur le risque
Niveaux de due diligence (5AMLD / DLTF)
| Niveau |
Seuil indicatif UE |
Vérifications requises |
| Simplifié (SDD) |
< 150 €/mois, produit à faible risque listé |
Email + téléphone (profil limité) |
| Standard (CDD) |
Usage courant |
Pièce d'identité + preuve d'adresse + screening sanctions |
| Renforcé (EDD) |
> 2 500 €/mois, PEP, pays à haut risque FATF |
Identité + source des fonds + justificatif patrimoine + revue périodique |
Screening sanctions — intégration code
# Exemple avec l'API Comply Advantage / ComplyLaunch
import requests
def screen_customer(name: str, dob: str) -> dict:
resp = requests.post(
"https://api.complyadvantage.com/searches",
headers={"Authorization": f"Token {API_KEY}"},
json={
"search_term": name,
"filters": {"birth_year": dob[:4]},
"share_url": False,
"types": ["sanction", "pep", "warning", "adverse-media"],
},
timeout=10,
)
resp.raise_for_status()
hits = resp.json()["content"]["data"]["hits"]
return {"clear": len(hits) == 0, "hits": hits}
Alternatives : Refinitiv World-Check, Dow Jones Risk & Compliance, listes publiques OFAC/EU/ONU (CSV téléchargeables).
Checklist AML
Red flags à coder comme règles de détection
STRUCTURING : montant < seuil déclaration sur N transactions proches dans le temps
VELOCITY : > X transactions en 24 h sur un même compte
GEOGRAPHY : destination dans pays FATF liste grise/noire
ROUND_TRIP : dépôt → retrait immédiat sans utilisation intermédiaire
NEW_ACCOUNT : volume élevé les 48 h suivant la création du compte
4. PSD2 / SCA — Authentification Forte
Règle SCA
Transaction > 30 € → 2 facteurs obligatoires parmi :
- Connaissance : mot de passe, PIN
- Possession : téléphone (OTP SMS/TOTP), carte physique
- Inhérence : biométrie (empreinte, face ID)
Exemptions applicables (à documenter)
| Exemption |
Condition |
Responsabilité du risque |
| Low-value |
< 30 € (cumul < 100 € ou < 5 tx) |
Émetteur |
| Trusted beneficiary |
Bénéficiaire whitelisté par le payeur |
Émetteur |
| Recurring |
Même montant + même bénéficiaire |
Émetteur |
| TRA (Transaction Risk Analysis) |
Taux fraude < seuil EBA + scoring bas |
Acquéreur ou émetteur |
| Corporate / B2B |
Comptes d'entreprise dédiés |
Émetteur |
Implémentation 3DS2 (Stripe exemple)
// Côté client — gérer le défi SCA
const { error, paymentIntent } = await stripe.confirmCardPayment(clientSecret, {
payment_method: { card: cardElement },
});
if (error?.code === "authentication_required") {
// Redemander la SCA via stripe.handleNextAction(clientSecret)
}
5. RGPD — Données financières
Durées de conservation légales
| Donnée |
Durée |
Base légale |
| Transactions / pièces comptables |
10 ans |
Obligation légale (Code commerce) |
| Dossiers KYC |
5 ans après fin de relation |
LCB-FT / 5AMLD |
| Données de carte tokenisées |
Durée mandat + 13 mois |
Contrat / Consentement |
| Logs d'accès et connexion |
12 mois |
Intérêt légitime / LCEN |
| Consentements marketing |
Jusqu'au retrait + 3 ans |
Consentement |
Droits des utilisateurs — implémentation minimale
- Portabilité : endpoint
/api/user/export → JSON/CSV des transactions (format Account Statement ISO 20022 recommandé).
- Effacement : pseudonymiser (ne pas supprimer) les données soumises à conservation légale ; effacer les données hors obligations.
- Accès : réponse sous 30 jours ; authentification forte avant divulgation.
- Rectification : formulaire avec audit trail de la modification.
# Pseudonymisation irréversible pour données hors conservation légale
import hashlib, os
def pseudonymize(value: str, salt: bytes = None) -> str:
salt = salt or os.urandom(16)
return hashlib.blake2b(value.encode(), key=salt, digest_size=32).hexdigest()
6. Garde-fous et anti-patterns fréquents
| Anti-pattern |
Risque |
Correction |
Logger request.body sur un endpoint de paiement |
PCI-DSS violation, amende + perte certification |
Filtrer les champs sensibles avant log (pan, cvv, card_number) |
| KYC "one-shot" sans re-screening |
Passer à côté d'une sanction ajoutée après onboarding |
Cron de re-screening hebdomadaire sur la base clients active |
| SCA contournée côté backend pour "améliorer l'UX" |
Fraude, responsabilité acquéreur, amende ABE |
Utiliser les exemptions officielles PSD2, documenter le choix |
| Conservation infinie des données "au cas où" |
RGPD — amende CNIL jusqu'à 4 % du CA mondial |
Mettre en place une politique de purge automatique par type de donnée |
| Secrets d'API PSP dans le code source |
Compromission PSP, fraude directe |
Vault (HashiCorp / AWS Secrets Manager) + rotation automatique |
| Validation KYC uniquement côté client |
Contournement trivial |
Toujours re-valider côté serveur, renvoyer le statut KYC depuis le backend |
7. Commandes d'audit utiles
# Scanner les secrets dans le code (clés API, PANs…)
trufflehog git file://. --only-verified
# Vérifier les headers de sécurité d'un endpoint
curl -I https://api.monservice.com/v1/payments | grep -E "Strict-Transport|Content-Security|X-Frame"
# Tester les ciphers TLS (rejeter TLS < 1.2)
nmap --script ssl-enum-ciphers -p 443 api.monservice.com
# Vérifier l'inventaire des scripts de paiement (PCI v4 req. 6.4.3)
# Générer les SRI hashes pour les scripts tiers
curl -s https://cdn.js.stripe.com/v3/ | openssl dgst -sha384 -binary | openssl base64 -A
Ce skill fournit des orientations techniques et opérationnelles. Pour des décisions de conformité engageant la responsabilité légale de l'entreprise, consulter un juriste spécialisé en droit financier et/ou un QSA PCI certifié.
1---2name: fintech-compliance-checker3description: Vérification de conformité pour applications fintech — PCI-DSS, KYC/AML, PSD2, RGPD appliqué aux données financières. À utiliser quand l'utilisateur développe une application de paiement, un wallet ou un service financier et doit vérifier la conformité réglementaire. Se déclenche aussi avec "PCI-DSS", "KYC", "AML", "PSD2", "conformité paiement", "compliance fintech", "données bancaires", "carte de crédit sécurité". Also triggers on "PCI-DSS compliance", "KYC and AML requirements", "PSD2 compliance".4---56# Vérificateur de Conformité Fintech78## Workflow en 5 étapes9101. **Cartographier le périmètre** : identifier les flux de données financières (carte, virement, wallet, crypto) et les marchés cibles (UE, US, MENA…).112. **Sélectionner les référentiels** : croiser type de service × géographie → liste des normes applicables (tableau ci-dessous).123. **Auditer point par point** : pour chaque norme, dérouler la checklist correspondante ; noter les gaps avec niveau de risque (critique / élevé / moyen).134. **Corriger et prioriser** : implémenter les contrôles manquants critiques en premier ; documenter chaque décision (ADR ou ticket).145. **Maintenir la preuve** : logs d'audit, scans périodiques, enregistrement des consentements — tout doit être traçable et exportable.1516---1718## 1. Sélection des référentiels applicables1920| Service | Réglementations applicables |21|---------|---------------------------|22| Paiement par carte | PCI-DSS v4, PSD2, RGPD |23| Wallet / compte de paiement | KYC/AML (DLTF/5AMLD), PSD2, RGPD |24| Transfert d'argent (remittance) | Règlement UE 2015/847, KYC/AML, RGPD |25| Prêt / crédit consommation | Directive 2023/2225, RGPD |26| Crypto-actifs | MiCA (applicable depuis déc. 2024), KYC/AML, RGPD |27| Open Banking / AISP-PISP | PSD2, Berlin Group API, RGPD |2829---3031## 2. PCI-DSS v4 — Checklist développeur3233### Données de carte : ce qui est interdit3435```36INTERDIT (même chiffré) :37 - Stocker le CVV/CVC après autorisation38 - Stocker le contenu de la piste magnétique39 - Logger le PAN complet dans les fichiers de log4041INTERDIT :42 - Envoyer des données de carte par email, chat, SMS43 - Recevoir le numéro de carte sur vos propres serveurs si scope SAQ A possible44```4546### Tokenisation — flux recommandé4748```49# Stripe / Adyen / Braintree50Client (browser/app)51 └─► Stripe.js / Hosted Fields52 └─► PSP (hors scope PCI)53 └─► token tok_live_xxxxx → votre backend54 ↓55 api.stripe.com/v1/charges { source: tok_live_xxxxx }56```5758Votre backend ne voit jamais le PAN. Scope réduit à SAQ A ou SAQ A-EP.5960### Niveaux PCI-DSS et obligations6162| Niveau | Volume annuel | Exigence minimale |63|--------|--------------|-------------------|64| 1 | > 6 M transactions | Audit QSA sur site + ASV scan trimestriel |65| 2 | 1–6 M | SAQ + ASV scan trimestriel |66| 3 | 20 K–1 M (e-commerce) | SAQ A-EP ou SAQ D |67| 4 | < 20 K (e-commerce) | SAQ A (si full-redirect PSP) |6869### Exigences techniques PCI-DSS v4 nouvelles (2025+)7071- Exigence 6.4.3 : gestion d'inventaire et intégrité de tous les scripts de page de paiement (CSP + SRI).72- Exigence 11.6.1 : détection des modifications non autorisées des pages de paiement (script tamper detection).73- TLS 1.0 et 1.1 définitivement interdits ; TLS 1.2 minimum, TLS 1.3 recommandé.7475```bash76# Vérifier TLS d'un endpoint77openssl s_client -connect api.monservice.com:443 -tls1_2 </dev/null 2>&1 | grep "Protocol"78# Ou avec testssl.sh (outil open source)79./testssl.sh --protocols api.monservice.com80```8182---8384## 3. KYC/AML — Approche basée sur le risque8586### Niveaux de due diligence (5AMLD / DLTF)8788| Niveau | Seuil indicatif UE | Vérifications requises |89|--------|-------------------|----------------------|90| Simplifié (SDD) | < 150 €/mois, produit à faible risque listé | Email + téléphone (profil limité) |91| Standard (CDD) | Usage courant | Pièce d'identité + preuve d'adresse + screening sanctions |92| Renforcé (EDD) | > 2 500 €/mois, PEP, pays à haut risque FATF | Identité + source des fonds + justificatif patrimoine + revue périodique |9394### Screening sanctions — intégration code9596```python97# Exemple avec l'API Comply Advantage / ComplyLaunch98import requests99100def screen_customer(name: str, dob: str) -> dict:101 resp = requests.post(102 "https://api.complyadvantage.com/searches",103 headers={"Authorization": f"Token {API_KEY}"},104 json={105 "search_term": name,106 "filters": {"birth_year": dob[:4]},107 "share_url": False,108 "types": ["sanction", "pep", "warning", "adverse-media"],109 },110 timeout=10,111 )112 resp.raise_for_status()113 hits = resp.json()["content"]["data"]["hits"]114 return {"clear": len(hits) == 0, "hits": hits}115```116117Alternatives : Refinitiv World-Check, Dow Jones Risk & Compliance, listes publiques OFAC/EU/ONU (CSV téléchargeables).118119### Checklist AML120121- [ ] Screening initial à l'onboarding + re-screening périodique (min. annuel)122- [ ] Détection PEP (Personne Politiquement Exposée) et membres de famille123- [ ] Monitoring transactionnel : règles de seuil + modèle comportemental124- [ ] Déclaration de soupçon automatisée vers Tracfin (FR) / CRF (TN) / FinCEN (US)125- [ ] Conservation des données KYC : 5 ans après fin de relation (obligation légale)126- [ ] Gel des avoirs : blocage immédiat si match sanctions confirmé127128### Red flags à coder comme règles de détection129130```131STRUCTURING : montant < seuil déclaration sur N transactions proches dans le temps132VELOCITY : > X transactions en 24 h sur un même compte133GEOGRAPHY : destination dans pays FATF liste grise/noire134ROUND_TRIP : dépôt → retrait immédiat sans utilisation intermédiaire135NEW_ACCOUNT : volume élevé les 48 h suivant la création du compte136```137138---139140## 4. PSD2 / SCA — Authentification Forte141142### Règle SCA143144```145Transaction > 30 € → 2 facteurs obligatoires parmi :146 - Connaissance : mot de passe, PIN147 - Possession : téléphone (OTP SMS/TOTP), carte physique148 - Inhérence : biométrie (empreinte, face ID)149```150151### Exemptions applicables (à documenter)152153| Exemption | Condition | Responsabilité du risque |154|-----------|-----------|--------------------------|155| Low-value | < 30 € (cumul < 100 € ou < 5 tx) | Émetteur |156| Trusted beneficiary | Bénéficiaire whitelisté par le payeur | Émetteur |157| Recurring | Même montant + même bénéficiaire | Émetteur |158| TRA (Transaction Risk Analysis) | Taux fraude < seuil EBA + scoring bas | Acquéreur ou émetteur |159| Corporate / B2B | Comptes d'entreprise dédiés | Émetteur |160161### Implémentation 3DS2 (Stripe exemple)162163```javascript164// Côté client — gérer le défi SCA165const { error, paymentIntent } = await stripe.confirmCardPayment(clientSecret, {166 payment_method: { card: cardElement },167});168if (error?.code === "authentication_required") {169 // Redemander la SCA via stripe.handleNextAction(clientSecret)170}171```172173---174175## 5. RGPD — Données financières176177### Durées de conservation légales178179| Donnée | Durée | Base légale |180|--------|-------|-------------|181| Transactions / pièces comptables | 10 ans | Obligation légale (Code commerce) |182| Dossiers KYC | 5 ans après fin de relation | LCB-FT / 5AMLD |183| Données de carte tokenisées | Durée mandat + 13 mois | Contrat / Consentement |184| Logs d'accès et connexion | 12 mois | Intérêt légitime / LCEN |185| Consentements marketing | Jusqu'au retrait + 3 ans | Consentement |186187### Droits des utilisateurs — implémentation minimale188189- **Portabilité** : endpoint `/api/user/export` → JSON/CSV des transactions (format Account Statement ISO 20022 recommandé).190- **Effacement** : pseudonymiser (ne pas supprimer) les données soumises à conservation légale ; effacer les données hors obligations.191- **Accès** : réponse sous 30 jours ; authentification forte avant divulgation.192- **Rectification** : formulaire avec audit trail de la modification.193194```python195# Pseudonymisation irréversible pour données hors conservation légale196import hashlib, os197198def pseudonymize(value: str, salt: bytes = None) -> str:199 salt = salt or os.urandom(16)200 return hashlib.blake2b(value.encode(), key=salt, digest_size=32).hexdigest()201```202203---204205## 6. Garde-fous et anti-patterns fréquents206207| Anti-pattern | Risque | Correction |208|---|---|---|209| Logger `request.body` sur un endpoint de paiement | PCI-DSS violation, amende + perte certification | Filtrer les champs sensibles avant log (`pan`, `cvv`, `card_number`) |210| KYC "one-shot" sans re-screening | Passer à côté d'une sanction ajoutée après onboarding | Cron de re-screening hebdomadaire sur la base clients active |211| SCA contournée côté backend pour "améliorer l'UX" | Fraude, responsabilité acquéreur, amende ABE | Utiliser les exemptions officielles PSD2, documenter le choix |212| Conservation infinie des données "au cas où" | RGPD — amende CNIL jusqu'à 4 % du CA mondial | Mettre en place une politique de purge automatique par type de donnée |213| Secrets d'API PSP dans le code source | Compromission PSP, fraude directe | Vault (HashiCorp / AWS Secrets Manager) + rotation automatique |214| Validation KYC uniquement côté client | Contournement trivial | Toujours re-valider côté serveur, renvoyer le statut KYC depuis le backend |215216---217218## 7. Commandes d'audit utiles219220```bash221# Scanner les secrets dans le code (clés API, PANs…)222trufflehog git file://. --only-verified223224# Vérifier les headers de sécurité d'un endpoint225curl -I https://api.monservice.com/v1/payments | grep -E "Strict-Transport|Content-Security|X-Frame"226227# Tester les ciphers TLS (rejeter TLS < 1.2)228nmap --script ssl-enum-ciphers -p 443 api.monservice.com229230# Vérifier l'inventaire des scripts de paiement (PCI v4 req. 6.4.3)231# Générer les SRI hashes pour les scripts tiers232curl -s https://cdn.js.stripe.com/v3/ | openssl dgst -sha384 -binary | openssl base64 -A233```234235---236237> Ce skill fournit des orientations techniques et opérationnelles. Pour des décisions de conformité engageant la responsabilité légale de l'entreprise, consulter un juriste spécialisé en droit financier et/ou un QSA PCI certifié.