Российский загранпаспорт нового образца, или биометричекий паспорт, выдается в России с
2006 года и является электронно-считываемым документом.
В этой заметке мы попробуем получить доступ к данным, записанным в паспорте,
из Java приложения на персональном компьютере.
Биометрический паспорт похож на обычный загранпаспорт, но есть заметные отличия: на обложке
появился новый символ, говорящий о том, что данный паспорт содержит электронный носитель с
биометрическими данными и соответствует стандарту на электронно-считываемые
документы, установленный Международной Организацией Гражданской Авиации - ИКАО (ICAO 9303-2)
Второе важное отличие:
главная страница паспорта сделана из пластика, внутри нее и находится электронный чип с радиоинтерфейсом.
В этот чип записаны данные, содержащиеся в паспорте: это данные с главной страницы (номер документа, имя и фамилия владельца, дата рождения,
дата окончания срока действия и т.д.), а также фотография в формате JPEG. Чип является смарт-картой, и доступ к данным осуществляется
посредством команд APDU, описанных стандартом ISO 7816-4.
Российский биометрический паспорт поддерживает механизм ограничения доступа Basic Access Control (BAC), ключом к которому является
комбинация из номера паспорта, даты окончания срока действия и даты рождения владельца.
Этот механизм гарантирует, что данные невозможно считать дистанционно без ведома владельца.
Для того, чтобы прочитать паспорт, необходимо ввести в систему данные, напечатанные, на его главной странице.
На практике это делается человеком, проверяющим паспорт, автоматически при помощи сканера или вручную.
В нашем коротком эксперименте мы внесем эти данные в исходный код программы.
По стандарту, этот механизм ограничения доступа не является обязательным, но у нас он есть :) В прессе много критиковали биометрические паспорта, за то, что их обладатель может легко стать жертвой злоумышленников, вооруженных специальной аппаратурой, позволяющих считывать информацию на расстоянии.
Так вот, эта критика беспочвенна -- наши паспорта надежно защищены.
После выполнения протокола BAC все данные передаются зашифрованными с использованием ключа, установленного в процессе выполнения
протокола (подробнее см. ICAO 9303-2).
Необходимое оборудование и библиотеки
Для считывания информации с паспорта нам понадобится устройство для чтения смарт-карт, поддерживающее стандарт ISO 14443.
Например подойдет Omnikey Cardman 5321, использованный в процессе написания данной статьи. В вашей операционной системе должен быть
установлен PC/SC драйвер для этого устройства.
В Java SE есть опциональный пакет Smart Card I/O API (javax.smartcardio) для работы со смарт-картами.
Этот пакет включен в JDK начиная с версии 1.6. Проверьте, что у вас установлена свежая версия JDK.
В нашем примере мы будем использовать библиотеку для чтения электронных документов JMRTD.
Эта библиотека реализует протокол обмена данными с паспортом (включая механизм Basic Access Control). Скачайте и установите библиотеку.
Для работы библиотеки JMRTD также потребуется крипто-провайдер, предоставляющий реализации специфических алгоритмов.
Информация по установке рекомендуемого крипто-провайдера есть в инструкциях по установке библиотеки JMRTD.
Код из этой статьи должен компилироваться и запускаться с использованием JDK 1.6 и с библиотекой JMRTD (и крипто-провайдером) в class-path.
Код
Откройте файл ReadPassport.java в текстовом редакторе, и введите значения переменных, соответсвующие данным из биометрического паспорта,
который вы собираетесь прочитать: номер паспорта, дата рождения и дата окончания срока действия.
Например:
String DOC_NUMBER = "701234567";
Date DATE_OF_BIRTH = new GregorianCalendar(1970, Calendar.JANUARY, 1).getTime();
Date DATE_OF_EXPIRE = new GregorianCalendar(2013, Calendar.DECEMBER, 10).getTime();
Эти значения нам понадобятся для выполнения авторизации (BAC), без которой считывание данных с паспорта невозможно.
Если эти значения неправильные или соответствуют другому паспорту, данные не считаются.
Скомпилируйте и запустите класс ReadPassport (библиотека JMRT и крипто-провайдер дожны быть в class-path, крипто-провайдер должен быть
зарегистрирован в JDK версии 1.6, устройство для считывания смарт-карт должно быть подключено, и драйвер установлен).
Теперь положите паспорт на считыватель, и если все выполнено правильно, то приблизительно через 5 секунд (столько длится обмен
данными с паспортом),в консоли будет напечатано следующее:
Passport inserted.
Basic authentication completed.
LDS version: 01.07
Unicode version: 04.00.00
Tags: [97, 117]
P<RUSPUPKIN<<VASILY<<<<<<<<<<<<<<<<<<<<<<<<<
7012345675RUS7001012M1312069<<<<<<<<<<<<<<06
Document number: 701825967
Personal number:
Primary identifier: PUPKIN
Date of birth: 1970-01-01
Date of expire: 2013-12-10
Document type: 3
Gender: MALE
Issuing state: RU
Nationality: RU
Secondary identifiers: [VASILY]
После сообщения о том, что паспорт обнаружен, и авторизация выполнена, мы видим следующие данные из файла COM:
– Используемая версия Logical Data Structure (LDS) — формата данных: 01.07
– Используемая версия Unicode: 04.00.00
– Тэги файлов, которые можно прочитать из данного паспорта: 97 и 117
Здесь интересной для нас информацией являеются тэги доступных файлов: 97 – данные с главной страницы паспорта (номер, имя, фамилия, и т.д.), и 117 – фотография владельца. Эти два файла являются обязательными в соответсвии со стандартом ICAO 9303-2. Никаких других опциональных данных (например, отпечатков пальцев или скана сетчатки глаза) в российском биометрическом паспорте не содержится.
(С вас ведь не снимали эти данные, когда вы получали паспорт?)
Затем идут данные из файла DF1, напечатанные в том же виде, что и на главной странице паспорта, внизу страницы в так называемой зоне
для автоматического распознавания Machine Readable Zone (MRZ). Сравните – все должно совпадать с паспортом с точностью до символа.
Затем идут те же данные в более читаемом виде. Обратите внимание – поле Personal number (личный номер) пустое.
Возможность введения личного идентификационного номера в связи с выдачей биометрических паспортов вызвала в России критику и неприятие общественности. Как мы смогли убедиться с помощью Java технологии, информации о личном номере в российском биометрическом паспорте отсутсвтвует.
Более подробную информацию о считывании данных с биометрического паспорта можно узнать на сайте JMRTD, а также в стандарте на
электронно-считываемые документы ICAO 9303-2, ссылка на который имеется на том же сайте.
Ссылки
Последняя версия JDK: http://java.sun.com/javase/6
Smart Card I/O API: http://java.sun.com/javase/6/docs/jre/api/security/smartcardio/spec
Проект JMRTD: http://jmrtd.org
Международная Организация Гражданской Авиации, информация о стандартах на электрнно-считываемые документах: http://www2.icao.int/en/MRTD
Как подделали биометрический загранпаспорт ; биометрический паспорт документы ; Какие биоданные могут появиться в паспортах будущего
|