Что такое и как работает APDU

chushpan

Professional
Messages
696
Reaction score
463
Points
63

Что такое APDU?​

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

Как работает APDU?​

APDU используется для передачи команд от терминала к карте и получения ответов от карты. Каждая команда и ответ имеют строгую структуру, определенную стандартами ISO/IEC 7816 (для смарт-карт).

Основные типы APDU:​

  1. Командный APDU (Command APDU):
    • Отправляется терминалом на карту.
    • Содержит инструкцию для выполнения операции (например, чтение данных, запись данных, аутентификация).
  2. Ответный APDU (Response APDU):
    • Отправляется картой в ответ на команду.
    • Содержит результат выполнения операции или запрошенные данные.

Структура Command APDU​

Командный APDU состоит из нескольких полей:
  1. CLA (Class Byte):
    • Определяет класс команды (например, стандартная команда или специфическая для приложения).
  2. INS (Instruction Byte):
    • Указывает конкретную операцию (например, SELECT, READ, WRITE).
  3. P1 и P2 (Parameter Bytes):
    • Дополнительные параметры для команды.
  4. Lc (Length of Command Data):
    • Указывает длину данных, отправляемых в команде (если есть).
  5. Data:
    • Данные, которые передаются вместе с командой (например, данные для записи).
  6. Le (Length of Expected Response Data):
    • Указывает, сколько данных ожидается в ответе (если применимо).

Пример структуры Command APDU:
Code:
CLA | INS | P1 | P2 | Lc | Data | Le

Структура Response APDU​

Ответный APDU содержит результат выполнения команды:
  1. Данные:
    • Запрошенная информация или результат операции.
  2. SW1 и SW2 (Status Words):
    • Два байта, указывающих статус выполнения команды.
    • Например:
      • 90 00 — успешное выполнение.
      • 6A 82 — файл не найден.

Пример структуры Response APDU:
Code:
Data | SW1 | SW2

Пример использования APDU​

Сценарий: Чтение данных с карты​

  1. Терминал отправляет Command APDU:
    Code:
    CLA = 0x00
    INS = 0xB0 (READ BINARY)
    P1 = 0x00
    P2 = 0x00
    Le = 0x10 (ожидаем 16 байт данных)
  2. Карта обрабатывает команду:
    • Читает 16 байт данных из указанного адреса.
  3. Карта отправляет Response APDU:
    Code:
    Data = 0x1234567890ABCDEF1234567890ABCDEF
    SW1 = 0x90
    SW2 = 0x00 (успешное выполнение)

Зачем нужен APDU?​

  1. Стандартизация:
    • APDU обеспечивает универсальный формат для взаимодействия между терминалами и картами, независимо от производителя.
  2. Безопасность:
    • Команды APDU могут быть зашифрованы или подписаны для защиты данных.
  3. Гибкость:
    • Поддерживает широкий спектр операций, от простого чтения данных до сложных криптографических вычислений.

Примеры команд APDU​

SELECT (выбор приложения)​

  • Используется для выбора апплета (приложения) на карте.
  • Пример:
    Code:
    CLA = 0x00
    INS = 0xA4 (SELECT)
    P1 = 0x04
    P2 = 0x00
    Lc = 0x07
    Data = AID (идентификатор приложения)

READ BINARY (чтение данных)​

  • Используется для чтения данных из файла на карте.
  • Пример:
    Code:
    CLA = 0x00
    INS = 0xB0 (READ BINARY)
    P1 = 0x00
    P2 = 0x00
    Le = 0x10 (читать 16 байт)

VERIFY (проверка PIN-кода)​

  • Используется для проверки PIN-кода владельца карты.
  • Пример:
    Code:
    CLA = 0x00
    INS = 0x20 (VERIFY)
    P1 = 0x00
    P2 = 0x00
    Lc = 0x04
    Data = 1234 (PIN-код)

Заключение​

APDU — это ключевой элемент протокола взаимодействия со смарт-картами. Он обеспечивает стандартизированный способ отправки команд и получения ответов, что делает его универсальным инструментом для работы с картами. Понимание структуры и принципов работы APDU важно для разработчиков, тестировщиков и специалистов по безопасности.

Если у вас есть дополнительные вопросы о работе APDU или примерах его использования, уточните их! 😊
 
  • Like
Reactions: Man

Что такое APDU?​

APDU (Application Protocol Data Unit) — это стандартный формат сообщений для обмена данными между смарт-картой (например, банковской EMV-картой, SIM-картой) и терминалом/ридером. Основан на стандарте ISO 7816-4.

1. Структура APDU​

APDU бывают двух типов:

1.1. Команда (от терминала к карте)​

Формат:
Code:
CLA | INS | P1 | P2 | Lc | Data | Le
  • CLA (Class) – класс команды (например, 0x80 для платежных систем).
  • INS (Instruction) – код операции (например, 0xA4 = "SELECT").
  • P1, P2 (Parameters) – дополнительные параметры.
  • Lc (Length of Data) – длина передаваемых данных.
  • Data – сами данные (если есть).
  • Le (Expected Length) – ожидаемая длина ответа.

Пример:
Code:
00 A4 04 00 0E 31 50 41 59 2E 53 59 53 2E 44 44 46 30 31 00
Расшифровка:
  • 00 A4 04 00 → Выбрать приложение (SELECT), параметры P1=04, P2=00.
  • 0E → Длина данных (14 байт).
  • 31 50 41 59... → AID приложения (1PAY.SYS.DDF01).
  • 00 → Ожидаемая длина ответа (0 = без ограничений).

1.2. Ответ (от карты к терминалу)​

Формат:
Code:
Data | SW1 | SW2
  • Data – полезные данные (если есть).
  • SW1 SW2 (Status Words) – статус выполнения команды.

Примеры статусов:
  • 90 00 → Успех.
  • 6A 82 → Приложение не найдено.
  • 69 85 → Условия использования не выполнены.

2. Типы APDU​

2.1. Case 1​

Нет данных ни в команде, ни в ответе.
Пример:
Code:
Команда: 00 A4 04 00 00 
Ответ: 90 00 (Успех)

2.2. Case 2​

Нет входных данных, но есть ответ.
Пример:
Code:
Команда: 80 CA 9F 7F 00 
Ответ: <данные> 90 00

2.3. Case 3​

Есть входные данные, но нет ответа.
Пример:
Code:
Команда: 80 D6 00 00 02 01 02 
Ответ: 90 00

2.4. Case 4​

Есть и входные данные, и ответ.
Пример:
Code:
Команда: 80 E0 00 00 04 01 02 03 04 04 
Ответ: A1 B2 C3 D4 90 00

3. Где применяется APDU?​

  1. EMV-карты(банковские платежи):
    • Выбор приложения (SELECT).
    • Генерация криптограммы (GENERATE AC).
  2. SIM-карты:
    • Управление контактами (UPDATE RECORD).
  3. Электронные паспорта:
    • Чтение биометрических данных (READ BINARY).

4. Как отправить APDU?​

4.1. Инструменты​

  • Считыватели: ACR122u, Omnikey.
  • Программы:
    • OpenSC (opensc-tool).
    • GlobalPlatform Pro (gpj).
    • Python-библиотеки (pyscard, pyapdutool).

4.2. Пример через OpenSC​

Bash:
opensc-tool -s "00 A4 04 00 0E 31 50 41 59 2E 53 59 53 2E 44 44 46 30 31 00"

Вывод:
Code:
90 00

5. Разбор реального примера (EMV)​

Команда: Запрос данных карты.
Code:
80 CA 9F 17 00
  • 80 – класс (private).
  • CA – команда "GET DATA".
  • 9F 17 – тег для PIN-попыток.
  • 00 – Le.

Ответ:
Code:
03 90 00
  • 03 – оставшиеся попытки ввода PIN.
  • 90 00 – успех.

6. Безопасность APDU​

  • Шифрование: Некоторые команды требуют MAC/подписи.
  • Фильтрация: Карта отклоняет невалидные APDU.
  • Логические атаки: Если разработчик ошибся в проверке APDU, возможны уязвимости (например, CVE-2015-4901 в Java Card).

Вывод​

APDU — это "язык" общения смарт-карт с внешним миром. Основное:
Команды состоят из CLA INS P1 P2 Lc Data Le.
Ответы содержат данные и статус (SW1 SW2).
✔ Используются в EMV, SIM, ePassports.

Для тестирования карт удобны OpenSC и PyAPDUTool. Хотите разобрать конкретную APDU-команду? Готов помочь!
 
Top