У меня есть смарт-карта (Carte Vitale, используемая во Франции), и мне нужно знать, где хранится дата рождения. Но я не нашел никакой информации о файловой структуре.
Для бельгийской карты eID я сделал то же самое, и я могу легко прочитать дату рождения с помощью команд APDU. Но бельгийское правительство предоставило достойную информацию о файловой структуре карты.
Есть ли способ «просмотреть» файловую структуру смарт-карты с помощью APDU, чтобы увидеть, что на ней и по какому адресу, ничего об этом не зная?
EDIT: я нашел дополнительную информацию о чтении информации из Carte Vitale: здесь и здесь.
Кусок из первой ссылки, раздел "API или не API? Вот в чем вопрос...". Переведено Google... не идеально, но вы поняли:
* Общеизвестно, что BC C0 00 00 08 определяет последний адрес карты памяти, первой неизменно является команда 0200h. Обычно (ADMAX = 2188h), и мы находим от 2128h до 2180h «производственную область», содержащую указатели на все интересующие области (в нашем случае чтение без пробелов будет простираться от 0288h до 2180h). При этом команда BC 02 88 04 B0 вернет содержимое первого 32-битного слова, а BC B0 21 80 04 — последнего. Между ними столько всего интересного! Непосредственно перед производственной зоной несколько слов напоминают о «сопоставлении компонентов», упомянутом на странице 20 спецификации нагрузок V1.40. Представьте, и команда BC B0 20 18 F8 возвращает следующие данные:
3F FF 88 C3
3F 20 C3 50
20 80 02 F0
00 3F C2 B8
2D 3F C2 A0
2C FF 98 C2
Среди "указателей" (?) на C388h C298h обращает на себя внимание 02F0h. Итак, давайте BC B0 02 14 F0, и доставим нас к простой расшифровке первых двух слов:
3F FF F5 40 0011 1111 1111 1111 1111 0101 0100 0000
24 08 43 FF 0010 0100 0000 1000 0100 0011 1111 1111
3F FF FF FF
3F FF FF FF
3F FF FF F8
Игнорируя первые два бита каждого слова, а затем формируя группы из четырех бит, можно легко извлечь числа BCD 54 09 02 и, в частности, дату рождения единственного бенефициара 09.02.1954!*
Мой ADMAX отличается: это 21 20. Означает ли это, что я могу написать программу, которая выполняет BC B0 02 00 08 для чтения первых 8 байтов, затем добавляет 8 байтов к адресу 02 00, затем читает это снова и так далее? , вплоть до ADMAX 21 20? Смогу ли я тогда прочитать все читаемые даты на карте? Или я вижу вещи слишком простыми?
Спасибо еще раз!