Как рассчитать цифровую подпись на смарт-карте? - PullRequest
1 голос
/ 13 июля 2020

Итак, я новичок в смарт-картах и ​​пытаюсь вычислить подпись по некоторым случайным байтам. Операционная система на карте - cardos v4.3. Я могу использовать формат PKCS # 15 и стандарт ISO 7816.

Мой рабочий процесс для вычисления подписи выглядит следующим образом:

  1. выберите приложение SigG APDU = 00 A4 01 0 C 02 1F FF 00. status = 90 00

  2. проверьте сигн. Пин в текущем APDU DF = 00 20 00 81 08 31 32 33 34 35 36 37 38 00 status = 90 00

  3. пытается подписать 40 случайных байтов с помощью PSO_CDS APDU = 00 2A 9E 9A 08 01 02 03 04 05 06 07 08 .... 28 (шестнадцатеричное) 00 status = 6A88

Смарт-карта находится в состоянии свежего сброса.

Я отсутствует команда, необходимое условие или что-то еще? Каков общий рабочий процесс при подписании ha sh, который был вычислен, например, с помощью openssl?

Я знаю, что для PSO_CDS должна быть текущая среда безопасности, в которой должен быть указан действительный PSO_PrivateKey, но я не Я понимаю, как включить это в поток команд.

Я планирую создать c ++ - функцию, которая получит ha sh, вычислит подпись с помощью смарт-карты, а затем вернет подпись.

Ответы [ 2 ]

1 голос
/ 14 июля 2020

Проблема в том, что карта не знает, какой ключ использовать. Это происходит из-за правильно наблюдаемого отсутствия значимой текущей среды безопасности. Поскольку Perform Security Environment (сокращенно: PSO) не имеет стандартизированных средств для указания используемого ключа, это необходимо настроить раньше, предоставив среду безопасности этой информацией, например, через Manage Security Environment (см. Ниже).

Самый простой способ предоставить ссылку на ключ - создать постоянную Среду безопасности с идентификатором 1 в том же DF, что и ваш ключ, поскольку он загружается (или восстанавливается) автоматически во время SELECT (FILE) DF, в противном случае вам необходимо отправить Manage Security Environment (сокращенно MSE) в режиме восстановления вручную или в режиме SET (изменчиво для этого сеанса). (Какую бы Среду безопасности вы ни использовали, она должна содержать ссылку на закрытый ключ в шаблоне цифровой подписи.) Выполняете ли вы ВОССТАНОВЛЕНИЕ MSE непосредственно после выбора DF, перед проверкой PIN-кода или в любой момент между ними - это ваш выбор, но он должен быть активен при отправке команды PSO.

40 байтов, похоже, не соответствует длине типичного значения ha sh, поэтому позаботьтесь о том, чтобы правильно настроить алгоритм, чтобы включить хеширование.

0 голосов
/ 21 июля 2020

Итак, я смог вычислить подпись. Поскольку PSO_CDS на самом деле у меня не работает, я сделал это так:

  1. Выберите приложение SigG / DF.

  2. Сделал управление набор среды безопасности (набор mse), где я указал компонент CON (который является закрытым ключом PSO в приложении) вне текущей среды безопасности.

  3. проверил контакт с объектом Pin в приложении SigG.

  4. Вычислил подпись с помощью PSO_DE C. При использовании PSO_DE C вам необходимо предоставить расширенный apdu, потому что поле команды должно содержать заполненное 256-байтовое хеш-значение, а с обычными apdu на моей карте возможно только поле команды размером до 255 байтов.

...