Команды аутентификации
Команды данной группы включают команды криптографической внешней и внутренней аутентификации, команды предъявления пароля и управления данными, связанными с аутентификацией.
Во всех командах данной группы приняты следующие соглашения о кодировании параметров (если явно не оговорено иное):
- P1=0
- Если P2=0, то параметры берутся из текущего SE, иначе P2 – ссылка на ключ.
Ссылка на ключ содержит идентификатор санкции для аутентификации, ассоциированный с ключом и принимает значение в диапазон 1..127. Старшие идентификаторы санкций зарезервированы для использования кодом ОС и расширений, а 0 не должен использоваться, т.к. P2=0 имеет специальный смысл. В целях повышения совместимости с ISO 7816-4 рекомендуется использовать идентификаторы санкций лишь в диапазоне 1..31.
Поиск ключа осуществляется в текущем DF и выше (до MF).
типы файлов:
DF (MF) | BF | FRF | VRF | CRF | TF | KF | ARF |
- | - | - | - | - | - | + | - |
Примечание для ОС "Магистра 1.30": не выполняется аутентификация с применением ключей RSA1536, RSA2048 (При необходимости, такая функциональность может быть дополнительно реализована по запросу заказчика.)
9.8.1 GET CHALLENGE
Команда генерирует и возвращает случайное число указанного размера. Число запоминается в текущем SE и может быть использовано в последующих командах.
тип команды | out (case 2) |
формат команды:
CLA | 00 |
INS | 84 |
P1 | 00 |
P2 | 00 |
Lc | - |
данные | - |
Le | размер запрошенного числа 1..32 |
ответ | случайное число |
9.8.2 INTERNAL AUTHENTICATE
Внутренняя аутентификация – доказательство внешнему миру наличия на карте определенного секрета.
Для блочных симметричных алгоритмов размер СЧ должен быть равен размеру блока, для асимметричных алгоритмов размер СЧ должен быть от 8 до 32 байт.
тип команды | in/out (case 4) |
формат команды:
CLA | 00 |
INS | 88 |
P1 | 00 |
P2 | ссылка на ключ |
Lc | размер входных данных (обычно 8) |
данные | challenge – случайное число |
Le | размер выходных данных (обычно 6) |
ответ | криптограмма |
Размер входных и выходных данных определяется свойствами ключа и текущего SE.
По умолчанию, размер challenge – 8 байт, размер ответной криптограммы – 6 байт.
9.8.3 EXTERNAL AUTHENTICATE
Внешняя аутентификация – проверка картой, что внешняя сторона владеет определенным секретом. Команда EXTERNAL AUTHENTICATE должна следовать за командой GET CHALLENGE, причем размер запрошенного случайного числа должен соответствовать алгоритму ключа и/или текущим настройкам SE.
Для блочных симметричных алгоритмов размер СЧ должен быть равен размеру блока, для асимметричных алгоритмов размер СЧ должен быть от 8 до 32 байт.
тип команды | in/out (case 4) |
формат команды:
CLA | 00 |
INS | 82 |
P1 | 00 |
P2 | ссылка на ключ |
Lc | размер входных данных (6) |
данные | криптограмма |
Le | - |
ответ | - |
9.8.4 MUTUAL AUTHENTICATE
Взаимная аутентификация карты и терминала с выработкой сессионного ключа. Команда введена для совместимости с ICAO.
INS команды (82) совпадает с EXTERNAL AUTHENTICATE, а выбор протокола аутентификации (EXTERNAL или MUTUAL) осуществляется на основе настроек текущего SE. Если P2=0 и в SE присутствуют шаблоны CT и CCT с классом операций CALC и VERIFY для обоих шаблонов (см. описание команды MSE), в обоих из которых установлен режим генерации сессионного ключа «ICAO» (тэг 8A), то команда трактуется как MUTUAL AUTHENTICATE.
При этом для корректной работы алгоритма аутентификации в режиме совместимости с ICAO необходимо выполнение также следующих условий:
- шаблоны CT и CCT ссылаются на различные симметричные ключи с одинаковым алгоритмом;
- ранее была выполнена команда GET CHALLENGE для генерации случайного числа длиной 8 байт;
- собственное случайное число терминала не должно совпадать со случайным числом карты;
- в SE присутствует шаблон HT с классом операций CALC, который ссылается на хэширующий алгоритм, длина хэша которого не меньше длины ключей, на которые ссылаются шаблоны CT и CCT.
тип команды | in/out (case 4) |
формат команды:
CLA | 00 |
INS | 82 |
P1 | 00 |
P2 | 00 |
Lc | размер данных запроса |
данные | криптограмма для аутентификации ответной части |
Le | размер данных ответа |
ответ | криптограмма для аутентификации карты |
Формат входных и выходных данных соответствует спецификации ICAO. Длины элементов определяются используемым алгоритмом ключей, на которые ссылаются шаблоны CT и CCT, и определяются согласно следующим зависимостям (в скобках указаны значения длин для 3DES):
Элемент | Длина |
Случайное число со стороны терминала Случайное число со стороны карты |
8 байт (8 байт) |
Ключевой материал со стороны терминала Ключевой материал со стороны карты |
Размер ключа, на которые ссылаются шаблоны CT и CCT (16 байт) |
Имитовставка (MAC) со стороны терминала Имитовставка (MAC) со стороны карты |
Стандартизованный размер имитовставки/MAC (8 байт) |
Входные данные содержат блок зашифрованных данных и имитовставку/MAC от этих данных (зашифрованных), вычисленную на ключе, на который ссылается шаблон CCT. Блок зашифрованных данных содержит конкатенацию случайного числа терминала, случайного числа карты и ключевого материала терминала, которые зашифрованы на ключе, на который ссылается шаблон CT.
Выходные данные содержат блок зашифрованных данных и имитовставку/MAC от этих данных (зашифрованных), вычисленную на ключе, на который ссылается шаблон CCT. Блок зашифрованных данных содержит конкатенацию случайного числа карты, случайного числа терминала и ключевого материала карты, которые зашифрованы на ключе, на который ссылается шаблон CT.
9.8.5 GENERAL AUTHENTICATE
Обобщенная команда взаимной аутентификации объединяет функциональность ряда протоколов взаимной аутентификации в едином синтаксисе.
Последовательность команд GENERAL AUTHENTICATE, реализующая единый протокол взаимной аутентификации, объединяется в цепочку (command chaining).
Входные и выходные данные передаются внутри шаблона 7C – данные для динамической аутентификации (только в случае, если данные наличествуют; если данных нет, объемлющий шаблон не используется). Объекты данных внутри этого шаблона имеют контекстно-зависимые тэги, перечисленные в следующей таблице:
Тэг | Значение |
Witness – синхропосылка (RFU - не используется) | |
Challenge – случайное число | |
Response – криптограмма | |
Committed challenge – хэш раннее использованных СЧ (RFU - не используется) | |
Authentication code – хэш данных операции (RFU - не используется) | |
Exponential – компонент в алгоритме DH (RFU - не используется) | |
Session Key (RFU - не используется) | |
ЭП компоненты ключа (RFU - не используется) |
Если атрибуты ключа, используемого в данной операции, требуют генерации сессионного ключа, то автоматически генерируется и применяется сессионный ключ.
тип команды | in/out (case 4) |
формат команды:
CLA | 00 |
INS | 87 |
P1 | 00 |
P2 | 00 |
Lc | размер входных данных |
данные | входные данные |
Le | размер выходных данных |
ответ | выходные данные |
INS=86 не поддерживается.
Выбор режима команды определяется входными данными (тэгом и длиной) и предыдущими командами в цепочке.
Предусмотрены следующие стандартные протоколы использования команды:
9.8.5.1 Взаимная аутентификация по симметричной схеме
Данный вариант взаимной аутентификации симметричен, в том смысле, что ответной частью при обмене может быть аналогичная карта (модуль безопасности).
В ходе взаимной аутентификации вырабатывается сессионный ключ (если у ключа есть соответствующие свойства).
Недостатком данного варианта является то, что собственная криптограмма выдается до проверки криптограммы ответной части, что является непременным требованием при реализации симметричной схемы.
В настройках SE указывается в каком качестве: модуля безопасности или клиентской карты – выступает карта в настоящий момент.
блок данных | назначение блока данных | тэг и длина данных |
Request 1 | запрос СЧ | |
Response 1 | получить СЧ | |
Request 2 | передать СЧ ответной части | |
Response 2 | получить криптограмму | |
Request 3 | передать криптограмму ответной части | |
Response 3 | - | - |
9.8.5.2 Взаимная аутентификация по несимметричной схеме.
Данный вариант взаимной аутентификации не симметричен, в том смысле, что ответной частью при обмене не может быть аналогичная карта (как и в MUTUAL AUTHENTICATE).
В ходе взаимной аутентификации вырабатывается сессионный ключ (если у ключа есть соответствующие свойства).
Преимуществом данного варианта является то, что собственная криптограмма выдается только в случае успешной проверки криптограммы ответной части.
блок данных | назначение блока данных | тэг и длина данных |
Request 1 | передать СЧ ответной части | |
Response 1 | получить СЧ карты | |
Request 2 | передать криптограмму ответной части | |
Response 2 | получить криптограмму карты |
9.8.6 VERIFY
Команда проверки пароля.
тип команды | in (case 3) |
формат команды:
CLA | 00 |
INS | 20 |
P1 | 00 |
P2 | ссылка на ключ |
Lc | размер входных данных |
данные | пароль или ничего (для получения значения счетчика попыток) |
Le | - |
ответ | - |
характерные статусы ошибок:
63 CX | оставшееся число попыток при неверном предъявлении |
69 83 | пароль блокирован |
Если входные данные отсутствуют, то карта сразу возвращает 9000, если пароль уже был предъявлен, или оставшееся число попыток предъявления.
INS=21 не поддерживается.
9.8.7 CHANGE REFERENCE DATA
Загрузить ключ или пароль.
Если файл был пуст, то требуется право доступа Put, если происходит смена ключа, то требуется право доступа Change.
Примечание: В ОС "Магистра 1.2" секретный ключ RSA загрузить невозможно.
Загрузка секретного ключа RSA выполняется в режиме chaining: сначала выполняется загрузка открытого ключа (e, n) с CLA=10, затем загрузка секретного ключа (d) с CLA=00.
Примечание, для ОС "Магистра 1.30": Аналогично может быть выполнена загрузка ключа ГОСТ 34.10-2001
В случае, если при создании KF, в который загружается ключ, был указан признак необходимости проверки контрольной суммы загружаемого ключа (тэг A5:8F), то к загружаемому ключу в конце необходимо добавить 4 байта значения CRC32. В случае загрузки ключевой пары контрольная сумма высчитывается по конкатенации {открытый ключ, секретный ключ} и добавляется только к секретному ключу. Данная команда позволяет загрузить любые ключи, кроме RSA2048.
тип команды | in (case 3) |
формат команды:
CLA | 00 |
INS | 24 |
P1 | 01 |
P2 | P2=0 – применить команду к текущему файлу P2>0 - ссылка на ключ |
Lc | размер входных данных |
данные | ключ |
Le | - |
ответ | - |
CHANGE RSA REFERENCE DATA (ОС "Магистра 1.30")
Данная команда позволяет загрузить любые ключи RSA, в т.ч. RSA2048.
Если файл был пуст, то требуется право доступа Put, если происходит смена ключа, то требуется право доступа Change.
Загрузка ключа RSA выполняется в режиме chaining. Ключ может быть разбит на части произвольной длины, которые при загрузке конкатенируются.
Сначала загружаются части открытого ключа, затем секретного.
В случае, если при создании KF, в который загружается ключ было указан признак необходимости проверки контрольной суммы загружаемого ключа (тэг A5::8F), то при загрузке последней части ключа в конце необходимо добавить 4 байта значения CRC32. Контрольная сумма вычисляется по получившемуся после конкатенации блоку данных.
тип команды | in (case 3) |
формат команды:
CLA | 90 — загрузка части ключа RSA 80 – загрузка последней части ключа |
INS | 24 |
P1 | 01 |
P2 | P2=0 – применить команду к текущему файлу P2>0 - ссылка на ключ |
Lc | длина загружаемой части ключа + 4 байта — CRC32, если согласно FCP KF требуется ее проверка и СLA=80 |
данные | часть ключа (+CRC32, если необходимо и СLA=80) |
Le | - |
ответ | - |
9.8.8 RESET RETRY COUNTER
Восстановление счетчика оставшихся попыток до его максимального значения и разблокирование ключа (пароля).
тип команды | case 1 |
формат команды:
CLA | 00 |
INS | 2C |
P1 | 03 |
P2 | ссылка на ключ |
Lc | - |
данные | - |
Le | - |
ответ | - |
Режимы P1=00,01,02 (связанные с передачей кода разблокирования и сменой пароля) не поддерживаются.