chushpan
Professional
- Messages
- 696
- Reaction score
- 463
- Points
- 63
Что такое APDU?
APDU (Application Protocol Data Unit) — это формат данных, используемый для обмена информацией между смарт-картой и терминалом. APDU является основным механизмом взаимодействия в системах, работающих с картами, таких как банковские карты, SIM-карты, электронные паспорта и другие устройства на базе микрочипов.Как работает APDU?
APDU используется для передачи команд от терминала к карте и получения ответов от карты. Каждая команда и ответ имеют строгую структуру, определенную стандартами ISO/IEC 7816 (для смарт-карт).Основные типы APDU:
- Командный APDU (Command APDU):
- Отправляется терминалом на карту.
- Содержит инструкцию для выполнения операции (например, чтение данных, запись данных, аутентификация).
- Ответный APDU (Response APDU):
- Отправляется картой в ответ на команду.
- Содержит результат выполнения операции или запрошенные данные.
Структура Command APDU
Командный APDU состоит из нескольких полей:- CLA (Class Byte):
- Определяет класс команды (например, стандартная команда или специфическая для приложения).
- INS (Instruction Byte):
- Указывает конкретную операцию (например, SELECT, READ, WRITE).
- P1 и P2 (Parameter Bytes):
- Дополнительные параметры для команды.
- Lc (Length of Command Data):
- Указывает длину данных, отправляемых в команде (если есть).
- Data:
- Данные, которые передаются вместе с командой (например, данные для записи).
- Le (Length of Expected Response Data):
- Указывает, сколько данных ожидается в ответе (если применимо).
Пример структуры Command APDU:
Code:
CLA | INS | P1 | P2 | Lc | Data | Le
Структура Response APDU
Ответный APDU содержит результат выполнения команды:- Данные:
- Запрошенная информация или результат операции.
- SW1 и SW2 (Status Words):
- Два байта, указывающих статус выполнения команды.
- Например:
- 90 00 — успешное выполнение.
- 6A 82 — файл не найден.
Пример структуры Response APDU:
Code:
Data | SW1 | SW2
Пример использования APDU
Сценарий: Чтение данных с карты
- Терминал отправляет Command APDU:
Code:CLA = 0x00 INS = 0xB0 (READ BINARY) P1 = 0x00 P2 = 0x00 Le = 0x10 (ожидаем 16 байт данных)
- Карта обрабатывает команду:
- Читает 16 байт данных из указанного адреса.
- Карта отправляет Response APDU:
Code:Data = 0x1234567890ABCDEF1234567890ABCDEF SW1 = 0x90 SW2 = 0x00 (успешное выполнение)
Зачем нужен APDU?
- Стандартизация:
- APDU обеспечивает универсальный формат для взаимодействия между терминалами и картами, независимо от производителя.
- Безопасность:
- Команды APDU могут быть зашифрованы или подписаны для защиты данных.
- Гибкость:
- Поддерживает широкий спектр операций, от простого чтения данных до сложных криптографических вычислений.
Примеры команд 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 или примерах его использования, уточните их!
