команда APDU является очередью двоичных чисел в следующем виде:
CLA | INS | P1 | P2 | Lc | CData | Ле
Первые четыре секции, т.е. КЛК, ИНС, Р1 и Р2 являются обязательными во всех команд APDU и каждый из них имеет длину один байт. Эти секции длиной в 1 байт соответствуют классам, инструкциям, параметрам1 и параметру2 соответственно.
Последние три секции, т.е. Lc, CDATA и Ле являются optional.Lc является кодирование Nc, который является кодирование длины поля CDATA. Le - это кодировка Ne, а затем кодирование максимальных данных ответа, которые могут быть отправлены. На основании наличия или отсутствия этих секций, мы имеем 4 случай для команды APDU, как показано ниже:
- case1:
CLA | INS | P1 | P2
- Вариант 2:
CLA | INS | P1 | P2 | Le
- Вопрос 3:
CLA | INS | P1 | P2 | Lc | Data
- Case4:
CLA | INS | P1 | P2 | Lc | Data | Le
Длина CData отличается для разных команд и разных апплетов. на основе длины CDATA (т.е. Lc), а длина максимального данных отклика, которые могут отправить (т.е. Le), мы должны ввести в APDU команды:
- Normal/Short APDU команды, когда LcиЛе меньше
0xFF
- увеличенная длина APDU команд, когда Lcи/илиLe больше, чем
0xFF
.
Таким образом, для длины этих участков мы имеем:
Lc: 1 байт для коротких APDU команд и 3 байта (они определяют эту длину, так как его достаточно) для расширенных команд APDU.
Данные: Различные длины.
Le: То же, что и Lc.
Как я могу понять команды APDU?
Ответ:
Когда вы пишете апплет, можно указать реакцию вашего апплета к различным APDU команды, которые он получит в будущем. Диспетчер карт также является апплетом. Команды, которые он поддерживает, определены в спецификациях/таблицах вашей карты. Обычно почти все карты имеют GlobalPlatform и ISO7816, поэтому они должны поддерживать эти обязательные команды APDU, определенные в этих документах. Например, поскольку 0xA4
определяется как Команда SELECT FILE в стандарте ISO7816-4. Если вы видите, что APDU, например xx A4 xx xx
, отправляет в Диспетчер карт, вы можете сделать вывод, что он связан с SELECT FILE
.
Обратите внимание, что вы можете выбрать одно значение для разных функций в разных апплетах. Например, в следующем, Applet1 будет возвращать 0x6990
в приеме 00 B0 xx xx
команд APDU, в то время как Applet2 вернется 0x6991
в приеме одной и той же команды:
Applet1:
public class SOQ extends Applet {
private SOQ() {
}
public static void install(byte bArray[], short bOffset, byte bLength)
throws ISOException {
new SOQ().register();
}
public void process(APDU arg0) throws ISOException {
byte buffer[] = arg0.getBuffer();
if(buffer[ISO7816.OFFSET_CLA]==0x00 && buffer[ISO7816.OFFSET_INS]==0xB0){
ISOException.throwIt((short)0x6990);
}
}
}
Выход:
OpenSC: opensc-tool.exe -s 00a404000b0102030405060708090000 -s 00B00000 -s 00B00
100
Using reader with a card: ACS CCID USB Reader 0
Sending: 00 A4 04 00 0B 01 02 03 04 05 06 07 08 09 00 00
Received (SW1=0x90, SW2=0x90)
Sending: 00 B0 00 00
Received (SW1=0x69, SW2=0x90)
Sending: 00 B0 01 00
Received (SW1=0x69, SW2=0x90)
Applet2:
public class SOQ extends Applet {
private SOQ() {
}
public static void install(byte bArray[], short bOffset, byte bLength)
throws ISOException {
new SOQ().register();
}
public void process(APDU arg0) throws ISOException {
byte buffer[] = arg0.getBuffer();
if(buffer[ISO7816.OFFSET_CLA]==0x00 && buffer[ISO7816.OFFSET_INS]==0xB0){
ISOException.throwIt((short)0x6991);
}
}
}
Выход:
OpenSC: opensc-tool.exe -s 00a404000b0102030405060708090000 -s 00B00000 -s 00B00
100
Using reader with a card: ACS CCID USB Reader 0
Sending: 00 A4 04 00 0B 01 02 03 04 05 06 07 08 09 00 00
Received (SW1=0x90, SW2=0x00)
Sending: 00 B0 00 00
Received (SW1=0x69, SW2=0x91)
Sending: 00 B0 01 00
Received (SW1=0x69, SW2=0x91)
Таким образом, окончательный и короткий ответ на ваш вопрос (Как я могу понять команды APDU?) является:
Вы имеете дело с апплета?
Вы сами определили поддерживаемые команды и их формы!
Вы имеете дело с другим апплетом (например, с Диспетчером карт)?
Вам необходим исходный код этого апплета или его документации о его поддерживаемых командах и их формах или стандарте/спецификации, которые соответствуют этому апплетам (например, Global Platform for Card Managers).
Примечание: у нас почти одинаковы ответы APDU.
В Интернете так много ссылок. Просто Google это, а затем читать, наконец, вы будете undrestand – BzH
Привет, что еще информация хотела бы получить? Если у вас есть какие-либо вопросы, пожалуйста, спросите меня в комментарии под моим ответом ... – vojta
Спецификации APDU приведены в ISO/IEC 7816-4. Вы можете получить копию последней версии. Тем не менее, это платная. –