XFS-сервис класса PIN. Модели SZZT ZT596E F17, F20

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

Модель

PCI PTS

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

ZT596E

F17 1.0

F17

ZT596E

F20 1.0

F20

С целью исключения рисков, связанных с неправильным конфигурированием ПО XFS-сервиса, поддержка моделей EPP-клавиатур ZT596 E F17, ZT596 E F20 обеспечивается единым XFS-сервисом. При старте ПО, происходит автоматическое определение протокола управления (F17, F20).

Файлы

  • 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 – разрешить/запретить звуковое сопровождение при вводе данных на клавиатуры модели F17, F20. Возможные значения: 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).

  • LAYOUT – раскладка клавиатуры. Значения клавиш пишутся слева направо сверху вниз, через запятую.

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

    • DEFAULT;

    • 0–9, 00, 000, DECPOINT, ENTER, CLEAR, HELP, CANCEL, RES–RES8, OEM1–OEM6, UNUSED (если кнопка не используется).

    Значение по умолчанию: 1,2,3,CANCEL,4,5,6,CLEAR,7,8,9,HELP,RES1,0,DECPOINT,ENTER.

    Внимание

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

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

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

    • YES – в режиме ввода ключа две раскладки: основная и альтернативная. Основная раскладка содержит цифры 0..9, альтернативная – буквы A..F. Доступны кнопки ENTER, CLEAR, BACKSPACE, CANCEL, HELP, SHIFT. Расположение кнопок не зависит от LAYOUT и доступно к прочтению средствами WFS_INF_PIN_SECUREKEY_DETAIL. Для переключения между раскладками используется кнопка SHIFT (совпадает с клавишей (.) или, если нет гравировки, то располагается справа от нуля).

    • NO – плоская раскладка. Расположение цифр:

      1  2  3  A
      4  5  6  B
      7  8  9  C
      E  0  E  D
      
  • 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 ключей при переустановке ПО только, если указанный ключ реестра не подвергается частичному или полному уничтожению.

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

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_GET_DATA

Логика ввода открытых данных описана в стандарте XFS, а также детально рассматривается в приложении «ЭД. Особенности реализации. PIN.Клавиатурный ввод.Приложение. ПроАТМ_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, а также детально рассматривается в приложении «ЭД. Особенности реализации. PIN. Клавиатурный ввод. Приложение. ПроАТМ_XFS».

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

WFS_CMD_PIN_CRYPT

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

WFS_CMD_PIN_GET_PINBLOCK

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

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

PIN-клавиатура не поддерживает повторное шифрование с промежуточным XOR-замешиванием. Данный механизм реализуется программно. Таким образом, для осуществления повторного шифрования PIN-блока, требуется ключ с атрибутом CRYPT.

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

В соответствии с политикой безопасности VISA, PIN-клавиатура сбрасывает содержимое PIN-буфера спустя десять минут после ввода PINа. Таким образом, по прошествии данного времени, будет невозможно собрать PIN-блок (код возврата – WFS_ERR_PIN_NOPIN).

WFS_CMD_PIN_GENERATE_KCV

Поддерживается режим: WFS_PIN_KCVZERO. В ответ возвращается 4-х байтный KCV.

WFS_CMD_PIN_SECUREKEY_ENTRY

Внимание

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

Логика ввода ключа описана в стандарте XFS, а также детально рассматривается в приложении «XFS.PIN – клавиатурный ввод».

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

Внимание

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

WFS_CMD_PIN_IMPORT_KEY

Емкость хранилища XFS-ключей, зависит от используемых функциональных атрибутов: не менее 116 ключей. Поддерживается CONSTRUCT и SECURECONSTRUCT сборка ключей в соответствии со спецификацией XFS + рядом ограничений, изложенных в этом разделе.

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

Ограничения при использовании SECURECONSTRUCT:

  1. KCV вырабатывается в рамках финальной активации ключа, а не при его вводе (WFS_CMD_PIN_SECUREKEY_ENTRY).

  2. Импорт ключа возможен только с одним функциональным атрибутом (ограничение связано с тем, что содержимое KEY-буфера можно записать только в одну физическую ячейку EPP).

  3. Импорт ключа должен выполняться ровно за две CONSTRUCT-итерации. После этого должен быть подан final construct. В случае нарушения данного ограничения, будет выдаваться ошибка WFS_ERR_INVALID_DATA.

Уточнение: ключ, импортируемый через механизм CONSTRUCT/SECURECONSTRUCT, так или иначе предоставляется в открытом виде. Не допускается установка параметра lpsEncKey в параметре запроса на импорт.

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

  • SECURECONSTRUCT:

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

    • WFS_ERR_INVALID_DATA: в том случае, если предпринята попытка загрузить больше двух частей; в случае, если fwUse содержит более одного функционального атрибута или/и не совпадает с набором fwUse ранее загруженной части;

  • CONSTRUCT:

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

    • WFS_ERR_INVALID_DATA: в том случае, если предпринята попытка загрузить больше двух частей; в случае, если fwUse содержит более одного функционального атрибута или (и) не совпадает с набором fwUse ранее загруженной части;

  • FINAL CONSTRUCTION:

    • WFS_ERR_PIN_KEYNOTFOUND: отсутствует ключ, пригодный для финализации (в т.ч. если SECURE-constructed ключ прошел меньше двух итераций сборки);

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

Особенность: после импорта SECURED-entered части ключа, PIN-буфер клавиатуры очищается.

Уточнение: в режиме SECURECONSTRUCT, значение поля lpxValue игнорируется.

Замечание к WosaTest’s от WN: в диалоге с перечнем ключей, если ключ имеет атрибут SECURECONSTRUCT, в колонке fwUse данный атрибут не отображается (однако успешно отображается в логе, в главном окне).

XFS-сервис не поддерживает работу в режиме шифрования с передачей инициализирующего вектора. По этой причине импорт ключей с атрибутом WFS_PIN_USESVENCKEY не поддерживается.

RKL

Используются термины и сокращения, принятые в разделе 8 (стр. 95) спецификаций CWA 14050-6: 2005. В частности:

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

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

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

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

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

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

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

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

Поддержка RKL для клавиатур SZZT ZT596E F17 строится на механизме подписей («Remote Key Loading Using Signatures»), описанном в разделе 8.1 (стр. 96) спецификаций CWA 14050-6: 2005. Длина RSA ключей, применяемых в схеме 2048 бит.

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

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

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

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

  • импорт KM , зашифрованного на PKATM и подписанного SKHOST .

Детальное описание шагов – см. пункт «8.1.2 RSA Secure Key Exchange using Digital Signatures» документа CWA 14050-6: 2005.

Поддерживаемые шаги: 1, 2, 3 и 4 (основной). Шаг 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.

WFS_CMD_PIN_EXPORT_RSA_ISSUER_SIGNED_ITEM

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

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

  • wExportItemType – WFS_PIN_EXPORT_EPP_ID либо WFS_PIN_EXPORT_PUBLIC_KEY;

  • lpsName:

    • WFS_PIN_EXPORT_EPP_ID параметр игнорируется;

    • WFS_PIN_EXPORT_PUBLIC_KEY – NULL или _EPPCryptKey.

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

WFS_INF_PIN_KEY_DEAIL_EX

В силу того, что все экземпляры клавиатур SZZT ZT596E F17 идут с заранее прошитыми ключами SI и EPP, перечень ключей, полученный при помощи данного запроса, всегда содержит подразумеваемые ключи: _EPPCryptKey и _SigIssuerVendor. В т.ч. и в тех случаях, когда связь с EPP отсутствует.

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.

PIN-клавиатура не поддерживает генерацию проверочного значения, на выходе – WFS_PIN_RSA_KCV_NONE.

WFS_CMD_PIN_START_KEY_EXCHANGE

Команда предназначена для запуска процедуры передачи целевого мастер-ключа KM. Поскольку PIN-клавиатура не поддерживает генерацию случайного числа, отработка команды – чисто формальная, возвращается WFS_SUCCESS, а также пустое значение в поле lpxRandomItem.

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 – зашифрованный на PKATM целевой DES-ключ, 256 байт;

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

  • dwRSASignatureAlgorithm – строго WFS_PIN_SIGN_RSASSA_PKCS1_V1_5;

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

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

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

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

Таблица 4. Коды ошибок оборудования ZT596E F17

ERROR CODE

ERROR NAME

DESCRIPTION

0x00

STATUS_SUCCESS

No error – status successful

0x01

STATUS_INVALID_COMMAND_LENGTH

Command length not comply with definition

0x02

STATUS_INVALID_KEYID

KeyID(s) is outside of valid range

0x03

STATUS_INVALID_WRITE_MODE

Invalid Write Mode Specified

0x04

STATUS_KEYID_NOT_EXIST

Key with specified ID doesn’t exist

0x05

STATUS_KEY_LOCKED

Key with specified ID is locked

0x06

STATUS_INVALID_KEY_LENGTH

The Key to be stored has invalid length (not 8 or 16 bytes)

0x07

STATUS_INVALID_KEY_ATTRIBUTES

Key ID has wrong attribute

0x08

STATUS_INVALID_IV_ATTRIBUTES

IV has wrong attribute

0x09

STATUS_INVALID_MODE

Invalid Entry Mode specified

0x0a

STATUS_INVALID_OFFSET_LENGTH

Invalid Offset or Length – out of range

0x0b

STATUS_INVALID_LENGTH_OR_SUM

Invalid Length or Offset+Length – out of range

0x0c

STATUS_INVALID_DATA_SPECIFIED

Invalid data – values out of range

0x0d

STATUS_INVALID_PIN_LENGTH

Invalid PIN Length

0x0e

STATUS_PIN_VERIFICATION_FAIL

PIN verification failed

0x0f

STATUS_PIN_ENCRYPTION_SUSPENDED

PIN encryption/verification suspended

0x30

STATUS_INVALID_USERBLOCK_ADDRESS

Invalid User Block Address specified

0x41

STATUS_INVALID_MODULUS_LENGTH

Invalid modulus length specified

0x42

STATUS_INVALID_EXPONENT_LENGTH

Invalid exponent length specified

0x43

STATUS_INVALID_PKCS_STRUCTURE

Invalid structure received

0x44

STATUS_INVALID_PKCS_PADDING

Invalid PKCS Padding

0x45

STATUS_INVALID_SIGNATURE_LENGTH

Invalid Signature Length

0x46

STATUS_SIGNATURE_VERIFICATION_FAIL

Signature verification failed

0x47

STATUS_INVALID_SERIALNO_SPECIFIED

Invalid Serial Number specified

0x50

STATUS_EPP_NOT_INITIALIZED

EPP Keypair and/or Serial# signature not loaded

0x51

STATUS_EPP_ALREADY_INITIALIZED

EPP Keypair and/or Serial# signature already loaded

0x80

STATUS_AUTHENTICATION_FAILED

Authenticate procedure failed

0x81

STATUS_AUTHENTICATION_SUSPENDED

Authenticate procedure locked out for X hours

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

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

CZT596F17Handler::ProcessGenericCommand() - РЕЗУЛЬТАТ ВЫПОЛНЕНИЯ КОМАНДЫ:
nResult = 0x01 [ERR_STATUS_NEGATIVE], Status Code = 0x06 [STATUS_INVALID_KEY_LENGTH]