Online Store

uFCoder kütüphanesi Makine Tarafından Okunabilir Seyahat Belgeleri (MRTD) desteği

Giriş #

ICAO spesifikasyonlarına uygun e-Pasaportlar da dahil olmak üzere Makine Tarafından Okunabilir Seyahat Belgelerine (MRTD'ler) gömülü NFC etiketinden veri gruplarını okuma desteği, uFCoder kütüphanesinde uygulanmıştır.

Uygulama, NFC yonga erişimi için Temel Erişim Denetimi (BAC) mekanizmasını destekler. BAC, MRTD'ye gömülü bir NFC etiketi ile kimlik doğrulaması ve güvenli bir şifreleme iletişim kanalı sağlar. BAC, 3DES algoritmasını kullanarak tamamen simetrik kriptografiye dayanmaktadır ve ICAO 9303, bölüm 11'e göre uygulanmaktadır.

ICAO, Uluslararası Sivil Havacılık Örgütü'nün (https://www.icao.int) kısaltmasıdır. ICAO 9303 spesifikasyonu, e-Pasaportlar da dahil olmak üzere MRTD'leri standartlaştırır. ICAO Doc 9303 serisinin tamamını https://www.icao.int/publications/pages/publication.aspx?docnum=9303web sitesinde bulabilirsiniz.

MRTD'lerin Temel Erişim Denetimi, uFCoder kitaplığında 5.0.12 sürümünden itibaren desteklenir.

Önce MRTD'ye gömülü NFC etiketinin kimliğini doğrulamak için, diğer gerekli güvenlik anahtarlarının türetileceği "proto anahtarı" almak için belge numarasını, belge sahibinin doğum tarihini ve belge son kullanma tarihini MRTD_MRZDataToMRZProtoKey() işlev görecek şekilde geçirmeniz gerekir. "Proto anahtar" (belge numarası, belge sahibinin doğum tarihi ve belge son kullanma tarihi) almak için gereken tüm veriler Makine Tarafından Okunabilir Bölge'de (MRZ) kodlanır, böylece kütüphane MRTD_MRZSubjacentToMRZProtoKey() yerine çağrılabilen MRTD_MRZDataToMRZProtoKey() işlevine sahiptir. Bu işlev, MRZ belgesinin bir subjacent satırını içeren null sonlandırılmış bir dizeyi kabul eder.Aşağıdaki ekran görüntüsü, MRTD_MRZSubjacentToMRZProtoKey() işlevini yerine getirmek için parametre olarak geçirmeniz gereken içeriği işaretli bir subjacent satırına sahip MRZ örneğini göstermektedir.

epassport MRZ

MRTD destek kütüphanesi işlevleri #

MRTD_MRZDataToMRZProtoKey #

İşlev açıklaması

Sonraki adımlarda ihtiyaç duyulan MRZ Proto Anahtarını almak için, bu işlevi çağırabilir ve belge numarasını, belge sahibinin doğum tarihini ve belge son kullanma tarihini içeren null sonlandırılmış dizeleri iletebilirsiniz. İşlev başarıyla yürütüldükten sonra, MRZ Proto Key mrz_proto_key 25 baytlık bir dizide depolanır.

A işlev bildirimi (C dili)

UFR_STATUS MRTD_MRZDataToMRZProtoKey(const char *doc_number,

const char *date_of_birth,

const char *date_of_expiry,

uint8_t mrz_proto_key[25]);

Parametre

doc_number Tam olarak 9 karakterlik belge numarası içeren null sonlandırılmış bir dizenin işaretçisi.
date_of_birth "YYMMDD" biçiminde doğum tarihini temsil eden tam olarak 6 karakter içeren null sonlandırılmış bir dizenin işaretçisi.
date_of_expiry "YYMMDD" biçiminde son kullanma tarihini temsil eden tam olarak 6 karakter içeren null sonlandırılmış bir dizenin işaretçisi.
mrz_proto_key Bu bayt dizisi, başarılı bir işlev yürütülmesinden sonra hesaplanan MRZ proto-anahtarını içerecektir. Bu dizi, bu işlevi çağırmadan önce en az 25 bayt ayırmış olmalıdır.

 

MRTD_MRZSubjacentToMRZProtoKey #

İşlev açıklaması

Sonraki adımlarda ihtiyaç duyulan MRZ Proto Anahtarını almak için, TD3 MRZ formatı (toplam 88 karakter uzunluğunda) söz konusu olduğunda, bu işlevi çağırabilir ve MRZ subjacent satırını içeren null sonlandırılmış bir dize geçirebilirsiniz. eMRTD belgesinde yazdırılan TD3 MRZ biçiminin bir örneği şöyle görünür:

P<UTOERIKSSON<<ANNA<MARIA<<<<<<<<<<<<<<<<<<<

L898902C36UTO7408122F1204159ZE184226B<<<<<10

Bu işlev, MRZ subjacent satırını içeren null-terminated dizeye bir işaretçi almalıdır, yani "L898902C36UTO7408122F1204159ZE184226B<<<<<10".

İşlev bildirimi (C dili)

UFR_STATUS MRTD_MRZSubjacentToMRZProtoKey(const char *mrz, uint8_t mrz_proto_key[25]);

Parametre  
mrz MRZ verilerini içeren null sonlandırılmış bir dizeye işaretçi. ICAO Doc 9303-10'a göre, burada üç MRZ veri biçimine sahiptir: TD1, TD2 veya TD3 biçimleri. TD1 tam olarak 90 karakter, TD2 tam 72 karakter ve TD3 tam olarak 88 karakter içerir.
mrz_proto_key Bu bayt dizisi, başarılı bir işlev yürütülmesinden sonra hesaplanan MRZ proto-anahtarını içerecektir. Bu dizi, bu işlevi çağırmadan önce en az 25 bayt ayırmış olmalıdır.

MRTDAppSelectAndAuthenticateBac #

İşlev açıklaması

BAC kullanarak eMRTD NFC etiketinde kimlik doğrulaması yapmak için bu işlevi kullanın. Bu işlev, iletişim için güvenli bir kanal oluşturur. Güvenlik kanalı, send_sequence_cnt parametresi kullanılarak korunur. Kanal oturum anahtarları ksenc (şifreleme için) ve ksmac'tir (MAC hesaplamak için).

İşlev bildirimi (C dili)

UFR_STATUS MRTDAppSelectAndAuthenticateBac(const uint8_t mrz_proto_key[25], uint8_t ksenc[16],

uint8_t ksmac[16],

uint64_t *send_sequence_cnt);

Parametre

mrz_proto_key MRZ proto-anahtarı, MRTD_MRZDataToMRZProtoKey() veya MRTD_MRZSubjacentToMRZProtoKey() fonksiyonuna yapılan önceki çağrı kullanılarak elde edilmiştir
ksenc Bu dizi, bu işlevi çağırmadan önce en az 16 bayt ayırmış olmalıdır.Bu dizi, başarılı bir işlev yürütüldükten sonra oturum şifreleme anahtarı içerir
ksmac Bu dizi, calli this işlevinden önce en az 16 bayt ayırmış olmalıdır.Bu dizi, başarılı bir işlev yürütüldükten sonra MAC'i hesaplamak için bir oturum anahtarı içerecektir.
send_sequence_cnt Bu işlevin başarıyla yürütülmesinden sonra, bu 64 bit değerin işaretçisi kaydedilmeli ve sonraki her çağrıda MRTDFileReadBacToHeap() ve/veya eMRTD'yi okumak için diğer işlevlere iletilmelidir.

MRTDFileReadBacToHeap #

İşlev açıklaması

eMRTD NFC etiketinden dosyaları okumak için bu işlevi kullanın. Bu işlevi yalnızca daha önce çağrılan tarafından başarıyla bir güvenlik kanalı kurulduktan sonra çağırabilirsiniz.

MRTDAppSelectAndAuthenticateBac() işlevi. Oturum anahtarları ksenc ve ksmac ve ayrıca parametre send_sequence_cnt daha önce çağrılan tarafından edinilir

MRTDAppSelectAndAuthenticateBac() işlevi. Bu işleve yapılan başarılı çağrıdan sonra *output, file_index parametresi tarafından belirtilen bir eMRTD dosyasından okunan dosya verilerine işaret eder. Verilerin depolandığı arabellek, işlev yürütme sırasında bellek yığınına otomatik olarak ayrılır. Ayrılan maksimum veri miktarı 32 KB olabilir. Programcının, kullanımdan sonra tahsis edilen verileri temizleme sorumluluğu vardır (yani, free(), standart C fonksiyonunu çağırarak).

İşlev bildirimi (C dili)

UFR_STATUS MRTDFileReadBacToHeap(const uint8_t *file_index,

uint8_t **çıktı,

uint32_t *output_length,

const uint8_t ksenc[16],

const uint8_t ksmac[16],

Parametre

file_index

eMRTD'den okumak istediğimiz dosyayı belirten parametre. Bu, eMRTD dosyasını belirten tam olarak iki bayt içeren bir bayt dizisinin işaretçisidir.Bu iki bayt dosya tanımlamadır (FID) ve FID'lerin bir listesi vardır:

EF.COM = {0x01, 0x1E}
EF. DG1 = {0x01, 0x01}
EF. DG2 = {0x01, 0x02}
EF. DG3 = {0x01, 0x03}
EF. DG4 = {0x01, 0x04}
EF. DG5 = {0x01, 0x05}
EF. DG6 = {0x01, 0x06}
EF. DG7 = {0x01, 0x07}
EF. DG8 = {0x01, 0x08}
EF. DG9 = {0x01, 0x09}
EF. DG10 = {0x01, 0x0A}
EF. DG11 = {0x01, 0x0B}
EF. DG12 = {0x01, 0x0C}
EF. DG13 = {0x01, 0x0D}
EF. DG14 = {0x01, 0x0E}
EF. DG15 = {0x01, 0x0F}
EF. DG16 = {0x01, 0x10}
EF. SOD = {0x01, 0x1D}

*çıktı Bu işleve yapılan başarılı çağrıdan sonra, bu işaretçi file_index parametresi tarafından belirtilen bir eMRTD dosyasından okunan dosya verilerine işaret eder. Verilerin depolandığı arabellek, işlev yürütme sırasında otomatik olarak ayrılır. Ayrılan maksimum veri miktarı 32 KB olabilir. Programcının, kullanımdan sonra tahsis edilen verileri temizleme sorumluluğu vardır (yani, free(), standart C fonksiyonunu çağırarak).
output_length Bu işleve yapılan başarılı çağrıdan sonra, bu işaretçi file_index parametresi tarafından belirtilen bir eMRTD dosyasından okunan dosya verilerinin boyutuna işaret eder.
ksenc MRTDAppSelectAndAuthenticateBac() işlevine yapılan önceki bir çağrı kullanılarak alınan oturum şifreleme anahtarı.
ksmac MRTDAppSelectAndAuthenticateBac() işlevine yapılan önceki bir çağrı kullanılarak alınan MAC hesaplama oturum anahtarı.
send_sequence_cnt Bu işaretçi, önceki tarafından
başlatılan 64 bitlik bir değere işaret etmelidir
MRTDAppSelectAndAuthenticateBac() işlevine başarılı çağrı. Bu 64 bit değerin işaretçisi, bu işleve ve/veya eMRTD'yi okumak için kullanılan diğer işlevlere yapılan sonraki her çağrıda kaydedilmeli ve iletilmelidir.

uint64_t *send_sequence_cnt);

 

ePassport MRTD Örneği #

Bu örneği şuradan indirebilirsiniz:

https://www.d-logic.com/code/nfc-rfid-reader-sdk/ufr-examples-ePassport_mrtd.git

veya aşağıdakileri kullanarak tüm tutulma CDT projesini klonlayın:

git clone –özyinelemeli https://www.d-logic.com/code/nfc-rfid-reader-sdk/ufr-examples-ePassport_mrtd.git

komut.

Yalnızca hızlı çalıştırma istiyorsanız, projeyi indirin ve ikili yürütülebilir dosyayı uygun klasörden başlatın:

  • 32-bit Windows için win32_releaserun_me.cmd dosyasını başlatın
  • 64 bit Windows için win64_releaserun_me.cmd dosyasını başlatın
  • 32-bit Linux başlangıcı için linux32_release/ePassport_mrtd
  • 64-bit Linux başlangıç için linux64_release/ePassport_mrtd.

Yazılım örneği, uFR okuyucu cihazının PC'ye takılmasını ve yapılandırılmasını gerektirir. Bilgisayarda uFR okuyucu kullanan başka bir uygulama veya hizmet çalışmamalıdır. "ePassport MRTD Örneği" nin başarılı bir şekilde başlatılmasından sonra, yazılım aşağıda gösterildiği gibi ana çoğuna başlar.

ePassport okuyucu MRTD NFC

<">Şimdi, ekrandaki uygulama kullanım talimatlarında belirtildiği gibi 'M' veya 'P' seçeneklerinden birini seçmelisiniz.

'M' seçeneğini belirlerseniz, size kısa mesaj gönderilir:

'P<XXXSURNAME<<FIRSTNAME<<<<<<<<<<<<<<<<<<<<<' altında bulunan subjacent MRZ satırını girmeyi seçtiniz:

Subjacent MRZ satırını girin. Subjacent MRZ satırı 44 karakter uzunluğunda olmalıdır.

bu yüzden subjacent MRZ satırını girin. Subjacent MRZ satırının bir örneği ilk görüntüde görülebilir.

Aksi takdirde, 'P' seçeneğini belirlerseniz, metin girmeniz istenir:

Belge numarasını, doğum tarihini ve son kullanma tarihini ayrı ayrı girmeyi seçtiniz:

Belge numarasını girin. Belge numarası 9 karakter uzunluğunda olmalıdır.

_________ …

Doğum tarihini girin. Tarih biçimi YYMMDD olmalıdır.

______ …

Son kullanma tarihini girin. Tarih biçimi YYMMDD olmalıdır.

______ …

bu yüzden verileri uygun biçimde girin.

Geçerli verileri girdikten sonra, uygulama sizi bir mesajla bilgilendirecektir:

MRZ proto-key başarıyla ayarlandı.

——————————————————————-

Bu mesajdan sonra, daha önce girdiğiniz verilerin ait olduğu ePassport'a katıştırılmış NFC etiketindeki okuma işlemlerine devam edebilirsiniz.

Artık pasaportu uFR okuyucu alanına koyabilirsiniz. Başarılı bir iletişim kurulduğunda, okuyucu alanında NFC etiketi hakkında temel bilgiler alacaksınız. Örneğin:

——————————————————————-

Etiket türü: DL_GENERIC_ISO14443_4, sak = 0x??, uid[4] = ??:??????

——————————————————————-

Bu örnekteki SAK ve UID maskelidir ve herhangi bir rasgele değere sahip olabilirler. e-Pasaportlar her zaman DL_GENERIC_ISO14443_4 etiket türü gibi tanınacaktır.

Artık uygulama okuma seçeneklerini seçebilirsiniz:

'C' – Bu seçenek, e-Pasaporttaki ortak verileri (temel dosya EF.COM) okur. Başarılı bir okumadan sonra, veriler ayrıştırılır ve aşağıdaki biçimde görüntülenir:

EF.COM başarıyla okundu. Dosya uzunluğu ?? Bayt

Ham veri: 60 xx xx xx xx xx xx xx xx xx xx xx xx xx xx

EF.COM ham verileri ayrıştırma:

LDS sürümü 01.07'dir

UNICODE sürümü 04.00.00

Mevcut veri grupları listesi:

Bulundu: EF. cesaret 1

Bulundu: EF. cesaret 2

Bulundu: EF. cesaret 3

Bulundu: EF. cesaret 14

——————————————————————-

Bu örnekteki ham veriler maskelenir ve herhangi bir rasgele değere sahip olabilirler. Yalnızca ham veri etiketi mevcuttur ve her zaman aynı olacaktır (0x60). Kendi belgenizi okuduğunuzda, gerçek ham verilerini burada alacaksınız. LDS sürümü ve UNICODE sürümü hakkında daha fazla bilgiyi ICAO 9303, bölüm 10 belgesinde okuyabilirsiniz.

LDS ve UNICODE sürümlerini, ePassport'un içerdiği veri grupları listesi izler. Sadece DG1 ve DG2 zorunludur. Diğer tüm veri grupları belirli MRTD'de mevcut olabilir veya olmayabilir.

'S' – Bu seçenek belge güvenlik nesnesini (EF. SO elementary file) ve sorduğunuzda hangi yolu ve adı girmeniz gerektiğini ikili dosyaya kaydeder. Belge güvenlik nesnesi standart PKCS#7CMSbiçiminde bir dijital imza içerir. EF'nin varlığı. MRTD'de SO zorunludur.

D

'1'– Bu seçenek EF'yi okur. DG1, ayrıştırın ve ham ve ayrıştırılmış verileri aşağıdaki biçimde görüntüler:

EF. DG1 başarıyla okundu. Dosya uzunluğu ?? Bayt

Ham veriler:

61 xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx

  1. xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx  

EF'yi kolayca ayrıştırır. DG1 ham verileri:

Belge kodu: P (ePassport)

Veren Devlet veya kuruluş: ???

Sahibinin adı: SOYADI FIRST_NAME

Belge numarası: ?????????

Milliyet:???

Doğum tarihi (gg.MM.yyyy.): ??.??.????.

Seks:????

Son kullanma tarihi (gg.MM.yy.): ??.??.????.

İsteğe bağlı veriler: ??????????????

——————————————————————-

Bu örnekteki ham veriler maskelenir ve herhangi bir rasgele değere sahip olabilirler. Yalnızca ham veri etiketi mevcuttur ve her zaman aynı olacaktır (0x61). Kendi belgenizi okuduğunuzda, gerçek ham verilerini burada alacaksınız.

'2' – bu seçenek EF'yi okur. DG2 ve sorduğunuzda hangi yolu ve adı girmeniz gerektiğini ikili dosyaya kaydedin. EF. DG2 bir belge sahibi yüz görüntüsü içerir ve zorunludur. EF. DG2, yüz görüntüsünün yanında biyometrik yüz özellikleri de içerebilir. EF hakkında daha fazla bilgi. ICAO 9303, bölüm 10 belgesinde okuyabileceğiniz DG2 içeriği.

'Ben' – bu seçenek EF'yi okur. DG2 için. Bu durumda, MRTD dosyasından yalnızca yüz görüntüsü çıkarılır ve girdiğiniz yol ve adı dosyaya kaydedilir. Görüntü formatı otomatik olarak algılanır ve dosya uzantısı buna göre ayarlanır. Bu bağlam için tanımlanmış iki olası görüntü dosyası formatı vardır: JPEG veya JP2 (yani.jpeg 2000).

'D' – bu seçenek temel veri gruplarından herhangi birini okur (EF. DG) MRTD'den dosya alır ve sorduğunuzda hangi yolu ve adı girmeniz gerektiğini ikili dosyaya kaydeder. Bu seçenek belirlendikten sonra EF girmeniz istenir. DG endeksi. Dizin 1 ile 16 arasında olabilir (ör. EF için 1. EF için DG1 ve 14. DG14). Okumak istediğiniz temel dosya, EF.COM veri grupları listesinde listelenmelidir.

Bazı isteğe bağlı temel dosyaların, özellikle biyometrik veriler içerenlerin okunması, bu belgenin kapsamı dışında kalan özel güvenlik mekanizmaları gerektirir.

"ePassport MRTD Örneği"nin geçerli sürümü 1.0'dır ve uFCoder kitaplığı sürüm 5.0.12 ve uFR donanım yazılımı sürümü 5.0.22'ye bağlıdır.