Standards/icao-vds-nc
ICAO VDS-NC
Overview
The ICAO Visible Digital Seal for Non-Constrained environments (VDS-NC) is a cryptographically signed data structure, encoded in a 2D barcode (typically a qr-code, optionally data-matrix), that carries the essential information of a travel or health document together with a digital signature protecting it against tampering [1, 2]. It was defined by the International Civil Aviation Organization (ICAO), a United Nations agency, as part of the Machine Readable Travel Documents standard, Doc 9303, and reuses the same eMRTD trust framework (country-level PKI) that underpins ePassports [3].
A VDS-NC is structured as three parts — a header, a message, and a signature — serialized as canonicalized JSON and signed with ECDSA (ES256 / ES384) [4]. During the COVID-19 pandemic ICAO published a VDS-NC profile for travel-related public-health proofs (vaccination and test certificates), making it a direct peer of the eu-dcc and smart-health-cards formats [1].
History
Doc 9303 lineage. The VDS concept extends ICAO's long-running Doc 9303 Machine Readable Travel Documents standard, the same framework that defines ePassports and the eMRTD PKI [3]. The "Non-Constrained" variant (VDS-NC) targets environments where data size is less restricted than on a chip — i.e. printed/displayed barcodes.
COVID-19 health proofs. During the pandemic ICAO produced specific VDS-NC guidance for travel-related public-health proofs, enabling member states' ministries (interior, foreign affairs, health, technology) to issue verifiable vaccination and test certificates for international travel [1]. ICAO also published a Guide for Handling ICAO VDS-NC Health Proofs and the EU DCC, addressing interoperability between the two systems at borders [2].
Capacity-building. ICAO offered implementation packages (iPACK) and training to help designated authorities deploy VDS-NC issuance and inspection, aiming for global interoperability and mutual recognition of health proofs [1, 5].
Technical specification
A VDS-NC is a signed JSON object with three top-level parts [4]:
{ "hdr": { "t": "icao.vacc", "v": 1, "is": "UTO" },
"msg": { ... document-specific fields ... },
"sig": { "alg": "ES256", "cer": "...", "sigvl": "..." } }
- Header (
hdr) — documenttype(t, e.g.icao.vaccfor vaccination,icao.testfor test), schemaversion(v), andissuing country(is, ISO 3166-1) [4]. - Message (
msg) — the health/travel payload (e.g. for a vaccination proof: holder identity, vaccine/prophylaxis, doses, dates, certificate ID) [1, 4]. - Signature (
sig) — the signingalg(ES256 = ECDSA P-256/SHA-256, or ES384), the signer certificatecer, and the signature valuesigvl[4].
Canonicalization & signing. The JSON protected by the signature is canonicalized per RFC 8785 (JSON Canonicalization Scheme) before signature generation and verification; the ECDSA signature is the raw r‖s form [4, 6]. (ICAO Doc 9303 also defines a compact CBOR/byte serialization of the seal for constrained variants.)
Trust framework. VDS-NC reuses the eMRTD PKI: a Barcode Signer Certificate (BSC) is issued under the country's CSCA (Country Signing Certificate Authority). A verifier needs only the issuing state's root (CSCA) certificate to validate the seal's integrity; the signer certificate can be carried inline in the seal [3].
Carrier. The encoded seal is the payload for a qr-code or data-matrix [6].
Use cases
- Travel-related public-health proofs — verifiable COVID-19 vaccination and test certificates for international travel [1].
- eMRTD-family travel documents — VDS/VDS-NC profiles cover visas, residence permits, emergency travel documents, arrival/visa attestations, and other supplementary travel documents [4].
- Offline border verification — because the signer certificate can be embedded and only the country CSCA root is required, inspection works without live connectivity, suited to border posts [3].
- Add-on to paper documents — a printed seal extends a paper certificate with tamper-evident, machine-verifiable data [2].
Implementations
- Kotlin generator/parser — tsenger/vdstools — 13★, last active 2026. Parses and generates VDS and VDS-NC seals across profiles (vaccination, test, residence permit, emergency travel, visa, arrival attestation), supports ES256/ES384, and outputs barcode-agnostic bytes for QR or Data Matrix [4].
- Android reader — australian-passport-office/vds-nc-reader-library-android — Kotlin, reads and evaluates VDS-NC per ICAO Doc 9303 in Android apps [3].
- JVM verifier —
kurzdigital/vds-jvmparses and verifies VDS / VDS-NC seals [6]. - EU tooling — the EU Publications Office published a VDS Reader for inspecting ICAO seals [6].
- ICAO iPACK — official implementation package and training for state authorities deploying issuance/inspection [1, 5].
Comparison
| ICAO VDS-NC | eu-dcc | smart-health-cards | divoc | |
|---|---|---|---|---|
| Data model | signed JSON seal (hdr/msg/sig); CBOR variant in Doc 9303 | CWT / CBOR + COSE | W3C VC as JWS over FHIR | W3C VC (JSON-LD) |
| Encoding | canonical JSON (RFC 8785) in QR/Data Matrix | Base45 + ZLIB, HC1: |
numeric shc:/, Deflate |
JSON-LD in QR |
| Signature | ES256 / ES384, raw r‖s | ES256 / PS256 | ES256 | issuer-controlled |
| Trust | eMRTD CSCA / BSC PKI, offline-capable | EU Gateway CSCA/DSC PKI | issuer JWKS + VCI directory | per-country keys |
| Governance | ICAO (UN agency) | EU eHealth Network → WHO | VCI consortium / HL7 | eGov Foundation (India) |
| Scope | travel docs + health proofs | health proofs | health/clinical credentials | health campaigns |
VDS-NC is distinguished by its roots in the ePassport (eMRTD) trust ecosystem: it reuses the same CSCA PKI that already binds ICAO member states, so verification needs only an issuing country's existing root certificate and can run fully offline at a border. Where EU DCC built a new EU Gateway and SHC uses web-published keys, VDS-NC leans on infrastructure governments already operate for passports [3, 4].
Fun facts
It rides on ePassport infrastructure. Because VDS-NC reuses the eMRTD CSCA PKI, any state that already issues ePassports has most of the trust machinery to issue and verify VDS-NC seals — verification can require nothing more than the issuing country's root certificate [3].
ICAO published a dedicated EU-DCC interoperability guide. Recognizing that two parallel health-proof formats existed at borders, ICAO issued a Guide for Handling ICAO VDS-NC Health Proofs and the EU DCC so inspectors could process both [2].
Status
VDS-NC is a published ICAO standard within the Doc 9303 / MRTD family and remains in use for travel documents beyond the pandemic (visas, residence permits, emergency travel documents) [4]. Its public-health-proof profile saw heavy pandemic-era uptake and now sits alongside the wound-down EU DCC and SMART Health Cards as a post-pandemic credential format; the underlying VDS/VDS-NC mechanism and its eMRTD trust model continue as part of ICAO's machine-readable travel-document toolkit, with tooling actively maintained (e.g. tsenger/vdstools, last active 2026) [4, 7].
Sources
- Guidance for Visible Digital Seals (VDS-NC) for Travel-Related Public Health Proofs — ICAO
- Guide for Handling ICAO VDS-NC Health Proofs and the EU DCC — ICAO
- vds-nc-reader-library-android (Doc 9303, eMRTD trust) — Australian Passport Office
- vdstools — VDS/VDS-NC structure, profiles, ES256/ES384 — tsenger
- Visible Digital Seals iPACK — ICAO
- vds-jvm — parse and verify VDS/VDS-NC — kurzdigital
Deployments
No country reports mention this standard by name.
Regions / aggregations not mapped to a single country
- Universal