eMRTD data quirks

This is a list of quirks I spotted on eMRTDs that I'm posting to try and help out anyone else who is trying to parse them. It's a list I will continue updating, probably.

As I've spotted these while implementing hf emrtd set of commands on Proxmark3, they're all fixed there.

Last updated: 2025-01-30

Authentication protocol

MRZ and EF_DG1 (TD3 – Passport Size)

Note: ICAO 9303 p3 Edition 8 does not properly reflect this, and this is likely a drafting error. I have contacted ICAO about this.

MRZ and EF_DG1 (TD1 – ID Size)

Document type codes

First two characters of MRZ are for document type. No one can decide what exactly they want to use, especially for residence permits. Here's what I found for residence permits based on going through PRADO for EU+EEA+Schengen members. I will go through IDs and Passports at some point, but I don't expect them to differ much (except Italy, because why not).

EF_DG11

EF_DG12

EF_SOD

EF_CardAccess

BSI TR-03110-3 says on section A.1.1.7.: “The string urlCardInfo SHALL define the location that provides the most recent CardInfo file [5] for the respective ICC type and version”.

This in turn relates to BSI TR-03112-4 (section 4) and CEN/TS 15480-4. It's to improve interoperability among EU IDs.

On German eIDs and electronic residence permits (probably German Unionsbürger eIDs too), this is set to http://bsi.bund.de/cif/npa.xml, which is 404 at the time of writing (2025), I have contacted BSI about this.