(2024-10-23 10:39:01 отредактировано andydandy)

Рутокен ЭЦП 3.0 как отформатировать/сбросить в заводские настройки?

Привет,

Есть необходимость реанимировать/отформатировать/скинуть в заводские настройки Рутокен ЭЦП 3.0 или 2.0
у которого утеряны все пин коды.

Использую для этого функцию C_EX_InitToken:

    void format() {
        CK_RUTOKEN_INIT_PARAM ckRtInitParams;
        ckRtInitParams.ulSizeofThisStructure = sizeof(CK_RUTOKEN_INIT_PARAM);
        ckRtInitParams.UseRepairMode = 1;
        ckRtInitParams.pNewAdminPin = SO_PIN;
        ckRtInitParams.ulNewAdminPinLen = sizeof(SO_PIN);
        ckRtInitParams.pNewUserPin = USER_PIN; 
        ckRtInitParams.ulNewUserPinLen = sizeof(USER_PIN);
        ckRtInitParams.ChangeUserPINPolicy =
            TOKEN_FLAGS_ADMIN_CHANGE_USER_PIN | TOKEN_FLAGS_USER_CHANGE_USER_PIN;
        ckRtInitParams.ulMinAdminPinLen = 6;
        ckRtInitParams.ulMinUserPinLen = 6; 
        ckRtInitParams.ulMaxAdminRetryCount = 10;
        ckRtInitParams.ulMaxUserRetryCount = 10;
        ckRtInitParams.pTokenLabel = TOKEN_LABEL;
        ckRtInitParams.ulLabelLen = sizeof(TOKEN_LABEL);
        ckRtInitParams.ulSmMode = 0;

        CK_RV rv = m_pkcs11Library.getFunctionListExt()->C_EX_InitToken(
                 m_slot, 
                 SO_PIN, 
                 sizeof(SO_PIN), 
                 &ckRtInitParams
        );
        if (rv != CKR_OK) {
            throw std::runtime_error(to_string(rv));
        }
    }

Методом научного тыка выяснил, что для случая утерянных пинкодов, C_EX_InitToken нужно вызвать вхолостую до 10 раз,
пока пинкод администратора не залочится, и только потом она отработает.

0. Есть способ запустить C_EX_InitToken без лока пинкода администратора?
По крайней мере без десятка холостых вызовов с пинкодом.

1. Правильно я понимаю, что параметр UseRepairMode определяет только то, как отработает C_EX_InitToken.
Т.е. UseRepairMode не записыватся на токен во время форматирования и никак не влияет на его дальнейшую работу?
И если пин администратора залочен то C_EX_InitToken отработает только в случае UseRepairMode!=0? И это единственная его функция?

2. Чем упраляет ulSmMode?

3. В rtpkcs11t.h есть такой код:

/* C_EX_SlotManage mode */
#define MODE_RESTORE_FACTORY_DEFAULTS    0x06UL
#define MODE_GET_PIN_SET_TO_BE_CHANGED   0x07UL

/* Data structure to be used in C_EX_SlotManage - extended function with
 * MODE_RESTORE_FACTORY_DEFAULTS for token supporting trusted import */
typedef struct CK_VENDOR_RESTORE_FACTORY_DEFAULTS_PARAMS {
  CK_ULONG                  ulSizeofThisStructure;      /* [in] init this field by size of this structure. For example -
                                                             st.ulSizeofThisStructure = sizeof(CK_RUTOKEN_CHANGE_EMITENT_PASS_PARAM) */
  CK_BYTE_PTR               pAdminPin;                  /* [in] pointer to byte array with current admin PIN */
  CK_ULONG                  ulAdminPinLen;              /* [in] length of current admin PIN */
  CK_RUTOKEN_INIT_PARAM_PTR pInitParam;                 /* [in] pointer to structure with initialization params*/
  CK_BYTE_PTR               pNewEmitentKey;             /* [in] pointer to byte array with new emitent key (32 bytes) */
  CK_ULONG                  ulNewEmitentKeyLen;         /* [in] length of new emitent key (32) */
  CK_ULONG                  ulNewEmitentKeyRetryCount;  /* [in] emitent key retry count */
} CK_VENDOR_RESTORE_FACTORY_DEFAULTS_PARAMS;

Это еще один способ сброситься в заводские настройки помимо C_EX_InitToken, но через C_EX_SlotManage?
Если да, то где можно найти пример использования?
В описании C_EX_SlotManage на сайте, не нашел упоминания про MODE_RESTORE_FACTORY_DEFAULTS.

Re: Рутокен ЭЦП 3.0 как отформатировать/сбросить в заводские настройки?

Добрый день.
Вы можете форматировать ваш Рутокен с полной потерей данных согласно инструкции: http://kb.rutoken.ru/display/KB/PU1001

Re: Рутокен ЭЦП 3.0 как отформатировать/сбросить в заводские настройки?

Я видел этот тред.

Это не то, о чем я спрашиваю.

Меня интересует работа через API pkcs11...

Re: Рутокен ЭЦП 3.0 как отформатировать/сбросить в заводские настройки?

0. Нет, без ввода пин-кода "Администратора" или без залоченного пин-кода нельзя.
1. Все так.
2. Этот параметр влиял на работу Рутокен Bluetooth. Для Рутокен ЭЦП 3.0 он всегда равен 0
3. Нет, это не относится форматированию токена