С развитием современных технологий чтение данных с электронных паспортов становится всё более доступным и интересным для специалистов, а также энтузиастов информационной безопасности. NFC (Near Field Communication) — контактная технология для беспроводного обмена данными на коротком расстоянии, которая используется в большинстве современных биометрических паспортов. В этой статье мы рассмотрим, как на платформе Linux можно получить доступ к содержимому NFC-чипа паспорта, какие сложности могут встретиться, а также какую информацию можно извлечь и как обеспечить безопасность процесса. NFC и электронные паспорта. Электронный паспорт (еPassport) содержит встроенный NFC-чип, в который записаны персональные данные владельца, включая биометрию — фотографию, отпечатки пальцев и другую информацию.
Чтобы обеспечить конфиденциальность и защиту данных, чтение с чипа защищено механизмами аутентификации, в число которых входит пароль, основанный на информации с Машиночитаемой зоны (MRZ) паспорта. MRZ представляет собой две или три строки с личными данными и контрольными суммами, которые можно прочитать визуально на странице паспорта. Для того чтобы начать работу с NFC-чипом, необходимо физическое присутствие — устройство должно быть расположено на очень близком расстоянии (обычно несколько сантиметров), что обеспечивает дополнительную защиту от удалённого считывания. При этом для авторизации требуется пароль, который в свою очередь можно получить, считав и воспроизведя MRZ. Особенности MRZ и генерация пароля.
Пароль для NFC-чипа создается из трёх данных: номера паспорта, даты рождения владельца и срока действия паспорта — каждый элемент с контролем через специальные контрольные суммы. При повреждении MRZ, например, если паспорт был отменён и повреждён (обрезан уголок с MRZ), данные можно восстановить, зная основные параметры паспорта. Сейчас существует Python-код, который позволяет генерировать MRZ, используя эти параметры и вычисляя все необходимые контрольные суммы по стандартам международной организации ICAO. Работа с Python и библиотекой pypassport. В последние годы одним из популярных инструментов для чтения паспортных данных на Linux стал проект pypassport.
Этот пакет на Python позволяет беспрепятственно подключиться к NFC-ридеру, считать данные с чипа и расшифровать их в удобочитаемый формат. Для установки достаточно скачать репозиторий и установить зависимость pyasn1 через pip. Далее скрипт подключается к считывателю, аутентифицируется с помощью подготовленного MRZ и выводит полные данные паспорта, включая биометрические шаблоны. Внутри паспорта информация организована в «группы данных» (Data Groups), которым присвоены цифровые идентификаторы. Например, DG1 содержит основной MRZ, DG2 — фотографию и биометрию, DG7 — ключи безопасности и так далее.
Программа pypassport позволяет просмотреть список доступных групп данных и, при наличии соответствующих прав, получить их содержимое. Безопасность и криптография. NFC-чипы паспортов используют стандартные методы криптографии с открытым ключом, подробно описанные в ICAO Document 9303. Для защиты данных применяется механизм Basic Access Control (BAC), в основе которого лежит пароль, полученный из MRZ. Чип не хранит таймеры и не блокируется после большого количества неправильных попыток, что в теории позволяет brute-force атаки.
Однако высокий объём пространства паролей (комбинации номера паспорта с датами) делает такой взлом практически невозможным за приемлемое время. Злоумышленники могут попытаться извлечь информацию, перебирая даты окончания срока действия, если номер паспорта и дата рождения известны. Но даже тогда процесс может занять дни и не гарантирует успех. При этом атака не позволяет получить секреты владельца, а лишь данные, которые обычно и так видны на самом паспорте при визуальной проверке. Информация, которую можно получить.
Используя данный метод, можно получить цифровую копию фотографии, имя владельца, пол, национальность и другую основную информацию. Кроме того, в биометрической части сохраняются дополнительные метаданные — координаты ключевых точек на лице, цвет и тип фото, параметры позы и ориентация. Форматы сохранения бывают JPEG и JPEG2000, причем изображения обычно сжаты и занимают минимальный объём по причине ограничений памяти. Практические аспекты и оборудование. Для работы необходимо иметь NFC-считыватель, который поддерживается Linux.
Не все устройства одинаково совместимы, поэтому рекомендуется использовать проверенные модели. Важно помнить, что при сканировании данных паспорт должен находиться в непосредственной близости, а MRZ должен быть известен или восстановлен. Некоторые известные инструменты и библиотеки, которые по разным причинам не подойдут: mrtdreader (проблемы с поддержкой устройств), pyPassport для Python 2 (устаревшая версия), специализированный коммерческий софт, который работает только с некоторым оборудованием. Среди альтернатив выделяется Android-приложение passport-reader от tananaev, но оно не совместимо с Linux. Этические и правовые вопросы также важны при использовании подобных технологий.
Чтение данных с документов без разрешения владельца и ведение деятельности, нарушающей конфиденциальность, противоречит законам в большинстве стран. Цель таких экспериментов — скорее исследовательская и образовательная, направленная на повышение осведомленности о рисках, безопасности и возможностях защиты данных. Выводы и перспективы развития. Чтение NFC чипов паспортов на Linux — вполне реализуемая задача, которая становится доступной благодаря открытым стандартам и развитию ПО с открытым исходным кодом. Несмотря на существующие ограничения и механизмы защиты, можно достаточно быстро получить всю основную информацию, однако именно сведения, требующие высокой степени защиты, остаются вне досягаемости.