XFS-сервис класса PIN. Модели SZZT ZT59x H12-H15, H20, H21, H50

Поддерживаемые версии CEN/XFS: 3.03, 3.10.

Поддерживаемые модели:

Модель

PCI PTS

Версия прошивки

ZT59x H12

2.0

H12

ZT59x H13

2.0

H13

ZT59x H14

2.0

H14

ZT59x H15

2.0

H15

ZT596 H21

3.0

H21

ZT598 H20

3.0

H20

ZT598 H50

5.0

H50

Файлы

  • AlgBase.dll;

  • EnlargeKey.dat;

  • ftd2xx.dll;

  • libeay32.dll;

  • PinpadC.dll;

  • PortBase.dll;

  • shqPS.EPP.ZT59x.exe;

  • shqSPEPP.dll;

  • SystemBase.dll;

  • szzt_layouts.xml;

  • ZTPinpad.dll.

Настройки XFS-провайдера

Параметры драйвера

Раздел реестра: [HKLM\Software\XFS\PHYSICAL_SERVICES\EPP-ZT599]

Параметры драйвера:

  • PORT – номер порта (COM1, COM2, и т.п.), к которому подключено устройство.

  • KEY_STROKE_BEEPER_H13 – разрешить/запретить звуковое сопровождение при нажатии на клавишу клавиатуры модели H1x, H2x, H5x. Возможные значения: YES (разрешено), NO (запрещено).

  • CustomerDataInterpretation – интерпретация поля CustomerData (информация о клиенте) в процессе сборки PIN-блоков ANSI/ISO-0/ISO-3.

    Возможные значения:

    • IAI – поле CustomerData содержит строго IAI-часть PAN-а карты (ISO-7813);

    • WHOLE_PAN – передается весь PAN, считанный с карты, включая контрольный разряд (соответствует требованиям спецификации CEN/XFS версии 3.03);

    • PAN_WITHOUT_CD – передается PAN без контрольного разряда (соответствует требованиям спецификации CEN/XFS версий 3.10).

    Внимание

    Параметр CustomerDataInterpretation не влияет на режим ввода ключа.

  • SECUREKEYENTRY_LAYOUT_WITH_SHIFT – включает|отключает клавишу Shift, используемую для переключения раскладки клавиатуры. Возможные значения: YES, NO.

  • FDK_REMAPPING – в случае если УС оборудовано FDK-кнопками, подключенными через спец.электронику, данный параметр позволяет задать коды FDK-кнопок. По умолчанию принимается следующая раскладка:

    L1: FDK8 R1: FDK1
    L2: FDK7 R2: FDK2
    L3: FDK6 R3: FDK3
    L4: FDK5 R4: FDK4
    

    Значение параметра кодируется в соответствии с правилом: [L|R][1-4]:FDK[1-8](;[L|R][1-4]:FDK[1-8]){7}. Пример: L1:FDK1;L2:FDK2;L3:FDK3;L4:FDK4;R1:FDK5;R2:FDK6;R3:FDK7;R4:FDK8.

  • LAST_HANDLED_FW – модель подключенной PIN-клавиатуры ZT59x. Возможные значения – код модели PIN-клавиатуры, например, H50, H12, F17. При подключении PIN-клавиатуры значение LAST_HANDLED_FW заполняется автоматически. При необходимости его можно указать вручную перед загрузкой ПроАТМ/XFS. При подключении PIN-клавиатуры ПроАТМ/XFS сравнивает ее модель и значение LAST_HANDLED_FW, если они не совпадают, то значение LAST_HANDLED_FW автоматически обновляется.

  • SecureKeyEntry_BackspaceFDK – перечень номеров FDK-кнопок, реализующих логику кнопки BACKSPACE в режиме ввода ключа.

  • SecureKeyEntry_ClearFDK – перечень номеров FDK-кнопок, реализующих логику кнопки CLEAR в режиме ввода ключа.

  • SecureKeyEntry_CancelFDK – перечень номеров FDK-кнопок, реализующих логику кнопки CANCEL в режиме ввода ключа.

  • SecureKeyEntry_EnterFDK – перечень номеров FDK-кнопок, реализующих логику кнопки ENTER в режиме ввода ключа.

Для всех SecureKeyEntry через запятую указываются номера FDK-кнопок, которые реализуют логику очистки, отмены или завершения в режиме ввода ключа.

Внимание

Несмотря на то, что физически все DES/3DES ключи содержатся непосредственно в PIN-клавиатуре, информация об их привязке к XFS-именам, атрибутах использования и пр. заносится в системный реестр Windows (раздел [HKLM\SOFTWARE\XFS\PHYSICAL_SERVICES\EPP-ZT599]). ПроATM/XFS гарантирует сохранность ранее загруженных DES/3DES ключей при переустановке ПО только, если указанный ключ реестра не подвергается частичному или полному уничтожению.

Настройка раскладки

Гравировка клавиатуры напрямую соотносится с аппаратным кодом модели, который доступен через интерфейс обмена (например, ZT598-M1J-H15). Благодаря этому, существует возможность предопределить раскладки по всем известным модификациям клавиатуры и обеспечить их автоматический выбор при запуске ПО.

Настройки раскладок хранятся в файле szzt_layouts.xml, который располагается в каталоге установки XFS. Файл содержит возможные варианты раскладок клавиатуры, в зависимости от модели. Пример файла:

<?xml version="1.0" encoding="UTF-8"?>
<layouts>
	<layout default="1">
		<buttons>1,2,3,CANCEL,4,5,6,CLEAR,7,8,9,HELP,RES1,0,DECPOINT,ENTER</buttons>
		<buttons_ske_no_shift>1,2,3,A,4,5,6,B,7,8,9,C,E,0,F,D</buttons_ske_no_shift>
		<buttons_ske_with_shift_1>1,2,3,CANCEL,4,5,6,CLEAR,7,8,9,HELP,NONE,0,SHIFT,ENTER</buttons_ske_with_shift_1>
		<buttons_ske_with_shift_2>A,B,C,CANCEL,D,E,F,CLEAR,NONE,NONE,NONE,HELP,NONE,NONE,SHIFT,ENTER</buttons_ske_with_shift_2>
		<hw_codes>F20,E20,NF0</hw_codes>
	</layout>
	<layout>
		<buttons>1,2,3,CANCEL,4,5,6,CLEAR,7,8,9,ENTER,DECPOINT,0,00,HELP</buttons>
		<buttons_ske_no_shift>1,2,3,A,4,5,6,B,7,8,9,C,E,0,F,D</buttons_ske_no_shift>
		<buttons_ske_with_shift_1>1,2,3,CANCEL,4,5,6,CLEAR,7,8,9,ENTER,SHIFT,0,NONE,HELP</buttons_ske_with_shift_1>
		<buttons_ske_with_shift_2>A,B,C,CANCEL,D,E,F,CLEAR,NONE,NONE,NONE,ENTER,SHIFT,NONE,NONE,HELP</buttons_ske_with_shift_2>
		<hw_codes>NFG,M52,L23,L5J</hw_codes>
	</layout>
	<layout>
		<buttons>1,2,3,CANCEL,4,5,6,CLEAR,7,8,9,HELP,DECPOINT,0,00,ENTER</buttons>
		<buttons_ske_no_shift>1,2,3,A,4,5,6,B,7,8,9,C,E,0,F,D</buttons_ske_no_shift>
		<buttons_ske_with_shift_1>1,2,3,CANCEL,4,5,6,CLEAR,7,8,9,HELP,SHIFT,0,NONE,ENTER</buttons_ske_with_shift_1>
		<buttons_ske_with_shift_2>A,B,C,CANCEL,D,E,F,CLEAR,NONE,NONE,NONE,HELP,SHIFT,NONE,NONE,ENTER</buttons_ske_with_shift_2>
		<hw_codes>M5C</hw_codes>
	</layout>
	<layout>
		<buttons>1,2,3,CANCEL,4,5,6,CLEAR,7,8,9,ENTER,DECPOINT,0,000,HELP</buttons>
		<buttons_ske_no_shift>1,2,3,A,4,5,6,B,7,8,9,C,E,0,F,D</buttons_ske_no_shift>
		<buttons_ske_with_shift_1>1,2,3,CANCEL,4,5,6,CLEAR,7,8,9,ENTER,SHIFT,0,NONE,HELP</buttons_ske_with_shift_1>
		<buttons_ske_with_shift_2>A,B,C,CANCEL,D,E,F,CLEAR,NONE,NONE,NONE,ENTER,SHIFT,NONE,NONE,HELP</buttons_ske_with_shift_2>
		<hw_codes>M3J</hw_codes>
	</layout>
	<layout>
		<buttons>1,2,3,CANCEL,4,5,6,CLEAR,7,8,9,HELP,DECPOINT,0,000,ENTER</buttons>
		<buttons_ske_no_shift>1,2,3,A,4,5,6,B,7,8,9,C,E,0,F,D</buttons_ske_no_shift>
		<buttons_ske_with_shift_1>1,2,3,CANCEL,4,5,6,CLEAR,7,8,9,HELP,SHIFT,0,NONE,ENTER</buttons_ske_with_shift_1>
		<buttons_ske_with_shift_2>A,B,C,CANCEL,D,E,F,CLEAR,NONE,NONE,NONE,HELP,SHIFT,NONE,NONE,ENTER</buttons_ske_with_shift_2>
		<hw_codes>M1J</hw_codes>
	</layout>
</layouts>
  • Атрибут default параметра layout – необязательный параметр, в случае отсутствия аналогичен варианту default = 0. Значение единица означает, что в случае отсутствия нужной модели в файле, будет использована данная раскладка (если несколько layout имеют атрибут default равным единице, то используется первый по порядку).

  • buttons – раскладка клавиатуры. Значения клавиш пишутся слева направо сверху вниз, через запятую. Возможные значения: 0-9, 00, 000, DECPOINT, ENTER, CLEAR, HELP, CANCEL, RES1, RES2, BACKSPACE, NONE.

  • buttons_ske_no_shift – раскладка клавиатуры в режиме ввода ключа, при отключенной опции шифта. Возможные значения: 0-9, A-F.

  • buttons_ske_with_shift_1 – раскладка клавиатуры в режиме ввода ключа, при включенной опции шифта, если шифт не нажат. Возможные значения: 0-9, ENTER, CLEAR, HELP, CANCEL, NONE, SHIFT.

  • buttons_ske_with_shift_2 – раскладка клавиатуры в режиме ввода ключа, при включенной опции шифта, если шифт нажат. Возможные значения: A-F, ENTER, CLEAR, HELP, CANCEL, NONE, SHIFT.

  • hw_codes – модели, для которых будет использована данная раскладка. Если одна и та же модель встречается в файле несколько раз, будет использовано первое включение. Модель обозначается трехсимвольным сокращением, отвечающим за раскладку клавиатуры (ZT598-M3J-H12-SYS > M3J), модели перечислены через запятую.

В случае если необходимую раскладку получить из файла не удалось (ввиду отсутствия/некорректности файла, или отсутствия в нем нужной и дефолтной модели), используется базовая раскладка по умолчанию.

Если в описании кнопок встречаются неизвестные обозначения, то они распознаются как кнопка NONE. Если общее число кнопок не равно 16, то используется раскладка по умолчанию.

Значения раскладок по умолчанию:

		<buttons>1,2,3,CANCEL,4,5,6,CLEAR,7,8,9,HELP,RES1,0,DECPOINT,ENTER</buttons>
		<buttons_ske_no_shift>1,2,3,A,4,5,6,B,7,8,9,C,E,0,F,D</buttons_ske_no_shift>
		<buttons_ske_with_shift_1>1,2,3,CANCEL,4,5,6,CLEAR,7,8,9,HELP,NONE,0,SHIFT,ENTER</buttons_ske_with_shift_1>
		<buttons_ske_with_shift_2>A,B,C,CANCEL,D,E,F,CLEAR,NONE,NONE,NONE,HELP,NONE,NONE,SHIFT,ENTER</buttons_ske_with_shift_2>

Информационные запросы

WFS_INF_PIN_STATUS

Команда предназначена для получения информации о состоянии клавиатуры. Статус клавиатуры записывается в структуру WFSPINSTATUS. Поле lpszExtra в составе структуру WFSPINSTATUS является массивом строк, где каждая строка содержит описание одного параметра сервис провайдера в виде <название_параметра> = <значение_параметра>.

Cостав параметров поля lpszExtra структуры WFSPINSTATUS:

  • PRODUCT – название продукта ПроАТМ/XFS

  • VERSION – версия сборки ПроАТМ/XFS, например, 5.7.2.23423.

  • MODEL – модель PIN-клавиатуры.

  • CHIP_SN (Опц.) – серийный номер криптопроцессора.

  • CONFIGURATION_ERROR (Опц.) – если выявлена ошибка конфигурации сервиса, данное поле содержит детальное описание ошибки.

  • DEVICE_ERROR (Опц.) – если устройство находится в состоянии аппаратное ошибки, данное поле содержит ее детальное описание ошибки.

  • EPP_BATTERY:

    • OK – нормальный уровень заряда автономной батареи EPP;

    • LOW – низкий уровень заряда автономной батареи EPP.

  • PIN_ENCRYPTION_SUSPENDED (Опц.) – YES функция сборки PIN-блоков заблокирована на 1 час вследствие превышения установленного производителем PIN-клавиатуры максимального количества операций сборки PIN-блока за 1 час.

PIN-клавиатура не предоставляет сведений о состоянии датчиков установки. Если в процессе отработки запросов, задействующих операции крипто модуля, возникает предположение о том, что датчики могли быть разомкнуты, состояние сервиса меняется на WFS_PIN_DEVHWERROR, а в поле extra::DEVICE_ERROR записывается сообщение «Device is probably not installed. Please check the security connectors». Предположение о разомкнутых датчиках установки делается только в том случае, если предыдущее известное состояние крипто блока соответствует коду готовности (устройство проинициализировано, наличие ключей не учитывается). Если крипто модуль проинициализирован, то в фоне осуществляется периодическая проверка предположения о размыкании датчиков установки. Если XFS-сервис стартует в условиях разомкнутых датчиков установки, предположение о размыкании будет сделано только после неуспешной попытки инициализации устройства. До тех пор клавиатура будет иметь лишь признаки не проинициализированного устройства.

WFS_INF_PIN_FUNCKEY_DETAIL

Кнопка КОРРЕКТИРОВКА может работать как CLEAR и как BACKSPACE (см. WFS_CMD_PIN_GET_DATA). Независимо от наличия или отсутствия подключенных FDK-кнопок, всегда формируется непустой массив ulFDK.

Команды

WFS_CMD_PIN_GET_DATA

Логика ввода открытых данных описана в стандарте XFS. Кнопка КОРРЕКТИРОВКА может работать как CLEAR и как BACKSPACE. В funсKeyDetails указываются оба кода кнопки, однако поведение кнопки уточняется в момент запуска ввода. Если входной аргумент содержит в поле ulActiveKeys только код WFS_PIN_FK_CLEAR, данная кнопка будет работать как CLEAR. Если указан только WFS_PIN_FK_BACKSPACE – как BACKSPACE. Если указаны одновременно оба кода – как CLEAR.

WFS_CMD_PIN_GET_PIN

Внимание

Согласно требованиям PCI PTS, ввод PIN-кода прерывается по истечении таймаута активности 60 секунд. Для ПО верхнего уровня такая ситуация выглядит так, будто пользователь нажал кнопку ОТМЕНА.

Логика ввода PIN-кода описана в стандарте XFS. Кнопка КОРРЕКТИРОВКА может работать и как CLEAR, и как BACKSPACE (см. WFS_CMD_PIN_GET_DATA).

WFS_CMD_PIN_CRYPT

В режиме генерации RANDOM отдает 8 байт случайных данных.

Поддерживаемые криптографические операции:

  • WFS_PIN_CRYPTDESECB;

  • WFS_PIN_CRYPTDESCBC;

  • WFS_PIN_CRYPTDESMAC;

  • WFS_PIN_CRYPTTRIDESECB;

  • WFS_PIN_CRYPTTRIDESCBC (только на ключах длиной 16 байт);

  • WFS_PIN_CRYPTTRIDESMAC.

Не поддерживаются режимы CBC и MAC с участием инициализирующего вектора по двум причинам:

  1. XFS предполагает, что SVE-ключ, принимающий участие в формировании инициализирующего вектора, может выступать как в качестве ключа, дешифрующего переданный вектор (атрибут KEK), так и в качестве вектора непосредственно (атрибут IV). EPP не позволяет держать один и тот же ключ в виде двух дубликатов с атрибутами KEK и IV.

  2. Ни один из продуктов, разрабатываемых в ООО «Система», не использует инициализирующие векторы.

Внимание

В силу ошибки в прошивке, невозможно осуществлять операции шифрования и дешифрования в режиме CBC на ключах одинарной и тройной длины. Эти режимы исключаются из поддержки.

WFS_CMD_PIN_GET_PINBLOCK

Команда реализует сборку PIN-блока в форматах, указанных в capabilities. Исчерпывающее описание форматов PIN-блоков изложено в соответствующих стандартах (ISO 9564-1, Visa, Diebold).

Для формата ANSI / ISO0 интерпретация поля lpsCustomerData осуществляется в зависимости от выбранной при инсталляции настройки (см. описание параметра CustomerDataInterpretation). Для формата ANSI минимальное количество символов – 12.

Для формата ISO1 поле lpsCustomerData должно быть пустым. Для PCI 5.0 формата ISO1 поле lpsCustomerData НЕ должно быть пустым. Для PCI 5.0 формата ISO-3 ответ приходит случайным образом согласно стандарту PCI 5.0 TB 12.8 пункт e).

Для EPP H50 согласно SDK форматы ISO-1 и ISO-0 не имеют padding (padding = 0x00).

Если введенный PIN содержит меньше четырех цифр, запрос на сборку PIN-блока будет завершаться с кодом ошибки WFS_ERR_PIN_NOPIN. Согласно PCI 5.0 Буфер PIN не должно очиститься через 10 минут.

В некоторых случаях устройство не успевает обработать быстро введенный PIN. В этом случае код ошибки STATUS_INVALID_PIN_LENGTH на сборке PIN-блока транслируется в XFS код ошибки WFS_ERR_PIN_NOPIN.

В H50 sKeyEncKey должен быть в значении NULL.

Если введенный PIN содержит больше 12 (ISOx, ANSI) или 16 (IBM3624) цифр, запрос на сборку PIN-блока будет завершаться с кодом ошибки WFS_ERR_PIN_NOPIN.

В соответствии с политикой безопасности PCI PED 2.1, EPP-клавиатура сбрасывает содержимое PIN-буфера спустя десять минут после ввода PIN-кода. По истечении данного времени, операция сборки PIN-блока завершается с кодом WFS_ERR_PIN_NOPIN.

WFS_CMD_PIN_GENERATE_KCV

Поддерживаются два режима – WFS_PIN_KCVZERO и WFS_PIN_KCVSELF. В ответ возвращается 3-байтный KCV. В рамках отработки команды импорта ключа, KCV предоставляется в режиме WFS_PIN_KCVZERO.

WFS_CMD_PIN_SECUREKEY_ENTRY

Внимание

Согласно требованиям PCI PTS, ввод ключа прерывается по истечении таймаута активности 60 секунд. Для ПО верхнего уровня такая ситуация выглядит так, будто пользователь нажал кнопку ОТМЕНА.

Логика ввода ключа описана в стандарте XFS. Кнопка КОРРЕКТИРОВКА может работать и как CLEAR, и как BACKSPACE (см. WFS_CMD_PIN_GET_DATA). Допускается ввод 16, 32 и 48-значных ключей. Клавиатура не поддерживает вычисление KCV введенной части ключа.

Внимание

При слишком быстром вводе (чаще восьми нажатий в секунду) возможно переполнение буфера, в результате чего последующий импорт ключа завершится с ошибкой. В случае если оператор (сотрудник безопасности) практикует технику быстрого ввода (ввод ключа за три секунды), рекомендуется замедлить ввод на последних разрядах.

WFS_CMD_PIN_IMPORT_KEY

Емкость хранилища XFS-ключей обеспечивает хранение не менее 112 ключей. Длина ключей: 8, 16 или 24 байта. Мастер-ключи длиной менее 16 байтов запрещены.

В соответствии с PCI PED 2.1, EPP-клавиатура не позволяет импортировать ключи, зашифрованные на более слабых KEK-ключах. Например, если мастер-ключ имеет длину 16 байт, то с его помощью можно будет импортировать только 8-ми или 16-ти байтовые ключи. Код ошибки – WFS_ERR_PIN_INVALIDKEYLENGTH.

В соответствии с PCI PED 2.1, запрещается загрузка ключа, эквивалентного ранее загруженному. Код ошибки: WFS_ERR_INVALID_DATA. Эквивалентность ключа определяется после отбрасывания незначащих битов (см. стандарт FIPS 46-3), а также свертывания 3DES ключей, состоящих из двух одинаковых половинок.

Поддерживается CONSTRUCT и SECURECONSTRUCT сборка ключей в соответствии со спецификацией XFS, а также рядом ограничений, изложенных ниже. Общий принцип таков: для XOR-сборки ключа в памяти EPP к функциональным атрибутам fwUse необходимо добавить флаг WFS_PIN_USECONSTRUCT или WFS_PIN_USESECURECONSTRUCT. В ходе первой итерации ключ будет записан, в ходе последующих – смешан через функцию XOR с ранее имеющимся значением. Для завершения импорта ключа необходимо выполнить финальную активацию: команда IMPORT_KEY с передачей функциональных атрибутов fwUse, но уже без флага конструирования. В процессе финальной активации, содержимое поля lpxValue должно быть пустым (это требование не совсем соответствует спецификации XFS, однако позволяет четко отделить финализацию от перезаписи ключа). На каждой итерации сборки генерируется KCV импортированной части ключа. Выработка итоговой KCV осуществляется в рамках финальной активации. На любой итерации импорта, имеется возможность удалить ключ.

Уточнение по возвращаемым кодам ошибок:

  • SECURECONSTRUCT:

    • WFS_ERR_PIN_INVALIDKEYLENGTH: если KEY-буфер клавиатуры не содержит ключа, либо длина загружаемой части отличается от длины ранее загруженной.

    • WFS_ERR_PIN_INVALID_DATA: если функциональный атрибут ключа в поле fwUse отличаются от такового в ранее выполненных итерациях импорта.

    • WFS_ERR_UNSUPP_DATA: если представлено более одного функционального атрибута или если не представлено ни одного функционального атрибута.

  • CONSTRUCT:

    • WFS_ERR_PIN_INVALIDKEYLENGTH: если предпринята попытка загрузить ключ длиной отличной от 8, 16 или 24 байта, либо если длина загружаемой части отличается от длины ранее загруженных.

    • WFS_ERR_PIN_INVALID_DATA: если функциональный атрибут ключа в поле fwUse отличаются от такового в ранее выполненных итерациях импорта.

    • WFS_ERR_UNSUPP_DATA: если представлено более одного функционального атрибута или если не представлено ни одного функционального атрибута.

  • FINAL CONSTRUCTION:

    • WFS_ERR_PIN_KEYNOTFOUND: отсутствует ключ.

    • WFS_ERR_PIN_KEYNOVALUE: ключ прошел менее двух итераций сборки.

    • WFS_ERR_PIN_INVALID_DATA: если поле fwUse не совпадает с набором fwUse ранее загруженных частей.

WFS_INF_PIN_KEY_DETAIL

Уточнение: bLoaded дает FALSE в том случае, если ключ находится в процессе конструирования (CONSTRUCT/SECURECONSTRUCT) и свидетельствует о том, что его нельзя использовать (однако ничто не мешает генерировать KCV ключа).

WFS_INF_PIN_KEY_DETAIL_EX

По информационному наполнению ничем не отличается от WFS_INF_PIN_KEY_DETAIL. Дополнительные поля, bGeneration, bVersion, bActivatingDate[4], bExpiryDate[4] для DES/3DES ключей, загруженныхлокально, не имеют никакого значения и поэтому, в соответствии со спецификацией, содержат значения 0xff (0xffffffff).

WFS_CMD_PIN_KEYPRESS_BEEP

Допустимые значения входного аргумента:

  • 0 – отключить звуковое сопровождение нажатий клавиш.

  • WFS_PIN_BEEP_ON_ACTIVE – включить звуковое сопровождение нажатий активных клавиш. Звуковое сопровождение обеспечивается средствами встроенного динамика EPP.

WFS_CMD_PIN_INITIALIZATION

Входные аргументы запроса игнорируются. В процессе инициализации стираются все пользовательские DES/3DES ключи, а также открытые ключи хоста (из состава S-RKL). В процессе инициализации запрещается нажимать на любые клавиши. Это может привести к провалу инициализации.

RKL

Используются термины и сокращения, принятые разделе 8 спецификаций CWA 15748-65: 2008. В частности:

  • PKSI – открытый ключ доверенной стороны;

  • SKSI – закрытый ключ доверенной стороны;

  • PKATM – открытый ключ PIN-клавиатуры;

  • SKATM – закрытый ключ PIN-клавиатуры;

  • PKHOST – открытый ключ хоста (HSM);

  • SKHOST – закрытый ключ хоста (HSM);

  • UIATM – серийный номер PIN-клавиатуры;

  • KM – целевой DES мастер-ключ, импортируемый хостом в рамках процедуры RKL;

  • RATM , REPP – случайные числа, генерируемые EPP в рамках процедуры RKL.

Поддержка RKL строится на механизме подписей («Remote Key Loading Using Signatures»), описанном в разделе 8.1 (стр. 139) спецификаций CWA 15748-65: 2008. Длина RSA ключей, применяемых в схеме – 2048 бит.

Краткий перечень шагов:

  • экспорт PKATM , подписанного на SKSI ;

  • экспорт UIATM , подписанного на SKSI ;

  • импорт и верификация ключа PKHOST , подписанного на SKSI ;

  • генерация и отправка на хост RATM ;

  • импорт KM , зашифрованного на PKATM и подписанного SKHOST , с подмешиванием случайного числа REPP .

Детальное описание шагов содержится в пункте «8.1.2 RSA Secure Key Exchange using Digital Signatures» документа CWA 15748-65: 2008.

Поддерживаемые шаги: 1, 2, 3 и 4 (альтернативный, включающий RATM ).

Внимание

В клавиатуре ZT598-L23-H20 применяется нестандартный алгоритм проверки подписи (SHA256 вместо SHA1), о чем дополнительно сообщается в capabilities/extra через параметр RSA_KEY_CHECK_SHA256=1.

Шаг 4 – основной, не предусматривающий подмешивание случайного числа в подпись, не поддерживается.

Применяемые команды:

  • WFS_CMD_PIN_IMPORT_RSA_PUBLIC_KEY;

  • WFS_CMD_PIN_EXPORT_RSA_ISSUER_SIGNED_ITEM;

  • WFS_CMD_PIN_START_KEY_EXCHANGE;

  • WFS_CMD_PIN_IMPORT_RSA_SIGNED_DES_KEY.

Вышеперечисленные команды могут исполняться параллельно активному запросу WFS_CMD_PIN_GET_DATA.

Особенности реализации команд

Ниже приводятся особенности реализации команд, применяемых для поддержки RKL. Если EPP не проинициализирована ключами RSA, то работа RKL невозможна, а команды возвращают код ошибки WFS_ERR_UNSUPP_COMMAND.

WFS_CMD_PIN_EXPORT_RSA_ISSUER_SIGNED_ITEM

Команда применяется для экспорта PKATM и UIATM .

Входные аргументы:

  • wExportItemType – WFS_PIN_EXPORT_EPP_ID либо WFS_PIN_EXPORT_PUBLIC_KEY;

  • lpsName – d случае WFS_PIN_EXPORT_EPP_ID параметр игнорируется, в случае WFS_PIN_EXPORT_PUBLIC_KEY – NULL или _EPPCryptKey.

На выходе – структура, содержащая экспортируемые данные, в полном соответствии со спецификациями CEN/XFS.

При экспорте серийного номера EPP возвращается 10-байтовая последовательность, состоящая из:

  • 02h 08h – DER-тэг;

  • серийный номер 8 байт, закодированный в ASCII HEX.

Примечание

Подпись («lpxSignature») формируется по всему полю «lpxValue» – < DER-тэг «+» серийный номер 8 байт > (10 байтов). При проверке рассчитывать подпись только для блока серийного номера устройства (8 байт) неверно.

WFS_CMD_PIN_IMPORT_RSA_PUBLIC_KEY

Импорт или удаление ключа PKHOST .

Входные аргументы:

  • lpsKey – произвольное символическое имя, под которым ключ будет импортирован в систему. Длина – не более 64 знаков.

  • lpxValue – публичный ключ PKCS #1, представленный в DER ASN.1. В случае удаления ключа – NULL.

  • dwUse:

    • WFS_PIN_USERSAPUBLICVERIFY – импорт ключа хоста с верификацией подписи;

    • WFS_PIN_USERSAPUBLIC – не поддерживается;

    • 0 – режим удаления ключа.

  • lpsSigKey – имя ключа, на котором подписан импортируемый ключ. Поддерживается только подпись на ключе SKSI , поэтому параметр может принимать только следующие значения: NULL, _SigIssuerVendor.

  • dwRSASignatureAlgorithm – алгоритм подписи. Поддерживается строго WFS_PIN_SIGN_RSASSA_PKCS1_V1_5.

  • lpxSignature – подпись, 256 байт.

В режиме удаления требуется совпадение имени ключа с ранее загруженным. Если это не так, то возвращаем непредусмотренный для данной ситуации код ошибки WFS_ERR_PIN_KEYNOTFOUND.

По результатам успешного импорта генерируется проверочное значение в соответствии с алгоритмом WFS_PIN_RSA_KCV_SHA1.

WFS_CMD_PIN_START_KEY_EXCHANGE

Команда предназначена для запуска процедуры передачи целевого мастер-ключа KM . В качестве результата возвращается случайное число RATM , сгенерированное EPP, которое должно быть подмешано с зашифрованным ключом KM при формировании подписи на стороне хоста.

Последние 4 байта случайного числа всегда фиксированные: 02 82 01 00. Причина состоит в том, что физически, аппарат ожидает подпись, рассчитанную по полям:

  • RATM (8 байт);

  • ASN1 DER Tag (02 82 01 00);

  • Encrypted KM (256 байт).

Хост же, в соответствии с CEN/XFS, формирует подпись по полям:

  • RATM ;

  • Encrypted KM .

Таким образом, чтобы «вписаться» в стандарт, XFS-провайдер «склеивает» случайное число и ASN1 DER Tag и представляет эту конструкцию хосту как итоговое случайное число.

WFS_CMD_PIN_IMPORT_RSA_SIGNED_DES_KEY

Команда предназначена для загрузки или удаления мастер-ключа KM .

Входные аргументы:

  • lpsKey – имя импортируемого или удаляемого DЕS-ключа. Данная команда не позволяет удалять RSA-ключи (в частности, публичный ключ хоста);

  • dwUse – атрибут ключа; 0 – режим удаления ключа (в этом случае остальные параметры игнорируются);

  • lpsDecryptKey – имя подразумеваемого ключа SKATM : NULL или _EPPCryptKey в явном виде;

  • dwRSAEncipherAlgorithm – поддерживается строго WFS_PIN_CRYPT_RSAES_PKCS1_V1_5;

  • lpxValue – конкатенация RATM и зашифрованного на PKATM целевого DES-ключа KM, 264 байта;

  • lpsSigKey – имя ранее импортированного ключа PKHOST ;

  • dwRSASignatureAlgorithm – строго WFS_PIN_SIGN_RSASSA_PKCS1_V1_5;

  • lpxSignature – подпись, 256 байт.

Внимание

Подпись рассчитывается по полям RATM и Encrypted KM .

Пример работы

Листинг 8. Получение capabilities-листа, уточняющего схему работы RKL
 szExtra: VENDOR=DORS [SYSTEMA]
          REMOTE_KEY_SCHEME=0x00000001 [WFS_PIN_RSA_AUTH_2PARTY_SIG]
          RSA_SIGN_ALGORITHM=0x00000001 [WFS_PIN_SIGN_RSASSA_PKCS1_V1_5]
          RSA_CRYPT_ALGORITHM=0x00000001 [WFS_PIN_CRYPT_RSAES_PKCS1_V1_5]
          RSA_KEY_CHECK_MODE=0x00000001 [WFS_PIN_RSA_KCV_SHA1]
          SIGNATURE_CAPABILITIES=0x00000006 [WFS_PIN_SIG_EXPORT_EPP_ID | WFS_PIN_SIG_RANDOM_NUMBER]
Листинг 9. Расширенный список ключей
 [09:47:39] WFSAsyncGetInfo ( WFS_INF_PIN_KEY_DETAIL_EX (407) ) returned WFS_SUCCESS (0) [ReqID: 8]
 [09:47:39] WFSAsyncGetInfo ( WFS_INF_PIN_KEY_DETAIL_EX (407) ) completed with WFS_SUCCESS (0) [ReqID: 8]
     sKeyName: _EPPCryptKey
     dwUse: 0x00040000
         WFS_PIN_USERSAPRIVATE (0x00040000)
     bLoaded: TRUE
     sKeyName: _SigIssuerVendor
     dwUse: 0x08000000
         WFS_PIN_USERSAPUBLICVERIFY (0x08000000)
     bLoaded: TRUE
Листинг 10. Экспорт публичного ключа ATM
  [09:47:45] WFS_CMD_PIN_EXPORT_RSA_ISSUER_SIGNED_ITEM
     wExportItemType: WFS_PIN_EXPORT_PUBLIC_KEY (2)
     sName: _EPPCryptKey
 [09:47:45] WFSAsyncExecute ( WFS_CMD_PIN_EXPORT_RSA_ISSUER_SIGNED_ITEM (427) ) returned WFS_SUCCESS (0) [ReqID: 9]
 [09:47:45] WFSAsyncExecute ( WFS_CMD_PIN_EXPORT_RSA_ISSUER_SIGNED_ITEM (427) ) completed with WFS_SUCCESS (0) [ReqID: 9]
     xValue
         usLength: 270
         data HEX:
             30 82 01 0A 02 82 01 01 00 D6 DA D6 D5 EF 98 B1 34 5E 4A FF AD 8F A5 3E A1 0F 5C A8 7D 73 33 4C 95 6D F0 58 58 49 85 95 F3 23 DD 9B 6C 62 C0 09 1B C9 19 BF B8 40 87 EC 2C 26 5C 15 29 22 DC 35 16 74 3D 05 C7 2A 88 22 4A 13 02 5B AC E1 E4 AF 6C AE 5E 33 E0 51 E5 43 55 09 86 3F D4 17 52 FF 2C 67 C6 76 7E C6 B1 41 0D 0B 82 BE 6B 44 A0 89 6D C3 54 5E A4 13 27 9B 0B 38 52 CA B0 F1 F4 B5 86 75 D7 F1 53 D3 14 3D 77 54 BE 50 D8 E5 BA 22 28 3F F7 C5 BD 88 EA E9 42 76 F0 1F 2B 54 AD 3E 62 D7 F9 6B 8D F6 F7 72 2E 2E 67 98 77 11 02 98 60 38 5E AD BC 95 CB 6A 04 C9 9C 84 2B B1 69 1A 9C 4C BD 63 54 07 04 3F F0 5F 52 9C 66 7D 48 90 7B 8A 95 2C 3B D1 73 4C 88 0B E7 CE 04 94 21 BD 59 07 76 7E FE A2 05 55 5B A7 3C AC 7A 23 FE 75 FB 20 0D 98 10 20 9A A2 6F ED 46 A7 7F 5D E8 70 EF 8C D0 4D 99 B0 C5 61 5F 02 03 01 00 01
     dwRSASignatureAlgorithm: WFS_PIN_SIGN_RSASSA_PKCS1_V1_5 (1)
     xSignature
         usLength: 256
         data HEX:
             36 70 64 A0 16 D3 93 C8 B2 AC 60 5F C9 67 B3 1A D8 78 A2 21 0F E3 1A C3 72 5C 56 0D B0 6D DA C7 4B 39 34 2B 94 69 47 40 A4 43 D2 D1 F7 0B 22 D9 83 BE 00 B9 EB 2E 5D 8E 21 23 EA AA 88 7B E7 EB E1 62 10 78 6F 3F C4 F5 E2 A1 7F 6A D1 72 8C E2 02 AB 04 F5 33 72 1B 4F 37 35 DD A9 17 10 75 94 68 22 F0 00 76 D7 80 1E DE 6B 57 D3 4A C3 6A D5 33 52 D4 55 2D AE AB F9 ED 41 BA 36 29 4C 25 E3 17 2F 97 DD 78 7C 94 F0 98 49 4D 97 15 32 DE 33 35 F6 45 1C 2F 7B 4D 0D 6B D4 F5 7F C2 35 83 73 36 96 9A DD AB D9 C1 F9 A1 51 72 FD D3 C6 7C 6E 4B B2 50 0B 71 CC B6 86 A3 45 3B 9E 40 BC 9C 42 21 6A 14 23 E6 24 D1 F6 88 91 36 B6 AA 8F 34 35 EA F7 5C 67 03 27 D6 4E 94 A9 F3 33 DB 1A 8F 2F 00 E9 41 BF 15 90 2A 66 E2 FD 32 EC 5D 0F B5 E8 8F E5 21 FB 3B A5 21 3D D0 A6 72 A1 82 81 F3 DB
Листинг 11. Экспорт серийного номера ATM
  [09:47:49] WFS_CMD_PIN_EXPORT_RSA_ISSUER_SIGNED_ITEM
      wExportItemType: WFS_PIN_EXPORT_EPP_ID (1)
      sName:
  [09:47:49] WFSAsyncExecute ( WFS_CMD_PIN_EXPORT_RSA_ISSUER_SIGNED_ITEM (427) ) returned WFS_SUCCESS (0) [ReqID: 10]
  [09:47:49] WFSAsyncExecute ( WFS_CMD_PIN_EXPORT_RSA_ISSUER_SIGNED_ITEM (427) ) completed with WFS_SUCCESS (0) [ReqID: 10]
      xValue
          usLength: 10
          data HEX:
              02 08 37 30 31 33 34 38 31 32
      dwRSASignatureAlgorithm: WFS_PIN_SIGN_RSASSA_PKCS1_V1_5 (1)
      xSignature
          usLength: 256
          data HEX:
          3F 20 1C 18 BE 38 8E CC 22 6F 10 7E C8 48 0A AF 6C BF 2C A6 26 0D 40 08 18 70 5E B4 FA B5 8B D5 B3 C8 47 47 51 20 96 E5 32 EA 36 57 0A AE A2 BC 81 C2 49 F2 8B DA CA FC B4 C4 0B 42 5F 88 AE A4 CE A3 63 2C 97 E5 A2 58 68 A4 78 F4 77 E5 5C C1 D1 B7 48 4D B5 AA F9 D0 86 3E D0 2F 7C C9 A3 04 30 54 70 99 1B 60 54 7B E6 4F 58 7A 1A 41 77 31 3D 6A 10 50 8E 86 B4 AE 55 7B 80 A2 E0 E7 32 50 14 5B 2B 05 AF 04 34 19 6C 5F D1 E5 0F 16 FD B8 57 9B F4 89 37 46 DD CB 21 A6 18 40 78 D5 6A E9 87 AF D8 B6 57 13 AD 7F 88 D4 83 F7 82 58 CD 71 84 EC 5C 3A 98 2E 30 8E 22 CB 6A 31 38 48 20 DA D5 F6 80 69 51 53 E6 1E 93 C3 AC D7 68 C5 81 6E 8B 07 0C 5B 02 02 77 F1 D6 70 C0 B7 44 03 D4 ED 8B F1 B1 95 B3 E4 DE A0 3F 7E 1D E2 6D 28 E5 80 5C 30 9C 59 2C 27 9F 29 9F 40 A1 1F EB 92 F9 C2
Листинг 12. Импорт и проверка открытого ключа хоста
  [09:48:18] WFS_CMD_PIN_IMPORT_RSA_PUBLIC_KEY
      sKey: HSM1
      xValue HEX: 30 82 01 0a 02 82 01 01 00 d1 74 5e 90 5e 78 78 d5 54 6a 3a 47 05 02 65 49 0b 65 e8 58 99 5f a4 27 89 82 0b 75 44 4c b4 5d e1 c6 f5 99 17 c3 59 c9 14 40 2d 13 af 48 5f 24 d2 56 f9 3f 08 86 8a 50 94 d5 98 8f 8b b8 86 49 9e a2 2c 84 85 55 6b 9d 34 46 93 fd 47 1d 1a ce d0 90 df c4 66 12 f7 7f 97 cb 50 75 b8 79 2a 4c 72 e8 cc d9 3b 7a a2 65 3b 33 82 f6 4e ed 1a c9 0c 8c b6 e3 c2 3b 28 82 64 ce 4e 94 b2 dc 0d dc a6 24 c8 fb 34 85 e9 3b 74 80 ae 9d 6e dd c9 ee 19 c5 43 4b 04 26 51 d3 04 2e e1 e8 84 f0 9b 01 98 b1 05 d2 bd c2 25 b6 2d f0 f3 ba 20 ac a7 49 3c 92 f6 55 18 bb 68 16 21 4a 29 47 2d 0b 40 d7 41 c0 c2 71 05 65 73 9f 17 91 2a 65 3f aa ce e1 6c c1 cf 0a 80 e9 63 00 71 34 8d ea 26 87 dc 3c 2e 01 2d fe 06 34 88 98 3e 08 c9 79 aa 26 ed d3 a7 37 08 d8 bc b8 87 67 53 f6 ac d0 01 cc bf 3b 02 03 01 00 01
      dwUse: WFS_PIN_USERSAPUBLICVERIFY (0x08000000)
      sSigKey: _SigIssuerVendor
      dwRSASignatureAlgorithm: WFS_PIN_SIGN_RSASSA_PKCS1_V1_5 (1)
      xSignature HEX: 6b b7 f6 35 38 ef 83 a7 25 7d b6 78 73 17 c3 6a f0 c0 dd c2 ae 75 7d 43 fb 51 15 c7 b5 5a 25 81 e0 40 1e a5 db ab cb 94 56 e2 04 ac f3 8d c0 48 16 63 38 e6 9e 01 86 74 52 e0 ce 40 b5 06 20 33 f2 f2 5f 3d 95 5b ac 1c 0c b8 c5 e7 82 32 d1 b4 5e cf 60 51 75 12 ec 78 4e 58 41 18 b8 36 9e ae b4 d5 20 9c ed 93 14 32 1b a4 6f 05 0c a3 52 10 45 ac 3a d5 7a 1b ec 67 3d 58 29 96 b2 62 b1 a6 2c b7 1a fb 1f 10 e7 40 6b 61 b6 21 73 52 50 c1 7f da b6 62 68 71 85 69 a9 37 a3 2d 31 1f 08 3a e5 16 67 96 63 2a 6c 4f 89 e9 6d b6 e0 43 fa 14 ee f9 73 8c 72 ea b3 35 4a 32 c8 cf e7 e1 5f 48 fd 0f a4 4d 85 78 9e b1 2d a9 f7 82 c6 af 1c c0 5d 68 09 91 c8 98 17 d4 37 d0 80 1e ff 9e 91 4c 61 dd 9d 90 5d 1e 59 0c 48 10 5c fe 32 7d a3 17 32 5b 8a 24 dc a4 f2 63 e6 9c a3 c1 80 eb 6d c7
  [09:48:18] WFSAsyncExecute ( WFS_CMD_PIN_IMPORT_RSA_PUBLIC_KEY (426) ) returned WFS_SUCCESS (0) [ReqID: 11]
  [09:48:18] WFSAsyncExecute ( WFS_CMD_PIN_IMPORT_RSA_PUBLIC_KEY (426) ) completed with WFS_SUCCESS (0) [ReqID: 11]
      dwRSAKeyCheckMode: WFS_PIN_RSA_KCV_SHA1 (1)
      xKeyCheckValue
          usLength: 20
          data HEX:
              CE 6F 89 69 30 A6 96 39 C7 FD C8 6A 36 48 36 C6 9E BF D3 9C
Листинг 13. Импорт 3DES ключа
  [09:49:15] WFSAsyncExecute ( WFS_CMD_PIN_START_KEY_EXCHANGE (434) ) returned WFS_SUCCESS (0) [ReqID: 13]
  [09:49:16] WFSAsyncExecute ( WFS_CMD_PIN_START_KEY_EXCHANGE (434) ) completed with WFS_SUCCESS (0) [ReqID: 13]
      xRandomItem
          usLength: 12
          data HEX:
              4D 34 F8 32 2D 61 0E F9 02 82 01 00
  [09:51:14] WFS_CMD_PIN_IMPORT_RSA_SIGNED_DES_KEY
      sKey: MASTER A-KEY
      sDecryptKey: _EPPCryptKey
      dwRSAEncipherAlgorithm: WFS_PIN_CRYPT_RSAES_PKCS1_V1_5 (1)
      xValue HEX: 4d 34 f8 32 2d 61 0e f9 02 82 01 00 a7 b0 99 2e 73 50 83 d3 f7 1a ea f4 8d 82 84 c4 be 3b fc 00 c7 0e e2 35 2c f5 80 6d a6 6e 16 68 e9 9a 50 07 0a 74 6a ad 50 99 53 44 d4 2b 4d 0e fa aa 47 15 a5 4a 73 b3 65 0d c7 95 bd 59 09 66 ad f9 e7 89 70 19 91 fd c2 85 a4 e5 a4 b7 21 d4 ba ee 41 8a 81 c1 81 59 c3 85 1f b9 62 35 0c fe d2 f6 b3 87 58 cf 02 cb 3f 6b 7d 72 2d 29 22 1f 03 21 19 b4 2c 47 3d f8 50 64 67 ad 9c 22 81 4c 4b 81 e6 7b 8e de e3 2d 19 8d 32 ec 9c d5 ac d9 0c 35 97 a4 b4 94 cf 93 5b eb 06 72 ed 52 dc 52 4c 0a f4 93 0d 6c 37 48 38 89 8b be e1 96 fd ae bc 76 10 0c ef 36 35 1b 75 0d 63 b6 5b 32 0a 87 26 44 87 b2 05 75 8c 9a f9 32 6f 1b 74 7c 51 c5 6f f9 60 da 96 ea 3b 8f 70 55 3f 38 26 69 84 dd 09 80 5b 00 40 29 ad d0 0f 45 ae c4 82 1c 99 88 ee ae f6 8b ed 48 b9 56 3f 9c df 9d a4 20 ed 32
      dwUse: 0x00000020
          WFS_PIN_USEKEYENCKEY (0x00000020)
      sSigKey: HSM1
      dwRSASignatureAlgorithm: WFS_PIN_SIGN_RSASSA_PKCS1_V1_5 (1)
      xSignature HEX: 24 e1 e5 8c ca d6 cd e3 fc de 07 03 34 b0 fc 70 9a 00 d6 d6 d3 46 60 f5 0b 08 8d 10 04 0e be 3a 71 15 f9 9a b6 40 e4 5b 17 90 70 c5 2c fb 63 5d 96 1e 52 2a 68 95 96 f0 17 f1 bb 16 cb a4 73 ea a5 5d d1 7c fc 84 23 cf 60 6c 9e 2e a0 9e 94 0b 8e b2 4e 6d 65 03 ee 67 78 ef 99 49 67 42 2a e3 81 2e 8e 02 1c aa 9b bb 24 82 2b 98 86 83 eb 60 1c 88 32 7a 30 57 8d 70 c0 13 84 de d3 dd e7 49 8e 9b cb 30 1e 1c ad 60 7e 35 fd e4 e6 4b 6c cd fb 57 a7 92 26 a3 5b e3 0c d4 2d 00 dd 26 30 b9 38 08 3b a3 53 60 74 dd e3 06 1e d4 c3 82 3c 36 db ff 6a a0 0c 46 03 e8 55 58 f8 bf fd 1a 6d 19 97 b0 9d 01 f3 a6 c1 41 a5 27 53 46 e1 95 e5 9f b9 3d 3d 10 53 02 cc 7f 5b 29 d5 51 3e b5 2a 8d 2f cd d4 8a de 71 93 89 07 f1 38 76 20 0a b9 91 2d ab e9 dd 23 3a 98 fd be 6f 2a 2c ed 04 91 45
  [09:51:14] WFSAsyncExecute ( WFS_CMD_PIN_IMPORT_RSA_SIGNED_DES_KEY (428) ) returned WFS_SUCCESS (0) [ReqID: 14]
  [09:51:14] WFSAsyncExecute ( WFS_CMD_PIN_IMPORT_RSA_SIGNED_DES_KEY (428) ) completed with WFS_SUCCESS (0) [ReqID: 14]
      wKeyLength: WFS_PIN_KEYDOUBLE (2)
      wKeyCheckMode: WFS_PIN_KCVZERO (0x0002)
      xKeyCheckValue
          usLength: 3
          data HEX:
              26 8E 90

Инициализация RKL

По умолчанию, клавиатуры ZT59x H1x, H2x имеют заводскую инициализацию RKL. В качестве подписи используется ключ SZZT, тот же самый, что и в ZT596F17. В случае необходимости и в отличие от ZT596F17, клавиатура ZT59x H1x, H2x позволяет сменить SI и заново сгенерировать ключи EPP, подписанные на новом SI.

Коды ошибок оборудования

Таблица 5. Коды ошибок оборудования ZT59x H13

ERROR CODE

ERROR NAME

DESCRIPTION

0x00

STATUS_SUCCESS

No error – status successful

0x36

STATUS_SIGNATURE_VERIFICATION_FAIL

Signature verification failed

0x25

STATUS_PIN2_VERIFICATION_FAIL

The password in key buffer verification failed

0x21

STATUS_PIN_VERIFICATION_FAIL

PIN verification failed

0x23

STATUS_PIN_NOPIN

No Pin

0x22

STATUS_PIN_ENCRYPTION_SUSPENDE

PIN Encryption Suspended, try Pin after one hour

0x81

STATUS_NOT_AUTHENTE

Key with specified ID doesn’t authentication

0x55

STATUS_NO_CARD

The smart card not set or not exist

0x56

STATUS_CARD_APDU_ERROR

The smart card not answer the APDU command

0x04

STATUS_KEYID_NOT_EXIST

with specified ID doesn’t exist

0x05

STATUS_KEYID_LOCKED

Key with specified ID is locked

0x10

STATUS_KEY_USEVIOLATION

Key with specified ID Useviolation

0x11

STATUS_KEY_NOTALLOWED

Key with specified ID Not Allowed to do that

0x37

STATUS_KEY_NOT_LOADED

Key with specified ID not Loaded

0x09

STATUS_KEY_ATTRIBUTES_NOT_MATCHED

Key Attribute not Match the exist Attribute

0x0A

STATUS_KCV_VERIFICATION_FAIL

Key Check Value Verification Failure

0x03

STATUS_INVALID_WRITE_MODE

Invalid Write Mode Specified

0x13

STATUS_INVALID_VERIFY_MODE

Verify Mode Invalid

0x51

STATUS_INVALID_USERBLOCK_ADDRESS

Invalid User Block Address specified

0x35

STATUS_INVALID_SIGNATURE_LENGTH

Invalid Signature Length

0x52

STATUS_INVALID_SERIALNO_SPECIFIED

Invalid Serial Number specified

0x33

STATUS_INVALID_PKCS_STRUCTURE

Invalid structure received

0x34

STATUS_INVALID_PKCS_PADDING

Invalid PKCS Padding

0x24

STATUS_INVALID_PIN2_LENGTH

The password in key buffer has wrong length

0x20

STATUS_INVALID_PIN_LENGTH

Invalid PIN Length

0x19

STATUS_INVALID_OFFSET_LENGTH

Invalid Offset or Length - out of range

0x31

STATUS_INVALID_MODULUS_LENGTH

Invalid modulus length specified

0x16

STATUS_INVALID_MODE

Invalid Mode or Entry Mode specified

0x14

STATUS_INVALID_MACING

KCV verification failed

0x18

STATUS_INVALID_LENGTH_OR_SUM

Invalid Length or Offset+Length - out of range

0x02

STATUS_INVALID_KEYID

KeyID(s) is outside of valid range

0x0B

STATUS_INVALID_KEY_VALUE

Other KeyId Has the Same Key Value

0x06

STATUS_INVALID_KEY_LENGTH

The Key to be stored has invalid length (not 8 ,16 or 24 bytes or less than 16 bytes with MK Attributes or greater than 8 bytes with IV Attributes)

0x07

STATUS_INVALID_KEY_ATTRIBUTES

Key ID has wrong attribute

0x08

STATUS_INVALID_IV_ATTRIBUTES

IV has wrong attribute

0x32

STATUS_INVALID_EXPONENT_LENGTH

Invalid exponent length specified

0x17

STATUS_INVALID_DATA_SPECIFIED

Invalid data - values out of range

0x50

STATUS_INVALID_DATA_DISABLEED

Invalid Date Disableed

0x01

STATUS_INVALID_COMMAND_LENGTH

Command length not comply with definition

0x12

STATUS_INVALID_CHECK_MODE

Check Mode Invalid

0x42

STATUS_INVALID_CERTIFICATE_VERSION

Invalid certificate version

0x43

STATUS_INVALID_CERTIFICATE_VALIDITY

Invalid certificate issuer

0x45

STATUS_INVALID_CERTIFICATE_SUBJECT

Invalid certificate subject

0x44

STATUS_INVALID_CERTIFICATE_ISSUER

Invalid certificate validity

0x41

STATUS_INVALID_CERTIFICATE_FROMAT

Invalid certificate fromat

0x46

STATUS_INVALID_CERTIFICATE_ALGOR

Invalid certificate algor

0x15

STATUS_INVALID_AUTHENTICATION_MODE

Macing Invalid Or Verify Failure

0x73

STATUS_ERROR_INTER_ERROR

Hardware error or inter error

0x82

STATUS_EPP_NOT_INITIALIZED

EPP Keypair and/or Serial# signature not loaded

0x83

STATUS_EPP_ALREADY_INITIALIZED

EPP Keypair and/or Serial# signature already loaded

0x72

STATUS_COMMANDUNSUPP

Command unsupp

0x74

STATUS_COMMAND_LOCK

Command Lock :Not allow Execute

0x75

STATUS_KEYCOMMAND_MAC

KEY command MAC wrong

0x47

STATUS_CERTIFICATE_NOT_EXIST

Certificate with specified ID Not Exist

0x84

STATUS_CERTIFICATE_ALREADY

EPP Certification already loaded

0x80

STATUS_AUTHENTICATION_FAILED

Authentication failure

0x71

STATUS_ALGORITHMNOTSUPP

Algorithm unsupp

0x60

STATUS_KEY_INVALID

Invalid dukpt Key value

0x61

STATUS_EMV_NOT_INITIALIZED

Dukpt not initialize

0x62

STATUS_EMV_NOT_READY

KSN not imported

0x63

STATUS_EMV_ALREADY_INITIALIZED

Already initialized

0x64

STATUS_EMV_NEED_REINITIALIZE

No resource

0x65

STATUS_EMV_TIMEOUT

Software Timeout

Подробное описание статусов устройства приведено в документе «ZT596 EPP. F17. Firmware Description».

Пример сообщения:

CZT59xH13Handler::ProcessGenericCommand() - РЕЗУЛЬТАТ ВЫПОЛНЕНИЯ КОМАНДЫ:
"eResult = 0x01 [ERR_STATUS_NEGATIVE], Status Code = 0x23 [STATUS_PIN_NOPIN]"