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 с участием инициализирующего вектора по двум причинам:
XFS предполагает, что SVE-ключ, принимающий участие в формировании инициализирующего вектора, может выступать как в качестве ключа, дешифрующего переданный вектор (атрибут KEK), так и в качестве вектора непосредственно (атрибут IV). EPP не позволяет держать один и тот же ключ в виде двух дубликатов с атрибутами KEK и IV.
Ни один из продуктов, разрабатываемых в ООО «Система», не использует инициализирующие векторы.
Внимание
В силу ошибки в прошивке, невозможно осуществлять операции шифрования и дешифрования в режиме 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 .
Пример работы¶
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]
[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
[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
[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
[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
[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.
Коды ошибок оборудования¶
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]"