APDU: условия использования не выполнены (69 85) при вычислении подписи

Со смарт-картой Gemalto (IAS ECC) я бы рассчитал подпись, используя закрытый ключ, хранящийся на смарт-карте. Для этого я использую команды APDU:

// Verify PIN
00 20 00 01 04 31 32 33 34
-> 90 00

// Create a context for security operation
00 22 41 B6 06 84 01 84 80 01 12
-> 90 00

// Set the hash of the document
00 2A 90 A0 14 HASH OF DOCUMENT
-> 69 85

// Calculating the signature
00 2A 9E 9A 80
-> 69 85

Моя проблема заключается в следующем: последние две команды возвращают код ошибки «69 85», что означает «Условия использования не выполнены».

Я уже пробовал несколько решений, но всегда получаю одну и ту же ошибку. Как это решить? Что может означать этот код?

После некоторых тестов я обнаружил кое-что интересное. Когда я заменяю cla "00" на "10", смарт-карта возвращает другой ответ:

// Create a context for security operation
00 22 41 B6 06 84 01 84 80 01 12

// Verify PIN
00 20 00 01 04 31 32 33 34

// Calculating the signature (I replace "00" by "10")
10 2A 9E 9A 23 30 21 30 09 06 05 2B 0E 03 02 1A 05 00 04 14 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 12 13 14 15

Я не знаю, хорошее ли это решение, потому что смарт-карта возвращает «90 00». Но это вернет содержимое моей подписи!

Спасибо за помощь!

С наилучшими пожеланиями


person JohnDoe66    schedule 09.09.2014    source источник
comment
Тестирование случайных вещей в байтах CLA ни к чему не приведет. Вероятно, вы только что указали цепочку команд, и карта сигнализирует, что хочет получить остальные данные (после чего вы получите ту же ошибку, скорее всего).   -  person Maarten Bodewes    schedule 12.09.2014
comment
вы нашли решение для этого?   -  person HalaKuwatly    schedule 16.03.2015


Ответы (1)


Вы получаете SW 6985 за

// Set the hash of the document
00 2A 90 A0 14 HASH OF DOCUMENT
-> 69 85

Поскольку вы не установили правильный контекст в текущей среде безопасности.

Позвольте мне объяснить это ниже

Сначала вы выполнили команду VERIFY PIN, которая была успешной

// Verify PIN
00 20 00 01 04 31 32 33 34
-> 90 00

Затем вы выполнили команду MSE SET, где вы установили контекст безопасности. Для этого вы должны понять, как работает SE (см. раздел 3.5 для IAS ECC v1.01).

Во время персонализации агент персонализатора создает SDO (объект защищенных данных) внутри карты. Ссылка на этот SDO упоминается в SE (среда безопасности) в форме CRT (шаблон контрольной ссылки).

// Create a context for security operation
00 22 41 B6 06 84 01 84 80 01 12
-> 90 00

Вообще говоря, команда MSE SET всегда будет возвращать SW 900, даже если ссылка SDO неверна. Поскольку он возвращает SW 6A80 только тогда, когда шаблон неверен, а не когда ссылка неверна (ссылка SDO передается в теге 84).

После этого вы выполнили команду PSO HASH

// Set the hash of the document
00 2A 90 A0 14 HASH OF DOCUMENT
-> 69 85

где карта возвращает SW 6985 (условие использования не выполнено), это указывает на то, что алгоритм и ссылка SDO, используемые для вычисления хэша, могут быть неправильными. Что, вероятно, происходит, поскольку ссылка SDO, отправленная во время команды MSE SET, недоступна.

Обнаружение ошибки, исходящей от MSE SET, может быть сложным, поскольку он возвращает SW 9000. В таких ситуациях вам необходимо тщательно проверить файл персонализации и сопоставить команду MSE SET с учетом ссылки SDO и поддерживаемых ALGO.

Может быть полезно поместить контекст по умолчанию (например, криптографические алгоритмы или операции безопасности) в текущую SE, чтобы иметь несколько обменов командами установки MSE.

person Ujjwal Roy    schedule 10.05.2018