Security overview

One page, for your review packet.

Print this page or save it as a PDF. It is laid out so the printed version is the document — no navigation, no calls to action, and every external link expanded.

Use your browser’s print or “Save as PDF” command. Everything below fits a review packet as-is.

1. What the product does

LaurelID verifies that a patron presenting an ISO/IEC 18013-5 mobile ID is 21 or older. The check runs on an enterprise Android verifier at the point of service. The Laurel Secure platform receives an aggregate outcome and never receives patron identity.

2. The verification request

This is the complete request, unchanged in every release. It is a minimal-disclosure request for a single pre-computed age attestation, with retention explicitly declined.

The entire verification request Complete and unchanged
document type
org.iso.18013.5.1.mDL
namespace
org.iso.18013.5.1
element
age_over_21
intentToRetain
false

3. Data the platform never receives

  • Name
  • Date of birth
  • Address
  • Portrait or photo
  • Document number
  • Wallet identifier
  • Mobile-ID payload
  • Session transcript
  • Patron identifier
  • Repeat-visitor identifier

No column, blob path, or contract field exists for any of these. The device-to-platform schema is an allowlist that rejects unrecognized fields rather than stripping them.

4. What the platform does receive

Per verification event: a random event ID used only for retry de-duplication, the device and location identifiers, one of three outcomes (pass, fail, unable_to_verify), an optional closed failure category used only when the outcome is unable_to_verify, the occurrence time, the application version, and optionally the configuration version. There is no other legal field.

5. Storage and reporting

Outcomes are stored as cumulative and day-bucketed counters per location. There is no per-verification row at any tier and no patron entity in the schema. Rows below a minimum group size of k = 3 are suppressed in the database query and re-checked in API responses, exports, and contracts, for every role including the highest.

6. Device security

Devices are created in the portal and activated with a single-use code. The device credential is encrypted under the Android Keystore, using StrongBox where the hardware provides it, with an explicit guarded fallback where it does not. Credentials rotate with a bounded overlap and durable acknowledgement before retirement. Lifecycle policy is versioned and leased, covering active, suspended, quarantined, and revoked states; queue-delivery permission is explicit and independent. Minimum and recommended application versions are enforced by the platform. An activated device cannot be reassigned in place.

7. Issuer trust

Production trust is limited to exact certificate bytes authenticated through either the signed AAMVA Digital Trust Service VICAL or a reviewed issuing authority's official certificate endpoint. VICAL updates are verified for COSE signature, provider chain, validity interval, and rollback before atomic activation; direct pins are certificate- and jurisdiction-bound. Offline verification remains available only while both the device policy lease and the admitted signed trust publication are valid. The verifier fails closed when either boundary is reached. Android system and user CAs, credential-provided roots, imported roots, test IACAs, and indefinitely stale packages are not accepted.

8. Delivery and replay

Verification is local, so a network outage does not stop checks. Completed outcomes enter a bounded transactional on-device outbox (5,000 rows, 8 MiB, 28 days) and are delivered at-least-once. Each event carries a stable random identity that survives retry, process death, force-stop, reboot, and partial synchronization. The platform claims that identity atomically before updating a counter, so an exact retry is idempotent and a changed-payload replay fails closed. The net property is effective exactly-once aggregate effects — not a claim of exactly-once network delivery.

9. Platform architecture

One API is the only writer to the database and the only endpoint devices contact. Organization scope is applied in the database query rather than as an application-layer filter. Portal authentication runs through WorkOS AuthKit. Error reporting excludes raw request bodies and unvalidated fields, and issues are grouped and titled from bounded values rather than raw messages. Schema changes ship as reviewed, ordered migrations with a documented rollback path.

10. Subprocessors

Cloudflare (edge compute and static hosting), Neon (managed Postgres), WorkOS (portal authentication), Resend (transactional email), Sentry (error monitoring). None receives patron identity data, because the platform never receives it. This website runs no analytics, advertising, or session-replay tooling.

11. Current validation status

Checked-in evidence records 15 jurisdictions in both Apple Wallet and Google Wallet as physically validated on Elo M51. 14 have also passed the canonical production gates. Arkansas is physically qualified in Apple Wallet and Google Wallet, but official issuing-authority certificate binding remains pending; it is not production enabled. Current production support is shown only after matching live operational confirmation. Without it, every combination remains fail-closed as in qualification, wallet available, planned, suspended, or unavailable.

12. Stated limitations

  • No SOC 2, ISO 27001, or PCI attestation
  • No completed independent third-party security audit
  • No regulatory approval or government endorsement
  • No published uptime or accuracy figure
  • Arkansas is physically qualified in Apple Wallet and Google Wallet, but official issuing-authority certificate binding remains pending; it is not production enabled.
  • No claim of perfect presentation-attack detection

One known reporting edge case: a process kill in the narrow interval after a result is rendered but before the outbox commit can lose that single aggregate event. Verification itself is unaffected; every event that reports queued is durable.

13. Reporting a security issue

Use the contact form at laurelsecure.com/contact with the subject “Security disclosure.” Do not include real personal data in a report. Full process: laurelsecure.com/trust-center/responsible-disclosure.

Laurel Secure — the company and cloud control platform. LaurelID — the mobile ID verification product and Android verifier. This overview reflects the product as of the date shown in the page metadata; the authoritative version is always the one at laurelsecure.com/trust-center/security-overview.