Page tree

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

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

Если токен имеет защищенный путь аутентификации (обозначается выставленным флагом CKF_PROTECTED_AUTHENTICATION_PATH в структуре CK_TOKEN_INFO), то это означает, что существует некий способ аутентификации пользователя без отправки PIN-кода
приложению
через библиотеку. Это возможно, если пользователь вводит PIN-код через PIN pad на самом токене или подключаемом к нему устройстве. Для инициализации токена таким образом параметр pPin функции C_InitToken должен быть равен NULL_PTR. Во время выполнения C_InitToken PIN-код Администратора будет введен через защищенный путь аутентификации.

Токен не может быть инициализирован, если библиотека обнаружила, что какое-либо приложение имеет открытую сессию с ним; когда вызов C_InitToken осуществляется при таких обстоятельствах, то он завершается ошибкой CKR_SESSION_EXISTS. К сожалению, может случиться так, что при вызове C_InitToken некоторые другие приложения имеют открытую сессию с токеном, но библиотека не может этого обнаружить, поскольку она не может знать все о других приложениях, использующих токен. В этом случае последствия вызова C_InitToken не определены.

Note
При форматировании устройств Рутокен из Rutoken Control Panel можно задать политику смены PIN-кода пользователя – «PIN-код пользователя может менять только пользователь». Стандарт PKCS#11 не предполагает такой политики смены PIN-кода пользователя, поэтому при попытке установки PIN-кода по-умолчанию для пользователя будет возвращена ошибка CKR_FUNCTION_REJECTED. Для смены политики смены PIN-кода следует использовать функцию C_EX_InitToken из расширения стандарта PKCS #11.

Обработка входных параметров функции происходит следующим образом.

Токен не может быть инициализирован, если библиотека обнаружила, что какое-либо приложение имеет открытую сессию с ним; когда вызов C_InitToken осуществляется при таких обстоятельствах, то он завершается ошибкой CKR_SESSION_EXISTS. К сожалению, может случиться так, что при вызове C_InitToken некоторые другие приложения имеют открытую сессию с токеном, но библиотека не может этого обнаружить, поскольку она не может знать все о других приложениях, использующих токен. В этом случае последствия вызова C_InitToken не определены.

Note
При форматировании устройств Рутокен из Rutoken Control Panel можно задать политику смены PIN-кода пользователя – «PIN-код пользователя может менять только пользователь». Стандарт PKCS#11 не предполагает такой политики смены PIN-кода пользователя, поэтому при попытке установки PIN-кода по-умолчанию для пользователя будет возвращена ошибка CKR_FUNCTION_REJECTED. Для смены политики смены PIN-кода следует использовать функцию C_EX_InitToken из расширения стандарта PKCS #11.

Обработка входных параметров функции происходит следующим образом.

  1. Если ulPinLen != 0 и pPin != NULL_PTR, то проверяется длина PIN-кода. Если длина не является допустимой, то возвращается значение CKR_ARGUMENTS_BAD. Если длина удовлетворяет условиям проверки, то проверяются права доступа для «CKU_SO» на основании предъявленных pPin и ulPinLen.
  2. Если ulPinLen != 0 и pPin == NULL_PTR, то возвращается ошибка CKR_ARGUMENTS_BAD.
  3. Если ulPinLen == 0 и pPin != NULL_PTR, то возвращается ошибка CKR_ARGUMENTS_BAD.
  4. Если pLabel == NULL_PTR Если ulPinLen != 0 и pPin != NULL_PTR, то проверяется длина PIN-кода. Если длина не является допустимой, то возвращается значениевозвращается ошибка CKR_ARGUMENTS_BAD. Если длина удовлетворяет условиям проверки, то проверяются права доступа для «CKU_SO» на основании предъявленных pPin и ulPinLen.Если ulPinLen != 0 и pPin == NULL_PTR, то возвращается ошибка

Возвращаемые значения

CKR_OK – функция выполнена успешно.

Стандартные коды ошибок:

CKR_ARGUMENTS_BAD

...

,

CKR_CRYPTOKI_NOT_INITIALIZED,

CKR_DEVICE_ERROR,

CKR_DEVICE_

Возвращаемые значения

CKR_OK – функция выполнена успешно.

Стандартные коды ошибок:

CKR_ARGUMENTS_BAD,

CKR_CRYPTOKI_NOT_INITIALIZED,

CKR_DEVICE_ERROR,

CKR_DEVICE_MEMORY,

CKR_DEVICE_REMOVED,

...

Функция может быть вызвана только в сесии «R/W SO Functions». При попытке вызвать функцию в других сессиях будет возвращена ошибка CKR_USER_NOT_LOGGED_IN.

Функция обрабатывает входные параметры следующим образом.

...

Если токен имеет защищенный путь аутентификации, отличный от PIN pad, то будет ли использоваться  C_InitPIN для инициализации PIN-кода Пользователя зависит от токена.

 Функция обрабатывает входные параметры следующим образом.

  1. Если

...

  1. ulPinLen != 0 и pPin != NULL_PTR, то проверяется длина PIN-кода. Если длина не является допустимой, то возвращается значение CKR_PIN_LEN_RANGE. Если длина удовлетворяет условиям проверки, то проверяются права доступа для «CKU_USER» на основании предъявленных pPin и ulPinLen.
  1. Если ulPinLen != 0 и pPin ! == NULL_PTR, то проверяется длина PIN-кода. Если длина не является допустимой, то возвращается значение CKR_PIN_LEN_RANGE. Если длина удовлетворяет условиям проверки, то проверяются права доступа для «CKU_USER» на основании предъявленных pPin и ulPinLen.Если ulPinLen != 0 и pPin == NULL_PTR, то возвращается ошибка CKR_ARGUMENTS_возвращается ошибка CKR_ARGUMENTS_BAD.
  2. Если ulPinLen == 0 и pPin != NULL_PTR, то возвращается ошибка CKR_PIN_LEN_RANGE.
  3. Если ulPinLen == 0 и pPin == NULL_PTR, то отображается PIN Pad (в текущей реализации: возвращается ошибка CKR_ARGUMENTS_BAD).
Note
При форматировании устройств Рутокен из Rutoken Control Panel можно задать политику смены PIN-кода пользователя – «PIN-код пользователя может менять только пользователь». Стандарт PKCS#11 не предполагает такой политики смены PIN-кода пользователя, поэтому при попытке инициализации PIN-кода будет возвращена ошибка CKR_DEVICE_ERROR. Для инициализации токена с возможность задать политику смены PIN-кода следует использовать функцию C_EX_InitToken из расширения стандарта PKCS #11.

...

Code Block
CK_DEFINE_FUNCTION(CK_RV, C_SetPIN)(
	CK_SESSION_HANDLE	hSession,
	CK_UTF8CHAR_PTR		pOldPin,
	CK_ULONG			ulOldLen,
	CK_UTF8CHAR_PTR		pNewPin,
	CK_ULONG			ulNewLen
); 
  • hSession - дескриптор сессии;
  • pOldPin - указатель на старый PIN-код Пользователя;
  • ulOldLen - длина старого PIN-кода в байтах;
  • pNewPin - указатель на новый PIN-код Пользователя;
  • ulNewLen - длина нового PIN-кода в байтах.

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

Назначение

Функция изменяет PIN-код пользователя, выполнившего авторизацию на токене. Если авторизация не выполнена, то функция производит смену PIN-кода CKU_USER (Пользователя).

Функция может быть вызвана только в сессиях «R/W Public Session», «R/W SO Functions» или «R/W User Functions». При попытке вызвать функцию в других сессиях будет возвращена ошибка CKR_SESSION_READ_ONLY.

Если токен имеет защищенный путь аутентификации (обозначается выставленным флагом CKF_PROTECTED_AUTHENTICATION_PATH в структуре CK_TOKEN_INFO), то это означает, что существует некий способ аутентификации пользователя без отправки PIN-кода
приложению
через библиотеку. Это возможно, если пользователь вводит PIN-код через PIN pad на самом токене или подключаемом к нему устройстве. Для изменения PIN-кода текущего пользователя таким образом параметры Для инициализации токена таким образом параметры pOldPin и pNewPinфункции C_InitToken должны быть равны NULL_PTR. Во время выполнения C_InitToken текущим пользователем будут введены cтарый и новый PIN-коды через защищенный путь аутентификации. Стандартом не определяется, как PIN pad должен использоваться при вводе двух PIN-кодов.

_SESSION_HANDLE	hSession,
	CK_UTF8CHAR_PTR		pOldPin,
	CK_ULONG			ulOldLen,
	CK_UTF8CHAR_PTR		pNewPin,
	CK_ULONG			ulNewLen
); 
  • hSession - дескриптор сессии;
  • pOldPin - указатель на старый PIN-код Пользователя;
  • ulOldLen - длина старого PIN-кода в байтах;
  • pNewPin - указатель на новый PIN-код Пользователя;
  • ulNewLen - длина нового PIN-кода в байтах.

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

Назначение

Функция изменяет PIN-код пользователя, выполнившего авторизацию на токене. Если авторизация не выполнена, то функция производит смену PIN-кода CKU_USER (Пользователя).

Функция может быть вызвана только в сессиях «R/W Public Session», «R/W SO Functions» или «R/W User Functions». При попытке вызвать функцию в других сессиях будет возвращена ошибка CKR_SESSION_READ_ONLYЕсли токен имеет защищенный путь аутентификации, отличный от PIN pad, то будет ли использоваться  C_SetPIN для смены PIN-кода текущего пользователя зависит от токена.

 Функция обрабатывает входные параметры следующим образом.

  1. Если ulPinLen != 0 и pPin != NULL_PTR, то проверяется длина PIN-кода. Если длина не является допустимой, то возвращается значение CKR_PIN_LEN_RANGE. Если длина удовлетворяет условиям проверки, то проверяются права доступа для «CKU_USER» на основании предъявленных pPin и ulPinLen.
  2. Если ulPinLen != 0 и pPin == NULL_PTR, то возвращается ошибка CKR_ARGUMENTS_BAD.
  3. Если ulPinLen == 0 и pPin != NULL_PTR, то возвращается ошибка CKR_PIN_LEN_RANGE.
  4. Если ulPinLen == 0 и pPin == NULL_PTR, то отображается PIN Pad (в текущей реализации: возвращается ошибка CKR_ARGUMENTS_BAD).

...