Passer au contenu principal

Vue d’ensemble

Les avertissements sur le rapport de détection du vivant signalent chaque condition observée par Didit lors de l’exécution du contrôle de détection du vivant. Ils se trouvent dans le tableau warnings[] de chaque élément de liveness_checks[] (voir Rapport de détection du vivant), avec le champ feature défini sur "LIVENESS". Chaque entrée suit la structure commune de l’objet d’avertissement : feature, risk, additional_data, log_type, short_description, long_description, node_id. Chaque avertissement comprend trois couches :
  1. Le code risk — un identifiant stable que vous pouvez exploiter dans votre code (les codes répertoriés ci-dessous).
  2. Le log_type — l’une des valeurs information, warning ou error. Les risques entraînant un refus automatique portent toujours la valeur error. Pour les risques configurables, il découle de l’action configurée : Aucune action → information, Examen → warning, Refuser → error. Pour les risques basés sur des seuils (LOW_LIVENESS_SCORE, LOW_FACE_QUALITY), la valeur est error lorsque la valeur franchit le seuil de refus et warning lorsqu’elle ne franchit que le seuil d’examen.
  3. L’impact sur la décision — le même routage détermine le champ status du rapport de détection du vivant : une action Examen le fait passer à In Review, une action Refuser (ou tout risque de refus automatique) à Declined, et Aucune action le laisse inchangé.
Certains risques ne sont émis que lorsque la méthode de détection du vivant est PASSIVE (contrôles de visages multiples, de qualité et de luminance). Les tableaux ci-dessous répertorient l’ensemble complet des codes de risque de détection du vivant et leur gravité — aucun autre code de risque de détection du vivant n’existe.

Conditions de refus automatique

Les risques suivants font systématiquement passer le rapport de détection du vivant (et la session) à Declined, avec log_type: "error" : Lorsque NO_FACE_DETECTED se déclenche, LOW_LIVENESS_SCORE est masqué (il n’y a aucun visage à évaluer).

Paramètres de vérification configurables

Dans la console Didit, les risques de détection du vivant sont regroupés sous les paramètres de workflow suivants :

Avertissements générés

Détection du vivant principale

Intégrité du canal de capture

Signaux d’attaque par injection signalés par le client au moment de la capture. Contrairement aux attaques par présentation (un artefact placé devant une véritable caméra), ceux-ci décrivent le remplacement ou l’interception du flux de la caméra lui-même. Chacun est configurable par workflow et est défini par défaut sur aucune action, de sorte que l’activation de la fonctionnalité ne modifie aucune décision tant que vous n’avez pas choisi une action.
Les navigateurs n’exposent aucune attestation de source de caméra au niveau de l’OS à aucun fournisseur ; sur le web, ces signaux constituent donc des éléments de corroboration plutôt que des preuves. Sur le web, un verdict null signifie non déterminé (les libellés des appareils ne sont pas disponibles tant que l’autorisation de la caméra n’est pas accordée) et ne déclenche jamais de risque.
Une caméra virtuelle est identifiée par le nom de son appareil ; une caméra que le système d’exploitation présente sous un nom ordinaire n’est donc pas reconnue de cette façon. Au sein d’un émulateur Android, la caméra remappée est libellée comme n’importe quelle caméra intégrée, c’est pourquoi le cas du matériel émulé est signalé via FRAME_INJECTION_SUSPECTED à la place : il est détecté à partir de l’environnement de l’appareil - la pile de rendu et le modèle d’appareil rapporté dans le user-agent - plutôt qu’à partir du nom de la caméra. Les constats émis à partir de l’environnement de l’appareil portent additional_data.reason: "emulated_capture_device", ce qui les distingue de l’analyse d’images propre au modèle de détection du vivant.
Détecter la machine depuis un navigateur constitue un indice, non une attestation, et un attaquant déterminé peut interférer avec celle-ci. Les SDK mobiles natifs signalent des signaux d’intégrité plus solides, au niveau du système d’exploitation, qu’un navigateur ne peut pas voir (émulateur, appareil rooté ou jailbreaké, interposition au moment de l’exécution, débogueur attaché), chacun avec sa propre action configurable sous Intégrité de l’appareil et de l’environnement d’exécution. Ces signaux augmentent considérablement le coût pour l’attaquant, mais à eux seuls ils ne prouvent pas qu’une capture provient d’un appareil authentique. Les signaux d’intégrité de l’appareil sont indépendants de la méthode de détection du vivant, ils se combinent donc avec Passive, 3D Flash ou 3D Action & Flash.

Analyse médico-légale de la cohérence de l’enregistrement

LIVENESS_VIDEO_ANOMALY est calculé côté serveur sur l’enregistrement de détection du vivant stocké, indépendamment du modèle de détection du vivant. Il détecte une séquence en mouvement répétée sur plusieurs cycles, caractéristique d’un flux en boucle. Définissez l’action sur votre nœud Détection du vivant ou Estimation de l’âge : NO_ACTION enregistre un constat informatif, REVIEW peut faire passer une vérification déjà tranchée à En cours d’examen, et DECLINE peut la faire passer à Refusé. La vérification s’exécute de manière asynchrone, de sorte qu’une escalade peut arriver après le résultat initial. Une décision existante plus sévère n’est pas rétrogradée, et les décisions d’examen manuel sont préservées. Les constats de version 2 incluent forensics_version: 2, des preuves repeated_sequence et repeated_moving_sequence dans anomaly_reasons. Les mesures de transmission telles que unique_frame_ratio, static_pair_ratio, decoded_fps_ratio et max_frame_gap_seconds restent des diagnostics ; elles ne peuvent pas établir un rejeu à elles seules. Les constats plus anciens décrivent la version du détecteur utilisée à ce moment-là et ne sont pas reclassés rétroactivement.
Il s’agit d’un signal complémentaire prudent, et non d’une détection complète de médias synthétiques ou de vidéos injectées. Un enregistrement sans anomalie ne constitue pas une preuve de présence du vivant. Les captures courtes ou ambiguës et les captures sans preuve de rejeu exploitable ne sont pas signalées par cette vérification. Les enregistrements manquants ou illisibles ne produisent aucun constat issu de ce contrôle ; les autres vérifications continuent de s’appliquer.

Correspondance faciale inter-sessions

Pour les correspondances avec des visages importés ou des visages figurant dans des listes (qui n’ont pas de session), les valeurs *_session_id, *_session_number et api_service dans additional_data sont null. Les visages appartenant au même utilisateur (même vendor_data, ou même utilisateur fournisseur lorsqu’il est disponible) sont exclus de l’intégralité de la recherche dans l’index — tant pour la détection de doublons que pour le filtrage sur liste de blocage. La priorité de correspondance est la suivante : liste de blocage exacte → liste d’autorisation exacte → doublon exact → liste de blocage possible → liste d’autorisation possible → doublon possible — un seul de ces six codes mutuellement exclusifs apparaît dans chaque rapport. DUPLICATED_FACE_NAME_MISMATCH ne fait pas partie de ce groupe de priorité : il s’agit d’un code supplémentaire émis en plus de DUPLICATED_FACE lorsque la vérification d’identité échoue également, jamais à sa place. additional_data.name_match_score ne transmet jamais les noms comparés — uniquement des identifiants et un score, de sorte qu’aucun renseignement personnel n’apparaît dans le payload de l’avertissement. Un nom écrit dans un système d’écriture différent sur chaque document (par exemple en hébreu sur l’un et en alphabet latin sur l’autre) peut obtenir un score inférieur au seuil même lorsque les deux sessions appartiennent à la même personne. Dans ce cas précis, DUPLICATED_FACE_NAME_MISMATCH n’est pas émis lorsque les documents d’identité des deux sessions se corroborent mutuellement sur tous ces points :
  • Les deux documents indiquent le même État de délivrance.
  • Un identifiant correspond exactement entre les deux documents. document_number et personal_number sont considérés de manière interchangeable, car le même numéro national peut figurer dans l’un ou l’autre champ selon le type de document.
  • Lorsque les deux documents comportent une date de naissance, il s’agit de la même date.
Si les noms sont rédigés dans le même système d’écriture, si l’identifiant ou l’État de délivrance diffère ou est manquant, ou si les dates de naissance se contredisent, l’avertissement est toujours émis comme décrit ci-dessus.

Qualité de la détection du vivant passive (uniquement lorsque method = "PASSIVE")

LOW_FACE_LUMINANCE et HIGH_FACE_LUMINANCE s’excluent mutuellement — la luminance est soit inférieure au minimum, soit supérieure au maximum, jamais les deux.

Estimation de l’âge (workflows adaptatifs et nœuds AGE_ESTIMATION)

Chaînes de description exactes

L’API renvoie ces chaînes exactes de short_description et long_description pour chaque risque :

API autonome de détection passive du vivant

L’API Liveness autonome réutilise les mêmes codes de risque avec quelques différences de comportement :
  • NO_FACE_DETECTED et LOW_LIVENESS_SCORE s’excluent mutuellement — la vérification du score ne s’exécute que si un visage a été détecté. LOW_LIVENESS_SCORE se déclenche en fonction du face_liveness_score_decline_threshold de la requête (par défaut 30) et comporte toujours log_type: "error".
  • POSSIBLE_FACE_IN_BLOCKLIST est traité comme un refus (log_type: "error") plutôt qu’un examen.
  • MULTIPLE_FACES_DETECTED comporte log_type: "warning", tandis que les risques de visages dupliqués restent informatifs. Seuls les avertissements de niveau error font basculer le status de la réponse autonome à Declined.
  • Les entrées d’avertissement autonomes incluent feature mais aucun node_id.

Exemples

Refus automatique en cas d’attaque détectée

Avertissements configurables sur une capture passive

Visage dupliqué avec payload

Ici, l’action pour visage dupliqué est définie sur Examen, l’avertissement porte donc log_type: "warning" et le statut du rapport de détection du vivant est In Review. Avec la valeur par défaut (Aucune action), il contiendrait plutôt log_type: "information". api_service est null car le visage correspondant provient d’une session de workflow, et non d’un appel d’API autonome.

Visage dupliqué sous un nom différent

DUPLICATED_FACE conserve son action configurée (ici, Aucune action — log_type: "information"), tandis que DUPLICATED_FACE_NAME_MISMATCH applique sa propre action, définie par défaut sur Examen (log_type: "warning"). Le statut du rapport de détection du vivant suit le niveau de gravité le plus élevé des deux : In Review ici, même si le paramètre classique de visage dupliqué ne l’aurait pas signalé à lui seul.

Anomalie de cohérence de l’enregistrement avec ses mesures

Cet exemple montre la preuve de rejeu issue d’un enregistrement contenant trois copies d’une séquence animée. log_type est information car l’action configurée est NO_ACTION. Les diagnostics de distribution des trames, omis de cet exemple par souci de concision, ne déclenchent pas cette détection.

Types d’avertissements

Chaque risque se voit attribuer un niveau de gravité en fonction de la configuration de votre application. Les trois niveaux de gravité sont :

Liens connexes

Dernière modification le 7 novembre 2026