Открыть сервис

APDU

APDU (Application Protocol Data Unit) — это формат данных, используемый для обмена информацией между смарт-картой (или другим устройством с защищённым элементом) и терминалом (считывателем). APDU является базовым протокольным блоком в стандартах ISO/IEC 7816-4 и ISO/IEC 7816-3, определяющих взаимодействие с контактными смарт-картами. Команды и ответы передаются в виде последовательностей байтов, строго регламентированных по структуре.

История и стандартизация

Разработка протокола APDU началась в рамках международной стандартизации смарт-карт. Первая версия стандарта ISO/IEC 7816-4 была опубликована в 1995 году. Она определила формат команд и ответов для смарт-карт, используемых в банковских, телекоммуникационных и идентификационных приложениях. Позднее стандарт многократно обновлялся, расширяясь на поддержку бесконтактных карт (ISO/IEC 14443) и универсальных интегрированных схемных карт (UICC) для мобильных сетей.

APDU стал основой для многих отраслевых протоколов, включая EMV (Europay, Mastercard, Visa) для платежных карт, GSM SIM-карт и российских национальных стандартов, таких как ГОСТ Р ИСО/МЭК 7816-4.

Структура APDU

APDU делится на два типа: командный APDU (C-APDU), отправляемый терминалом карте, и ответный APDU (R-APDU), возвращаемый картой. Каждый блок имеет строго определённую структуру.

Командный APDU (C-APDU)

Состоит из обязательного заголовка (4 байта) и необязательного тела (переменной длины). Заголовок включает:

  • CLA (Class byte) — класс команды, определяющий тип обработки (например, 0x00 для стандартных команд ISO, 0x80 для команд, специфичных для производителя).
  • INS (Instruction byte) — код инструкции (например, 0xA4 для выбора файла, 0xB0 для чтения двоичных данных).
  • P1, P2 (Parameter bytes) — параметры, уточняющие команду (например, номер файла или смещение).
  • Lc (Length of command data) — длина поля данных команды (от 0 до 255 байт). Если данных нет, Lc отсутствует.
  • Data field — собственно данные команды (например, идентификатор файла или данные для записи).
  • Le (Length of expected response) — максимальная длина ожидаемого ответа (от 0 до 256 байт). Если Le=0, карта вернёт максимально возможный объём данных.

Ответный APDU (R-APDU)

Состоит из двух частей:

  • Data field — данные, возвращаемые картой (необязательно, длина определяется Le).
  • Status word (SW1, SW2) — два байта, указывающие на результат выполнения команды. Например, SW1=0x90, SW2=0x00 означает успешное завершение; SW1=0x6A, SW2=0x82 — файл не найден.

Классификация APDU

По функциональному назначению APDU подразделяются на:

Команды управления файловой системой

  • SELECT (INS=0xA4) — выбор файла (DF, EF) по идентификатору или пути.
  • READ BINARY (INS=0xB0) — чтение данных из двоичного файла.
  • UPDATE BINARY (INS=0xD6) — запись данных в двоичный файл.
  • READ RECORD (INS=0xB2) — чтение записей из файла с линейной или циклической структурой.
  • UPDATE RECORD (INS=0xDC) — обновление записи.

Команды безопасности

  • VERIFY (INS=0x20) — проверка PIN-кода или пароля.
  • CHANGE REFERENCE DATA (INS=0x24) — изменение PIN-кода.
  • ENABLE/ DISABLE VERIFICATION REQUIREMENT (INS=0x28/0x26) — управление необходимостью аутентификации.
  • INTERNAL AUTHENTICATE (INS=0x88) — аутентификация карты внешним устройством.
  • EXTERNAL AUTHENTICATE (INS=0x82) — аутентификация внешнего устройства картой.
  • GET CHALLENGE (INS=0x84) — получение случайного числа от карты для криптографических протоколов.

Команды управления приложениями

  • MANAGE CHANNEL (INS=0x70) — открытие/закрытие логических каналов.
  • GET DATA (INS=0xCA) — чтение данных из карты (например, серийного номера).
  • PUT DATA (INS=0xDA) — запись данных в карту.
  • GET RESPONSE (INS=0xC0) — получение дополнительных данных, если ответ не поместился в один APDU.

Применение APDU

APDU является основным протоколом для взаимодействия с различными типами смарт-карт и защищённых элементов:

Банковские карты (EMV)

Платежные карты стандарта EMV (Europay, Mastercard, Visa) используют APDU для выполнения операций, таких как инициализация транзакции, чтение данных приложения, проверка PIN-кода и генерация криптограммы для авторизации. Команды APDU реализуются в терминалах самообслуживания (банкоматах) и POS-терминалах.

SIM-карты и UICC

В мобильных сетях (GSM, UMTS, LTE) APDU используется для управления SIM-картами и универсальными интегрированными схемными картами (UICC). Команды APDU позволяют выполнять аутентификацию абонента в сети, хранить контакты и SMS, а также загружать приложения (например, Java Card апплеты).

Идентификационные карты

В государственных и корпоративных системах APDU применяется для работы с электронными паспортами, удостоверениями личности, водительскими правами. Например, российские универсальные электронные карты (УЭК) и электронные паспорта используют APDU для чтения биометрических данных и цифровых подписей.

Смарт-карты для доступа и логистики

APDU используется в системах контроля доступа (например, карты Mifare DESFire, работающие по протоколу ISO/IEC 14443) и в логистических метках, где требуется защищённое хранение данных.

Технические ограничения и особенности

  • Размер данных: максимальная длина поля данных в одном APDU ограничена 255 байтами (для коротких APDU) или 65535 байтами (для расширенных APDU, поддерживаемых некоторыми картами). Для передачи больших объёмов данных используется механизм цепочек (chaining) или команда GET RESPONSE.
  • Скорость обмена: скорость передачи APDU зависит от протокола нижнего уровня (T=0 или T=1). Протокол T=0 (асинхронный, полудуплексный) более прост, но медленнее, T=1 (блочный, дуплексный) обеспечивает более высокую пропускную способность.
  • Безопасность: APDU не содержит встроенных механизмов шифрования; защита данных обеспечивается на уровне приложений смарт-карты (например, с помощью криптографических команд INTERNAL AUTHENTICATE и EXTERNAL AUTHENTICATE).

Примеры APDU

Чтение данных из файла

Команда: 00 B0 00 00 10

  • CLA=0x00 (стандартная ISO), INS=0xB0 (READ BINARY), P1=0x00, P2=0x00 (смещение 0), Le=0x10 (ожидается 16 байт).

Ответ: ... (16 байт данных) 90 00 (успех).

Проверка PIN-кода

Команда: 00 20 00 01 08 31 32 33 34 35 36 37 38

  • CLA=0x00, INS=0x20 (VERIFY), P1=0x00, P2=0x01 (номер PIN-кода 1), Lc=0x08 (8 байт данных), Data=«12345678» (в ASCII).

Ответ: 90 00 (успех) или 63 Cx (неверный PIN, где x — количество оставшихся попыток).

Критика и альтернативы

Основной недостаток APDU — низкая пропускная способность для передачи больших объёмов данных (например, фотографий или биометрических шаблонов). Для современных приложений (например, бесконтактных платежей с NFC) разработаны более эффективные протоколы, такие как ISO/IEC 7816-15 (криптографические токены) и GlobalPlatform (управление приложениями на карте). Однако APDU остаётся универсальным и широко распространённым стандартом для взаимодействия с защищёнными элементами.

Источники

  1. ISO/IEC 7816-4:2013 «Identification cards — Integrated circuit cards — Part 4: Organization, security and commands for interchange».
  2. EMV Integrated Circuit Card Specifications for Payment Systems (Book 1 — Application Independent ICC to Terminal Interface Requirements).
  3. GlobalPlatform Card Specification v2.3.1 (2018).
  4. Rankl, W., Effing, W. «Smart Card Handbook» (4th edition, 2010).
  5. ГОСТ Р ИСО/МЭК 7816-4-2016 «Карты идентификационные. Карты на интегральных схемах. Часть 4. Организация, защита и команды для обмена».

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →