Re: Форматирование, установка паролей администратора и пользователя

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

CK_ULONG ulMaxAdminPinLen;
  CK_ULONG ulMinAdminPinLen;
  CK_ULONG ulMaxUserPinLen;
  CK_ULONG ulMinUserPinLen;

но в самой структуре нет максимального:

typedef struct _CK_RUTOKEN_INIT_PARAM
{
    CK_ULONG    ulSizeofThisStructure;
    CK_ULONG    UseRepairMode;
    CK_BYTE_PTR pNewAdminPin;
    CK_ULONG    ulNewAdminPinLen;
    CK_BYTE_PTR pNewUserPin;
    CK_ULONG    ulNewUserPinLen;
    /* Correct values (see description):
     * TOKEN_FLAGS_ADMIN_CHANGE_USER_PIN
     * TOKEN_FLAGS_USER_CHANGE_USER_PIN
     * TOKEN_FLAGS_ADMIN_CHANGE_USER_PIN | TOKEN_FLAGS_USER_CHANGE_USER_PIN
     */
    CK_FLAGS    ChangeUserPINPolicy; /* see below */
    CK_ULONG    ulMinAdminPinLen;
    CK_ULONG    ulMinUserPinLen;
    CK_ULONG    ulMaxAdminRetryCount;
    CK_ULONG    ulMaxUserRetryCount;
    CK_BYTE_PTR pTokenLabel;
    CK_ULONG    ulLabelLen;
} CK_RUTOKEN_INIT_PARAM;

и как быть? забыли дописать или как? или что то другое надо использовать?

Re: Форматирование, установка паролей администратора и пользователя

Aleks_kras пишет:

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

CK_ULONG ulMaxAdminPinLen;
  CK_ULONG ulMinAdminPinLen;
  CK_ULONG ulMaxUserPinLen;
  CK_ULONG ulMinUserPinLen;

но в самой структуре нет максимального:

typedef struct _CK_RUTOKEN_INIT_PARAM
{
    CK_ULONG    ulSizeofThisStructure;
    CK_ULONG    UseRepairMode;
    CK_BYTE_PTR pNewAdminPin;
    CK_ULONG    ulNewAdminPinLen;
    CK_BYTE_PTR pNewUserPin;
    CK_ULONG    ulNewUserPinLen;
    /* Correct values (see description):
     * TOKEN_FLAGS_ADMIN_CHANGE_USER_PIN
     * TOKEN_FLAGS_USER_CHANGE_USER_PIN
     * TOKEN_FLAGS_ADMIN_CHANGE_USER_PIN | TOKEN_FLAGS_USER_CHANGE_USER_PIN
     */
    CK_FLAGS    ChangeUserPINPolicy; /* see below */
    CK_ULONG    ulMinAdminPinLen;
    CK_ULONG    ulMinUserPinLen;
    CK_ULONG    ulMaxAdminRetryCount;
    CK_ULONG    ulMaxUserRetryCount;
    CK_BYTE_PTR pTokenLabel;
    CK_ULONG    ulLabelLen;
} CK_RUTOKEN_INIT_PARAM;

и как быть? забыли дописать или как? или что то другое надо использовать?

Наибольшая длина PIN-кода для Rutoken S составляет 16 байт. Это значение определяется возможностями устройства и не поддаётся изменению.
Для Рутокен ЭЦП возможно использование PIN-кодов длиной до 32 байт.
Наибольшую возможную длину PIN-кода для устройства можно узнать из полей структур CK_TOKEN_INFO_EXTENDED или CK_TOKEN_INFO.

Re: Форматирование, установка паролей администратора и пользователя

что то странное дело, не пойму Rutoken S 64К, при форматирование из "Панель управления Рутокен" задавал пароль 18 символов, и нормально отформатировал. Вроде одинаковые методы используются или нет?

Re: Форматирование, установка паролей администратора и пользователя

Aleks_kras пишет:

что то странное дело, не пойму Rutoken S 64К, при форматирование из "Панель управления Рутокен" задавал пароль 18 символов, и нормально отформатировал. Вроде одинаковые методы используются или нет?

Спасибо за информацию! Очень похоже на некорректное поведение Панели управления Рутокен. Если нам удастся повторить такое поведение, то вероятно оно будет исправлено как ошибочное.
Могу лишь заверить Вас, что максимальная длина PIN-кода, поддерживаемая устройством Rutoken S, составляет 16 байт, то есть допустимы PIN-коды длиной от 1 до 16 байт.

Re: Форматирование, установка паролей администратора и пользователя

Алексей Караваев пишет:
Aleks_kras пишет:

что то странное дело, не пойму Rutoken S 64К, при форматирование из "Панель управления Рутокен" задавал пароль 18 символов, и нормально отформатировал. Вроде одинаковые методы используются или нет?

Спасибо за информацию! Очень похоже на некорректное поведение Панели управления Рутокен. Если нам удастся повторить такое поведение, то вероятно оно будет исправлено как ошибочное.
Могу лишь заверить Вас, что максимальная длина PIN-кода, поддерживаемая устройством Rutoken S, составляет 16 байт, то есть допустимы PIN-коды длиной от 1 до 16 байт.

ок, спасибо и Вам за информацию.

(2013-03-18 08:34:20 отредактировано Lehin)

Re: Форматирование, установка паролей администратора и пользователя

Добрый день.
В данной области совсем недавно, поэтому прошу совета.
Пытался освоить форматирование ruToken с помощью сборки Net.Pkcs11, которая реализует стандартные функции pkcs11, ну и соответственно вызова функции InitToken () (как я понял, это обертка над C_InitToken()). Эксперимент не удался, при вызове функции получаю исключение PIN_INCORRECT (обертка над ckr_pin_incorrect = 0x000000a0). Это исключение из Net.Pkcs11, но все же может посоветуете, где может быть проблема?
C eToken успешно меняется метка носителя устанавливается пароль администратора, после входа под администратором успешно задается PIN пользователя.
С ruToken не могу обойти эту ошибку, должен ли пароль соответствовать какому-то формату при инициализации носителя?
1) Пишу на C#
2) Рутокен отформатирован с параметрами по умолчанию через панель Рутокен. (выставлены галочки использовать пин код по умолчанию) Политики смены пин пользователя - пользователь и Администратор
3) rtPKCS11.dll (драйвера брались с сайта полагаю должны быть актуальными)
4) стоят драйвера eToken PKI Client
И еще пара вопросов:
1. C_InitToken() в случае с ruToken очищает память носителя? или только задает пароли администратора и пользователя?
2. Чем лучше воспользоваться для более правильного форматирования ruToken (например, чтобы задать политики форматирования)
Заранее спасибо.

(2013-03-18 13:06:34 отредактировано Аникушин Евгений)

Re: Форматирование, установка паролей администратора и пользователя

Токен какой модели Вы пытаетесь инициализировать?

Lehin пишет:

при вызове функции получаю исключение PIN_INCORRECT

Если пред вызовом токен был отформатирован в панели Рутокен, с использованием PIN-кода Администратора по умолчанию, то нужно использовать следующее значение пина: "87654321"

должен ли пароль соответствовать какому-то формату при инициализации носителя?

Каждый символ пароля задаётся своим байтом соответственно кодировке ASCII, то есть для пароля администратора по умолчанию это будут байты 0x38, 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31 ("завершающий ноль" не передаётся).

1. C_InitToken() в случае с ruToken очищает память носителя? или только задает пароли администратора и пользователя?

Когда токен инициализирован, все объекты, которые могут быть уничтожены, уничтожаются (т.е. все, кроме
"не разрушаемых" объектов, таких как ключи, встроенные в токен)

2. Чем лучше воспользоваться для более правильного форматирования ruToken (например, чтобы задать политики форматирования)

В библиотеки rtPKCS11.dll присутствует функция C_EX_InitToken одним из её входных параметров является ссылка на структуру, определяющую настройки форматирования:

        // структура задающая параметры форматирования токена
        CK_RUTOKEN_INIT_PARAM    ckRtInitParams;    

        // размер структуры - входной параметр (необходимо заполнить)
        ckRtInitParams.ulSizeofThisStructure = sizeof(CK_RUTOKEN_INIT_PARAM);

        // режим восстановления не требует ввода пин-кода администратора (0 - нет, !0 - да)
        ckRtInitParams.UseRepairMode = 0;

        // задать новый пин администратора
        ckRtInitParams.pNewAdminPin = (CK_BYTE_PTR) "87654321";

        // задать длину нового пина администратора
        ckRtInitParams.ulNewAdminPinLen = 8;

        // задать новый пин пользователя
        ckRtInitParams.pNewUserPin = (CK_BYTE_PTR) "12345678";

        // задать длину нового пина пользователя
        ckRtInitParams.ulNewUserPinLen = 8;

        // задать политику смены пин-кода пользователя
        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 = (CK_UTF8CHAR_PTR) LABEL;

        // задать длину метки пользователя
        ckRtInitParams.ulLabelLen = arraysize (LABEL);

Re: Форматирование, установка паролей администратора и пользователя

Спасибо за ответ.

Аникушин Евгений пишет:

Если пред вызовом токен был отформатирован в панели Рутокен, с использованием PIN-кода Администратора по умолчанию, то нужно использовать следующее значение пина: "87654321"

Т.е. я правильно понял, что в случае с ruToken C_InitToken() не назначает новый пароль администратора, а только удаляет данные с носителя?
Если так, то тогда, я полагаю, его придется изменять через C_EX_InitToken()? Или же можно все-таки с помощью стандартной функции изменить?

Re: Форматирование, установка паролей администратора и пользователя

Стандартной функцией для смена PIN-кода является C_SetPIN.

То есть для пароля администратора, необходимо открыть R/W сессию, выполнить логин Администратором (C_Login) и затем вызовом С_SetPIN изменить его на новый.

Re: Форматирование, установка паролей администратора и пользователя

Vladimir Ivanov. Чем отличаются библиотеки rtPKCS11.dll и rtPKCS11ECP.dll? Какую библиотеку лучше использовать для Rutoken S 32k ?

Re: Форматирование, установка паролей администратора и пользователя

Mourinjo пишет:

Vladimir Ivanov. Чем отличаются библиотеки rtPKCS11.dll и rtPKCS11ECP.dll? Какую библиотеку лучше использовать для Rutoken S 32k ?

В контексте использования Рутокен S лучше использовать rtPKCS11.dll, поскольку  в библиотеке rtPKCS11ECP.dll этот тип токенов не поддерживается. Более подробно о библиотеках можно почитать здесь: http://dev.rutoken.ru/pages/viewpage.ac … Id=3178534

Re: Форматирование, установка паролей администратора и пользователя

Здравствуйте.

При форматировании RuToken S возникает ошибка, если значения ulMinAdminPinLen, ulMinUserPinLen больше единицы.

Фрагмент из SDK:
initInfo_st.pNewAdminPin = SO_PIN;
initInfo_st.ulNewAdminPinLen = sizeof(SO_PIN);
initInfo_st.pNewUserPin = NEW_USER_PIN;
initInfo_st.ulNewUserPinLen = sizeof(NEW_USER_PIN);
initInfo_st.ulMinAdminPinLen = 2;
initInfo_st.ulMinUserPinLen = 2;

rv = pFunctionListEx->C_EX_InitToken(aSlots[0], SO_PIN, arraysize(SO_PIN), &initInfo_st);
if (rv != CKR_OK)
{
printf(" -> Failed\n"); //rv == 7;
}

Почему?

Re: Форматирование, установка паролей администратора и пользователя

Добрый день.

К сожалению это железное ограничения Рутокен S.

Есть только одна возможная комбинация этих параметров:
ulMinAdminPinLen == 1
ulMinUserPinLen == 1

Re: Форматирование, установка паролей администратора и пользователя

Добрый день.

1. Ввожу неправильный ПИН пользователя или администратора;
2. Считываю расширенную информацию о токене;
3. Соответствующая типу пользователя пара значений {ulMaxUserRetryCount, ulUserRetryCountLeft} или {ulMaxAdminRetryCount, ulAdminRetryCountLeft} уменьшается синхронно.

Если я правильно понял, то уменьшаться должны только ulUserRetryCountLeft или ulAdminRetryCountLeft, но не ulMaxUserRetryCount или ulMaxAdminRetryCount?

Re: Форматирование, установка паролей администратора и пользователя

Это тоже аппаратное ограничение Рутокен S.
Узнать настоящее значение ulMaxUserRetryCount или ulMaxAdminRetryCount невозможно и поэтому подставляются значения ulUserRetryCountLeft или ulAdminRetryCountLeft