Open the link
A reading starts from a one-time link or QR code that opens CodeB Wallet. The link is valid for 10 minutes and works once.
CodeB Wallet · NFC · ICAO Doc 9303
CodeB Wallet reads the chip of a passport or ID card over NFC. The CodeB server runs every chip check itself; the phone only passes the chip’s encrypted messages through. So the result does not depend on trusting the phone: a modified app can interrupt a reading, but it cannot change the result.
NFC · ICAO Doc 9303 · PACE · Chip Authentication · Active Authentication · Passive Authentication · CSCA master list · CRLs
Works with the CodeB Wallet closed beta. Not certified.
The server is the terminal. The phone is only the NFC antenna.
A reading starts from a one-time link or QR code that opens CodeB Wallet. The link is valid for 10 minutes and works once.
The six-digit CAN of an ID card, or the document number, date of birth and expiry date of a passport. They only open the chip.
The phone forwards the server’s chip commands and the chip’s answers. After the secure channel is set up, all of them are encrypted between chip and server.
Secure access, chip authenticity, the signature over the data and the revocation status, all against the server’s own trust lists.
The phone receives only the verdict and the reasons, never the personal data.
Passive Authentication: every data group must match the hash signed by the issuing country’s document signer, which must chain to a trusted country signing certificate (CSCA) of the same country and must not be revoked.
Chip Authentication (or Active Authentication) proves that the chip holds its private key. A copy of the data on another chip fails.
The phone never sees the data in plain text during a server reading and cannot forge the chip’s answers: they are protected by keys only the chip and the server have.
Each reading is bound to a key in the phone’s secure hardware. The server checks the Android hardware key attestation (genuine app, locked and verified device) and the signature on every request.
A chip that lists data in its security object but does not hand it over is rejected, and so is a passport read with the older BAC protocol although it announces the newer PACE.
Three wrong access codes end a reading session, sessions work once, and every challenge is fresh.
The same trust material the server checks against is published unchanged for wallets and relying parties that run their own Passive Authentication. No sign-in, no redirect, with ETag caching.
https://phone.codeb.io/wallet/trust/csca-masterlist.ml — the German CSCA master list, byte for byte (CMS SignedData), refreshed weekly and replaced only after its signature, signer and issuing CSCA are checked.https://phone.codeb.io/wallet/trust/csca-crls.zip — the CRLs of the CSCAs in that list, refreshed daily; each is kept only if its CSCA signature verifies, and never replaced by an older one.https://phone.codeb.io/wallet-trust.ashx?status — dates, hashes and the countries with a stored CRL, as JSON.CodeB Wallet reads the chip of a passport or national ID card over NFC. The CodeB server runs the ICAO Doc 9303 checks itself: secure access with the CAN or the MRZ data, Chip Authentication or Active Authentication against cloned chips, and Passive Authentication of the data against the issuing country's signing certificates. The result is genuine, not verified or not genuine.
The phone only passes the chip's messages through. After the secure channel to the chip is set up, these messages are encrypted and authenticated between the chip and the server, so a modified app can interrupt a reading but cannot change its result or invent data.
Passports and ID cards with a chip that follow ICAO Doc 9303 (eMRTD), for example the German ID card with its six-digit CAN or a passport with the data from its machine-readable zone. The issuing country's signing certificate must be in the CSCA master list the server uses.
For ID cards the six-digit card access number (CAN) printed on the card; for passports the document number, date of birth and date of expiry from the machine-readable zone. The server uses them only to open the chip and never stores them.
Genuine: the data is signed by a trusted issuing country, unchanged, not revoked, and the chip proved it is the original. Not verified: the data was read, but the issuer could not be fully confirmed, for example because no current revocation list of that country is available. Not genuine: a signature or chip check failed, or the chip held back data it lists.
The checks need the data only briefly. The evidence record of each reading contains hashes, algorithms, results and timings, but no name, date of birth, CAN or machine-readable zone; the document number is kept only as a keyed hash.
Yes. The server publishes the CSCA master list and the countries' revocation lists unchanged at /wallet/trust/csca-masterlist.ml and /wallet/trust/csca-crls.zip, refreshed weekly and daily after their signatures are checked.
No. It is designed to follow ETSI TS 119 461 v2.1.1 (extended level of identity proofing) and the EU Architecture and Reference Framework (ARF) 3.0, but it is not certified, and no level of assurance is claimed.
CodeB Wallet is in closed beta. To become a tester, write to info@aloaha.com.
Write to us about the chip check, the evidence record or the public trust lists. Testers for CodeB Wallet are welcome too.