버전
현재 배포에서는 항상 “1.0”입니다. 향후 개정판에서 올라갈 수 있습니다.
표준 · 모바일 운전면허증(mDL)
바텐더, TSA 직원 또는 렌터카 직원이 휴대폰의 운전면허 앱에 있는 QR을 스캔할 때, 그 QR은 면허증이 아닙니다. 핸드셰이크입니다. 실제 속성은 그들의 검증자가 특정 필드를 요청하고 사용자가 휴대폰에서 공개를 승인한 후에만 전달됩니다. 제대로 사용하면 mDL은 실물 카드보다 훨씬 적게 노출됩니다. 잘못 사용하면(악의적 검증자, 일괄 승인) 같은 양 또는 그 이상을 노출합니다. 그 차이를 구별하는 방법은 다음과 같습니다.
ISO/IEC 18013-5:2021, 개인 식별 — ISO 준수 운전면허증 — 제5부: 모바일 운전면허증(mDL) 애플리케이션. 디지털 운전면허증이 어떻게 발급되고, 저장되고, 검증자에게 전송되며, 오프라인으로 검증되는지를 규정하는 국제 표준입니다. QR 코드 표면(대부분의 사람이 보는 부분)은 8.2절 “기기 검색, QR 코드 engagement”입니다. 동반 표준인 ISO/IEC 18013-7은 온라인 검색(검증자가 보유자의 동의를 받아 발급자에게 직접 요청)을 다룹니다.
도입이 활발히 진행 중입니다: 십여 개의 미국 주가 Apple Wallet과 Google Wallet에서 운영 발급 또는 시범 mDL을 운영하고 있고, 캘리포니아의 mDL은 일반 제공 중이며, TSA는 대부분의 주요 미국 공항 보안 검색에서 mDL을 수용하고, EU는 eIDAS 2.0에 따라 자체 변형을 EUDI Wallet에 적용하고 있습니다(규정은 2024년 말 발효, 지갑은 2026~2027년 예정). 이 표준은 또한 ISO/IEC 23220(운전면허증을 넘어서는 것을 포괄하는 일반 모바일 자격 증명 프레임워크)의 기반이기도 합니다.
mDL QR은 DeviceEngagement CBOR 구조를 인코딩합니다. CBOR(Concise Binary Object Representation, RFC 8949)는 JSON에 대한 간결한 바이너리 대안입니다. 디코딩된 구조는 대략 다음과 같습니다:
{
0: "1.0", // version
1: [1, 2, [eDeviceKey bytes]], // security: cipher suite 1, EC P-256 key
2: [ // device retrieval methods
[1, 1, {...NFC options...}],
[2, 1, {...BLE options...}],
[3, 1, {...Wi-Fi Aware options...}]
],
3: {...optional server retrieval...}
}주요 필드, 디코딩됨:
현재 배포에서는 항상 “1.0”입니다. 향후 개정판에서 올라갈 수 있습니다.
현재는 항상 1: P-256 기반 ECDH 키 합의, AES-GCM 세션 암호화. 암호화 스위트 2는 brainpoolP320r1(EU 활용 사례)용으로 예약되어 있습니다.
지갑이 세션마다 생성하는 일회성 EC 공개 키입니다. 검증자가 암호화된 세션을 설정하는 데 사용합니다. 거래 후 폐기됩니다. 저희 스캐너는 이 필드의 길이를 보여주지만 키 바이트를 절대 그대로 출력하지 않습니다. 이는 일회성이며 진행 중인 검증자 세션에만 의미가 있습니다.
지갑은 실제 속성 전송에 사용할 의향이 있는 채널을 검증자에게 알립니다: NFC(태그), Bluetooth LE, 또는 Wi-Fi Aware(액세스 포인트 없는 P2P Wi-Fi). 대부분의 mDL은 BLE와 NFC를 제공하며, Wi-Fi Aware는 플랫폼 제약이 있습니다.
존재하는 경우, 지갑이 18013-7 모드를 지원함을 의미합니다. 검증자가 지갑에서 직접 받는 대신 발급자의 온라인 API에서 속성을 요청할 수 있습니다. QR에는 발급자의 URL이 포함됩니다. 저희 스캐너는 이를 추출하여 어떤 기관이 조회를 받게 되는지 보여줍니다.
이는 다른 범주의 자격 증명입니다. 미국 실물 면허증 뒷면의 AAMVA PDF417 바코드는 카드에 있는 모든 속성을 평문으로 담고 있습니다 — 이름, 주소, 생년월일, 면허 번호, 키, 몸무게, 눈 색깔, 제한 사항, 장기 기증자 표시. 어떤 스캐너든 그 모두를 읽을 수 있습니다. 카드는 “전부 아니면 전무” 자격 증명입니다: 건네서 모든 것을 공개하거나, 아예 하지 않거나입니다.
mDL은 이를 뒤집습니다. QR은 속성을 담지 않고 핸드셰이크만 담습니다. 검증자는 특정 속성(given_name, family_name, birth_date, age_over_21, portrait, document_number, driving_privileges 등)을 요청해야 하고, 지갑은 사용자에게 요청을 보여주며, 사용자가 승인한 속성만 전송됩니다. 전송은 또한 발급 기관(주 DMV)에 의해 암호학적으로 서명되므로, 검증자는 외부에 연결하지 않고도 속성이 진짜임을 확인할 수 있습니다 — 오프라인 검증이 작동합니다.
그래서 프라이버시를 중시하는 사람들은 표준이 더 복잡함에도 mDL을 선호합니다: 거래에 한정된 공개를 가능하게 하기 때문입니다. 경비원은 사용자의 주소가 필요 없고, TSA 직원은 장기 기증자 여부가 필요 없으며, 편의점 직원은 면허 번호가 필요 없습니다.
mDL 표준은 검증자가 원시 값을 받는 대신 예/아니오 질문을 할 수 있게 하는 파생 속성 집합을 정의합니다. 주요 항목은 다음과 같습니다:
age_over_18, age_over_21, age_over_65 — 생년월일을 공개하지 않고 연령 제한 구매를 위한 것.resident_state — 주소를 공개하지 않고 “주 거주자입니까?” 질문에 답하기 위한 것.driving_privileges — 보유한 면허 종류, 제한 사항; 렌터카용.잘 설계된 바용 검증자 앱은 age_over_21만 요청합니다. 지갑은 “Bar XYZ가 귀하가 21세 이상인지 알고 싶어합니다”라고 보여줍니다. 승인을 누르면 서명된 단일 불리언 값(“true”)이 돌아갑니다. 바의 앱은 해당 서명을 사용자가 속한 주의 공개된 mDL 신뢰 루트에 대해 검증합니다. 끝. 생년월일도, 이름도, 면허 번호도, 사진도 없습니다. 실물 카드를 건네는 것과 비교하면 이는 엄청난 프라이버시 향상입니다.
실물 카드의 위협 모델은 단순했습니다: 분실, 복제, 어깨너머 훔쳐보기. mDL의 위협 모델은 다릅니다. 형식은 강력하고 암호화는 견고합니다. 위험은 거래 반대편에 있는 검증자 앱으로 옮겨갑니다.
누구나 검증자 앱을 만들 수 있습니다. 중앙 라이선스 기관이 없습니다. 그래서 어떤 바는 age_over_21만 필요한데도 전체 생년월일, 전체 이름, 사진을 요구하도록 설정된 기성 검증자를 사용할 수 있습니다. 렌터카 직원은 “기록을 위해” 모든 것을 요구할 수 있습니다. 소매점 직원은 주소를 요구할 수 있습니다. 이 중 어느 것도 표준에서 기술적으로 금지되지 않습니다. 표준은 단지 지갑이 보유자에게 요청 내용을 보여주고 명시적 승인을 요구해야 한다고만 규정합니다.
그래서 방어는 보유자 측에 있습니다: 요청 메시지를 읽으세요. 검증자가 거래에 필요한 것보다 많이 요구한다면 거절하세요. 일부 지갑은 검증자가 알려진 신뢰 목록에 없을 때 경고합니다. ISO/IEC 18013-5는 인증서를 통한 검증자 인증을 지원하지만, 신뢰 목록 인프라는 아직 성숙해 가는 중입니다(미국은 주별 목록, EU는 eIDAS 2.0에 따른 신뢰 목록).
또한 알아둘 만한 점: 검증자는 사용자의 eDeviceKey, 암호화 스위트, 그리고 지원하는 전송 방식을 봅니다. 그게 전부입니다. QR만으로는 속성을 얻지 못합니다. 따라서 스티커나 누군가의 화면에서 QR을 스캔해 가져가도 공격자에게는 쓸모 있는 것이 없습니다. 속성은 핸드셰이크 이후 암호화된 세션 안에서만 전달됩니다.
mDL DeviceEngagement QR(이미지, 붙여넣기 또는 카메라)을 저희 스캐너에 넣어보세요. 판정 결과에 다음이 표시됩니다:
저희는 어떤 속성도 디코딩하지 않습니다. 설계상 QR에는 속성이 없습니다. 실제 면허 데이터는 선택된 전송 방식을 통해 실제 검증자에게 암호화되어 전달됩니다.
디코딩은 브라우저에서 이루어지며, 안전성 분류를 위해 구조적 메타데이터만 저희 서버에 전달됩니다.
age_over_21 대신 전체 생년월일을 요구한다면 거절하거나 이유를 물어보세요. 렌터카 직원이 장기 기증자 여부를 묻는다면 거절하세요.QR을 넣어보세요(이미지, 붙여넣기 또는 카메라). 판정 결과에 버전, 암호화 스위트, 전송 방식, 그리고 선택적 서버 검색 URL이 표시됩니다. 속성은 표시되지 않습니다. 속성은 핸드셰이크 이후 암호화된 세션 안에서 실제 검증자에게만 전달됩니다.