Control
Face verification used for authentication without presentation-attack detection
A face-matching step that logs a person in, unlocks an account or verifies an identity first runs presentation-attack (liveness) detection that rejects photos, screens, masks, injected video and synthetic or deepfake faces, and the verification endpoint returns a decision, not the raw match distance or similarity score.
Informational data, not legal advice. Summaries and rules have not been reviewed by a lawyer: always verify official law text for decisions. A suggested guard is intended to address each rule; adding it is not a statement of compliance to that law.
Reach
Trust and provenance
How far the rules this guard addresses have been checked. Each rule links to its provision, with its citation, official text and its own panel.
- This control
- Audit-grade: meets all 3 checks of the TwinEthos audit standard that apply to it.
- Lanes
- TwinEthos recommendation (not law) 1
- Data release
- Data release 2026.10.03.4, data as of 3 Oct 2026, schema 0.3.10. This page also reflects corpus changes made after that release; they ship in the next one.
- Legal review
- None of the 1 rule has been reviewed by a lawyer; no TwinEthos rule has been legally reviewed yet. Treat each as research to check against the official text; it is not legal advice.
- Audit standard
- 1 of 1 rule audit-grade. The audit standard is TwinEthos's own quality bar for provenance, dates, applicability, detectors, fixtures, remediation and licences; it is not a legal review.
- Detectors
- 2 detectors, all experimental: written from the rule's text and not yet measured for precision on real code, so treat a hit as a lead to verify. Each provision lists its detectors' known limits.
The guard to add
Run liveness detection before any face match used to authenticate, and return only the decision.
On every login, unlock or identity-verification route that compares faces, run presentation-attack detection first and reject on failure: a liveness service (AWS Rekognition create_face_liveness_session / get_face_liveness_session_results, Azure AI Face liveness sessions) or a local anti-spoofing model (DeepFace anti_spoofing=True, a FasNet-style detector), preferably one whose performance was tested with the methods of ISO/IEC 30107-3. Then match, and return only accept or reject with a reason code: no distance, similarity or confidence value to the client, and rate-limit attempts per account.
Where it goes: 1 application source code, 6 API calls and integrations, 9 AI output handling.
What reviewers look for: a liveness or anti-spoofing call on the same path before face_recognition.compare_faces, DeepFace.verify, Rekognition compare_faces or face-api matching in a login or verification function; responses from those routes that carry a boolean decision but no distance or score.
Example (Python + DeepFace), before:
def login_with_face(user, frame):
result = DeepFace.verify(frame, user.enrolled_face)
return {'ok': result['verified'], 'distance': result['distance']}After:
def login_with_face(user, frame):
try:
result = DeepFace.verify(frame, user.enrolled_face, anti_spoofing=True) # raises on a spoof
except ValueError:
return {'ok': False, 'reason': 'liveness_failed'}
return {'ok': bool(result['verified'])} # the decision, not the distanceEngineering guidance, not legal advice. Each provision below may add its own details (a cadence, a deadline, a required notice element): open it for those.
Every rule this guard addresses
TwinEthos recommendation (not law) (1)
- Everywhere (*)
- Run presentation-attack detection before any face match used to authenticate, and return only the decision TwinEthos derivation — guardrail.sec-face-verification-presentation-attack-detection
Informational data, not legal advice. Summaries are TwinEthos's own words and rules have not been reviewed by a lawyer: check the official text before relying on any of it. A guard addresses an item; adding it is not a statement that your code meets any law.