Panoramica
Gli avvisi nel report di rilevamento della vitalità segnalano ogni condizione rilevata da Didit durante l’esecuzione del controllo di vitalità. Vengono inseriti nell’arraywarnings[] di ogni elemento di liveness_checks[] (vedi Report di rilevamento della vitalità), con feature impostato su "LIVENESS". Ogni voce segue la struttura condivisa dell’oggetto avviso: feature, risk, additional_data, log_type, short_description, long_description, node_id.
Ogni avviso è composto da tre livelli:
- Il codice
risk— un identificatore stabile che puoi verificare nel tuo codice (i codici sono elencati di seguito). - Il
log_type— uno trainformation,warningoerror. I rischi di rifiuto automatico presentano sempreerror. Per i rischi configurabili viene ricavato dall’azione configurata: Nessuna azione →information, Revisione →warning, Rifiuta →error. Per i rischi basati su soglie (LOW_LIVENESS_SCORE,LOW_FACE_QUALITY) èerrorquando il valore raggiunge o scende al di sotto della soglia di rifiuto ewarningquando raggiunge o scende al di sotto solo della soglia di revisione. - L’impatto sulla decisione — lo stesso routing determina lo
statusdel report di rilevamento della vitalità: un’azione Revisione lo sposta suIn Review, un’azione Rifiuta (o qualsiasi rischio di rifiuto automatico) suDeclined, mentre Nessuna azione lo lascia invariato.
PASSIVE (controlli su volti multipli, qualità e luminanza). Le tabelle seguenti elencano la serie completa di codici di rischio di vitalità e i relativi livelli di gravità — non esistono altri codici di rischio per la vitalità.
Condizioni di rifiuto automatico
I seguenti rischi impostano sempre il report di rilevamento della vitalità (e la sessione) suDeclined, con log_type: "error":
Quando si attiva
NO_FACE_DETECTED, LOW_LIVENESS_SCORE viene soppresso (non c’è alcun volto a cui assegnare un punteggio).
Impostazioni di verifica configurabili
Nella console Didit, i rischi di vitalità sono raggruppati nelle seguenti impostazioni del workflow:Avvisi generati
Vitalità principale
Integrità del canale di acquisizione
Segnali di attacco di iniezione segnalati dal client al momento dell’acquisizione. A differenza degli attacchi di presentazione (un artefatto posto davanti a una fotocamera reale), questi descrivono la sostituzione o l’intercettazione del feed della fotocamera stesso. Ciascuno è configurabile per workflow e l’impostazione predefinita è nessuna azione, quindi l’abilitazione della funzionalità non modifica alcuna decisione finché non attivi esplicitamente la funzionalità.I browser non espongono alcuna attestazione a livello di sistema operativo sull’origine della fotocamera a nessun fornitore, quindi sul web questi segnali costituiscono prove a supporto piuttosto che prove certe. Sul web, un verdetto pari a
null indica non determinato (le etichette dei dispositivi non sono disponibili finché non viene concesso il permesso per la fotocamera) e non genera mai un rischio.FRAME_INJECTION_SUSPECTED: viene rilevato dall’ambiente del dispositivo (lo stack di rendering e il modello del dispositivo segnalati nello user agent) anziché dal nome della fotocamera. I rilievi generati dall’ambiente del dispositivo contengono additional_data.reason: "emulated_capture_device", distinguendosi così dall’analisi dei frame eseguita dal modello di liveness stesso.
Il rilevamento della macchina da un browser costituisce una prova indiziaria, non un’attestazione, e un utente malintenzionato determinato può interferire con esso. Gli SDK nativi per dispositivi mobili segnalano segnali di integrità più solidi a livello di sistema operativo che un browser non può rilevare (emulatore, dispositivo sottoposto a root o jailbreak, hooking del runtime, debugger collegato), ciascuno con la propria azione configurabile in Integrità del runtime e del dispositivo. Questi segnali aumentano notevolmente i costi per l’attaccante, ma da soli non provano che un’acquisizione provenga da un dispositivo autentico. I segnali di integrità del dispositivo sono indipendenti dal metodo di liveness, pertanto si combinano con qualsiasi modalità tra Passiva, 3D Flash o 3D Action & Flash.
Analisi forense dell’integrità della registrazione
LIVENESS_VIDEO_ANOMALY viene calcolato lato server sulla registrazione di liveness archiviata, indipendentemente dal modello di liveness. Rileva una sequenza in movimento ripetuta su più cicli, compatibile con un feed riprodotto in loop.
Imposta l’azione sul tuo nodo Rilevamento della vitalità o Stima dell’età:
NO_ACTION registra un rilievo informativo, REVIEW può far passare una verifica con decisione presa allo stato In revisione, e DECLINE può farla passare a Rifiutata. Il controllo viene eseguito in modo asincrono, quindi un’escalation può arrivare dopo il risultato iniziale. Una decisione esistente più severa non viene declassata e le decisioni di revisione manuale vengono mantenute.
I rilievi della versione 2 includono forensics_version: 2, prove di repeated_sequence e repeated_moving_sequence in anomaly_reasons. Le misurazioni di consegna come unique_frame_ratio, static_pair_ratio, decoded_fps_ratio e max_frame_gap_seconds rimangono diagnostiche; non possono da sole dimostrare che si tratta di un replay. I rilievi più datati descrivono la versione del rilevatore utilizzata all’epoca e non vengono riclassificati retroattivamente.
Si tratta di un segnale aggiuntivo prudenziale, non di un rilevamento completo di media sintetici o video iniettati. Una registrazione senza anomalie non costituisce una prova di vitalità. Acquisizioni brevi o ambigue e acquisizioni prive di prove di replay utilizzabili non vengono contrassegnate da questo controllo. Le registrazioni mancanti o illeggibili non producono alcun rilievo da questo controllo; continuano ad applicarsi gli altri controlli di verifica.
Confronto facciale tra sessioni
Per le corrispondenze con volti importati o voci di elenco (che non hanno una sessione), i valori di
*_session_id, *_session_number e api_service in additional_data sono null.
I volti appartenenti allo stesso utente (stesso vendor_data, o lo stesso utente vendor quando disponibile) sono esclusi dall’intera ricerca nell’indice — sia dal rilevamento dei duplicati sia dallo screening delle blocklist. L’ordine di precedenza delle corrispondenze è: blocklist esatta → allowlist esatta → duplicato esatto → blocklist possibile → allowlist possibile → duplicato possibile — solo uno di questi sei codici mutuamente esclusivi compare per ciascun report. DUPLICATED_FACE_NAME_MISMATCH non fa parte di questo gruppo di precedenza: è un codice aggiuntivo emesso in aggiunta a DUPLICATED_FACE quando fallisce anche il controllo dell’identità, mai al suo posto. additional_data.name_match_score non include mai i nomi messi a confronto — solo gli ID e un punteggio, evitando così l’inclusione di PII nel payload dell’avviso.
Un nome scritto in un sistema di scrittura diverso su ciascun documento (ad esempio ebraico su uno e latino sull’altro) può ottenere un punteggio inferiore alla soglia anche se entrambe le sessioni appartengono alla stessa persona. In questo caso specifico, DUPLICATED_FACE_NAME_MISMATCH non viene emesso se i documenti d’identità delle due sessioni si confermano a vicenda su tutti i seguenti elementi:
- Entrambi i documenti riportano lo stesso stato emittente.
- Un identificativo corrisponde esattamente tra i due documenti.
document_numberepersonal_numbersono intercambiabili, poiché lo stesso numero nazionale può comparire in entrambi i campi a seconda del tipo di documento. - Laddove entrambi i documenti riportino una data di nascita, questa corrisponde alla stessa data.
Qualità della vitalità passiva (solo quando method = "PASSIVE")
LOW_FACE_LUMINANCE e HIGH_FACE_LUMINANCE sono mutuamente esclusivi — la luminanza è o inferiore al minimo o superiore al massimo, mai entrambi.
Stima dell’età (workflow adattivi e nodi AGE_ESTIMATION)
Stringhe di descrizione esatte
L’API restituisce queste stringhe esatte dishort_description e long_description per ciascun rischio:
API autonoma di rilevamento passivo della vitalità
La Liveness API standalone riutilizza gli stessi codici di rischio con alcune differenze di comportamento:NO_FACE_DETECTEDeLOW_LIVENESS_SCOREsi escludono a vicenda: il controllo del punteggio viene eseguito solo se viene trovato un volto.LOW_LIVENESS_SCOREsi attiva rispetto al valore diface_liveness_score_decline_thresholddella richiesta (predefinito 30) e restituisce semprelog_type: "error".POSSIBLE_FACE_IN_BLOCKLISTviene gestito come un rifiuto (log_type: "error") invece che come revisione.MULTIPLE_FACES_DETECTEDrestituiscelog_type: "warning", mentre i rischi legati a volti duplicati rimangono informativi. Solo gli avvisi di livelloerrorimpostano il campostatusdella risposta standalone suDeclined.- Le voci di avviso standalone includono
featurema nessunnode_id.
Esempi
Rifiuto automatico su attacco rilevato
Avvisi configurabili su un’acquisizione passiva
Volto duplicato con payload
log_type: "warning" e lo stato del report di rilevamento della vitalità è In Review. Con l’impostazione predefinita (No action) includerebbe invece log_type: "information". api_service è null perché il volto corrispondente proveniva da una sessione di workflow e non da una chiamata API autonoma.
Volto duplicato con un nome diverso
DUPLICATED_FACE mantiene l’azione configurata (qui, No action — log_type: "information"), mentre DUPLICATED_FACE_NAME_MISMATCH riporta la propria azione, che per impostazione predefinita è Review (log_type: "warning"). Lo stato del report di rilevamento della vitalità assume il livello più grave tra i due: qui In Review, anche se la sola impostazione del volto duplicato non lo avrebbe segnalato.
Anomalia di integrità della registrazione con le relative misurazioni
log_type è information perché l’azione configurata è NO_ACTION. La diagnostica della consegna dei frame, omessa in questo esempio per brevità, non attiva la segnalazione.
Tipi di avviso
A ciascun rischio viene assegnata una gravità in base alla configurazione della tua applicazione. I tre livelli di gravità sono:Correlati
- Report di rilevamento della vitalità — schema completo del report e degli stati.
- Avvisi di confronto facciale — avvisi associati al confronto facciale 1:1.
- Webhook —
session.status.updatedtrasmette gli avvisi non appena termina il passaggio di rilevamento della vitalità. - Modelli di dati — Controllo di rilevamento della vitalità — schema canonico con tutti i campi.
- Modelli di dati — Oggetto di avviso — la struttura di ogni voce in
warnings[].