У меня есть карта Javacard, которая содержит SSD (домен дополнительной безопасности), и я хочу ее удалить. Обычно, когда я хочу удалить апплет или пакет со своей карты, я отправляю следующую команду DELETE APDU после успешного процесса взаимной аутентификации (шифрование MAC-адреса или поля данных не выполняется). требуется, а Security Level == 0
достаточно для команды DELETE APDU):
--> 80 E4 00 00 LC 4F <AID Len> <AID>
<-- 90 00
Приведенная выше команда отлично работает для обычных апплетов. Но когда я вставляю в него AID своего SSD, карта отвечает словами состояния 69 85, что означает Условия использования не удовлетворены..
Поскольку в моей карте включена функция Делегированное управление, а в ISD загружены ключ Public Token и ключ Receipt, я подумал, что, возможно, упомянутое ошибка возникает из-за того, что не используется Удалить токен в команде УДАЛИТЬ APDU. Поэтому я рассчитал токен удаления, как показано ниже:
Спецификация Global Platform Card 2.2.0.7: Рисунок C-8: Удаление расчета токена
DeleteToken = RSA_Sign("00 00 LC 4F <SSD AID Len> <SSD AID>", TokenPrivateKey)
Затем я попытался удалить SSD с помощью следующей команды:
--> 80 E4 00 00 <LC+Len(DeleteToken)> 4F <SSD AID Len> <SSD AID> 9E <Len(DeleteToken> <DeleteToken>
<-- 69 85
Но я снова получил 6985 статусных слов. Кто-нибудь знает, где проблема и как я могу ее решить?
Обновление:
Я даже попробовал команду DELETE APDU с P2 = 0x80
, чтобы удалить SSD со всеми связанными объектами. Но и это не удалось:
--> 80 E4 00 80 09 4F <SSD AID Len> <SSD AID>
<-- 6A 86 (= Incorrect P1 or P2 parameter)
Обновление 2:
Я даже пытался отправить команду DELETE APDU по защищенному каналу (SecLevel = 03). Но опять же, я получил 6985 статусных слов. Какой хэш-алгоритм мне нужно использовать для создания маркера удаления? Насколько я знаю, Спецификация GP не определяет алгоритм хеширования.
Обновление 3:
Упомянутый SSD создается из пакета ISD карты с привилегией 0E
, что означает:
Домен безопасности + Делегированное управление + Проверка DAP
Обновление 4:
Кажется, я нашел проблему!
Цитата из 2.1.1_Mapping_guidelines_v1.0.1 -Final.pdf:
6.1. УДАЛИТЬ
6.1.2. Рекомендация
Поле данных, отправленное в командном сообщении
(бла-бла)
В реализации, поддерживающей дополнительные домены безопасности, если предпринимается попытка удалить экземпляр дополнительного домена безопасности, а дополнительный домен безопасности имеет привилегию проверки DAP (бит 7 набора байтов привилегий), Домен безопасности не удаляется, и возвращается ответ «6985».
Вопрос 1. Есть идеи, почему это реализовано/рекомендуется именно так? Какова цель сделать этот тип SSD (SSD с привилегией DAP Verification) несъемным?
Обновление 5:
Я попытался изменить привилегии своего SSD, чтобы удалить с него привилегию DAP Verification с помощью УСТАНОВИТЬ ОБНОВЛЕНИЕ РЕГИСТРА, а затем удалить SSD. Но это не удалось с 6A 80
словами состояния (что означает, что параметры в поле данных неверны).
--> 00 A4 04 00 08 A0 00 00 00 03 00 00 00
<-- 6F 10 84 08 A0 00 00 00 03 00 00 00 A5 04 9F 65 01 FF 90 00
--> 80 50 00 00 08 DF 4B 4B B7 15 35 5A 93
<-- 00 00 41 89 00 24 94 97 41 21 01 02 00 77 5C 2B 50 27 5A F4 8A 18 C0 8B 2D C2 20 50 90 00
--> 84 82 00 00 10 30 AD 04 C4 60 A2 80 8B 5A 61 7E 49 3A 39 B6 C6
<-- 90 00
--> 80 E6 40 00 16 08 A0 00 00 00 03 00 00 00 00 07 <SSD AID> 01 80 00 00
<-- 6A 80
Вопрос 2. Что не так с командой УСТАНОВИТЬ для обновления реестра?