C_GenerateKey¶C_GenerateKey(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism, CK_ATTRIBUTE_PTR pTemplate, CK_ULONG ulCount, CK_OBJECT_HANDLE_PTR phKey, CKA_VALUE pSecretKey)¶| Параметры: |
|
|---|
Генерирует секретный ключ.
Поддерживаются следующие механизмы:
CKM_GOST28147_KEY_GEN (0x00001220) – механизм генерации ключей, соответствующий стандарту ГОСТ 28147-89.CKM_DES2_KEY_GEN (0x00000130) – механизм генерации ключей DES двойной длины.CKM_DES3_KEY_GEN (0x00000131) – механизм генерации ключей для алгоритма triple-DES.CKM_TLS_PRE_MASTER_KEY_GEN (0x00000374) – механизм генерации 48-байтных секретных ключей, используемых
при создании pre_master ключей для протокола TLS 1.0.CKM_AES_KEY_GEN (0x00001080) – механизм генерации ключей для алгоритма
AES.Запускается в режимах
| Результат: |
Совет Полный список ошибок см. в приложении. |
|---|
Пример генерации сессионного ключа на языке С:
// дескриптор сессии
CK_SESSION_HANDLE pkcs11SessionHandle;
// механизм генерации ключей
CK_MECHANISM pkcs11GenKeyMechanism = {CKM_GOST28147_KEY_GEN, NULL, 0};
// шаблон ключа
CK_ATTRIBUTE pkcs11SessionKeyTemplate[] =
{
{CKA_GOST28147_PARAMS, STR_CRYPTO_PRO_GOST28147_A, sizeof(STR_CRYPTO_PRO_GOST28147_A)}
};
// дескриптор сессионного ключа PKCS#11
CK_OBJECT_HANDLE pkcs11SessionKeyHandle;
// функция генерирует ключ, используя заданный шаблон
rv = C_GenerateKey(pkcs11SessionHandle,
&pkcs11GenKeyMechanism,
pkcs11SessionKeyTemplate,
sizeof(pkcs11SessionKeyTemplate)/sizeof(CK_ATTRIBUTE),
&pkcs11SessionKeyHandle);
if(rv != CKR_OK)
{
throw runtime_error("C_GenerateKey failed.");
}
Возможные значения атрибута CKA_GOST28147_PARAMS смотри в приложении.
Более полную информацию о работе с объектами смотри в приложении.
C_GenerateKeyPair¶C_GenerateKeyPair(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism, CK_ATTRIBUTE_PTR pPublicKeyTemplate, CK_ULONG ulPublicKeyAttributeCount, CK_ATTRIBUTE_PTR pPrivateKeyTemplate, CK_ULONG ulPrivateKeyAttributeCount, CK_OBJECT_HANDLE_PTR phPublicKey, CK_OBJECT_HANDLE_PTR phPrivateKey)¶| Параметры: |
|
|---|
Генерирует ключевую пару и возвращает идентификаторы закрытого и открытого ключей.
Поддерживаются следующие механизмы:
CKM_GOSTR3410_KEY_PAIR_GEN (0x00001200) – механизм генерации ключевой пары в соответствии со стандартом
ГОСТ 34.10-2001.CKM_RSA_PKCS_KEY_PAIR_GEN (0x00000000) – механизм генерации ключевой пары для алгоритма RSA.CKM_ECDSA_KEY_PAIR_GEN (0x00001040) – механизм генерации ключевой пары для алгоритма
ECDSA.CKM_EC_KEY_PAIR_GEN (0x00001040) – механизм генерации ключевой пары для алгоритма
EC.Запускается в режимах
| Результат: |
Совет Полный список ошибок см. в приложении. |
|---|
Пример генерации ключевой пары на языке С:
// открытый ключ должен храниться в памяти устройства
CK_BBOOL pkcs11KeyGenToken = TRUE;
// дескриптор сессии
CK_SESSION_HANDLE pkcs11SessionHandle;
// механизм генерации ключевой пары
CK_MECHANISM pkcs11GenKeyPairMechanism = {CKM_GOSTR3410_KEY_PAIR_GEN, NULL, 0};
// шаблон закрытого ключа
CK_ATTRIBUTE pkcs11PrivKeyTemplate[] =
{
{CKA_TOKEN, &pkcs11KeyGenToken, sizeof(pkcs11KeyGenToken)},
{CKA_GOSTR3410_PARAMS, STR_CRYPTO_PRO_A, sizeof(STR_CRYPTO_PRO_A)}
};
// шаблон открытого ключа
CK_ATTRIBUTE pkcs11PubKeyTemplate[] =
{
{CKA_TOKEN, &pkcs11KeyGenToken, sizeof(pkcs11KeyGenToken)},
{CKA_GOSTR3410_PARAMS, STR_CRYPTO_PRO_A, sizeof(STR_CRYPTO_PRO_A)}
};
// дескрипторы открытого и закрытого ключа ключевой пары PKCS#11
CK_OBJECT_HANDLE pkcs11PubKeyHandle, pkcs11PrivKeyHandle;
// функция генерирует ключевую пару
rv = C_GenerateKeyPair(pkcs11SessionHandle,
&pkcs11GenKeyPairMechanism,
pkcs11PubKeyTemplate, sizeof(pkcs11PubKeyTemplate)/sizeof(CK_ATTRIBUTE),
pkcs11PrivKeyTemplate, sizeof(pkcs11PrivKeyTemplate)/sizeof(CK_ATTRIBUTE),
&pkcs11PubKeyHandle,
&pkcs11PrivKeyHandle);
if(rv != CKR_OK)
{
throw runtime_error("C_GenerateKeyPair failed.");
}
Значения атрибута CKA_GOSTR3410_PARAMS смотри в приложении.
Более полную информацию о работе с объектами смотри в приложении.
C_WrapKey¶C_WrapKey(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism, CK_OBJECT_HANDLE hWrappingKey, CK_OBJECT_HANDLE hKey, CK_BYTE_PTR pWrappedKey, CK_ULONG_PTR pulWrappedKeyLen)¶| Параметры: |
|
|---|
Производит экспорт симметричного сессионного ключа (сгенерированного программно) на симметричном ключе согласования.
Поддерживаются следующие механизмы:
CKM_GOST28147_KEY_WRAP (0x00001224) – механизм для импорта и экспорта ключей, соответствующий стандарту
ГОСТ 28147-89.CKM_RSA_PKCS (0x00000001) – механизм для импорта и экспорта ключей с использованием ключевой пары и
алгоритма RSA.CKM_DES3_ECB (0x00000132) – механизм для импорта и экспорта ключей в режиме ECB с использованием
алгоритма triple-DES.CKM_DES3_CBC (0x00000133) – механизм для импорта и экспорта ключей в режиме CBC с использованием
алгоритма triple-DES.CKM_AES_ECB (0x00001081) – механизм для импорта и экспорта ключей в режиме ECB с использованием
алгоритма AES.CKM_AES_CBC (0x00001082) – механизм для импорта и экспорта ключей в режиме CBC с использованием
алгоритма AES.Запускается в режимах
| Результат: |
Совет Полный список ошибок см. в приложении. |
|---|
C_UnwrapKey¶C_UnwrapKey(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism, CK_OBJECT_HANDLE hUnwrappingKey, CK_BYTE_PTR pWrappedKey, CK_ULONG ulWrappedKeyLen, CK_ATTRIBUTE_PTR pTemplate, CK_ULONG ulAttributeCount, CK_OBJECT_HANDLE_PTR phKey)¶| Параметры: |
|
|---|
Производит импорт сессионного ключа на ключе согласования.
Поддерживаются следующие механизмы:
CKM_GOST28147_KEY_WRAP (0x00001224) – механизм для импорта и экспорта ключей, соответствующий стандарту
ГОСТ 28147-89.CKM_RSA_PKCS (0x00000001) – механизм для импорта и экспорта ключей с использованием ключевой пары и
алгоритма RSA.CKM_DES3_ECB (0x00000132) – механизм для импорта и экспорта ключей в режиме ECB с использованием
алгоритма triple-DES.CKM_DES3_CBC (0x00000133) – механизм для импорта и экспорта ключей в режиме CBC с использованием
алгоритма triple-DES.CKM_AES_ECB (0x00001081) – механизм для импорта и экспорта ключей в режиме ECB с использованием
алгоритма AES.CKM_AES_CBC (0x00001082) – механизм для импорта и экспорта ключей в режиме CBC с использованием
алгоритма AES.Запускается в режимах
| Результат: |
Совет Полный список ошибок см. в приложении. |
|---|
C_DeriveKey¶C_DeriveKey(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism, CK_OBJECT_HANDLE hBaseKey, CK_ATTRIBUTE_PTR pTemplate, CK_ULONG ulAttributeCount, CK_OBJECT_HANDLE_PTR phKey)¶| Параметры: |
|
|---|
Вырабатывает ключ согласования или сессионный ключ (в зависимости от апплета, с которым происходит работа и используемого механизма).
Поддерживаются следующие механизмы:
CKM_GOSTR3410_DERIVE (0x00001204) – механизм для выработки ключа согласования, соответствующий
стандарту ГОСТ Р 34.10-2001.CKM_TLS_GOST_MASTER_KEY_DERIVE (NSSCK_VENDOR_PKSC11_RU_TEAM |0x101) – механизм для выработки
48-байтного ключа из 32-байтного ключа, используемый при создании master_secret ключей для протокола TLS 1.0.CKM_TLS_GOST_KEY_AND_MAC_DERIVE (NSSCK_VENDOR_PKSC11_RU_TEAM |0x102) – механизм для выработки ключа
согласования из master_secret и случайных данных.CKM_TLS_GOST_PRF (NSSCK_VENDOR_PKSC11_RU_TEAM |0x103) – механизм для генерации псевдослучайных данных
произвольной длины защищенным образом, соответствующий стандарту ГОСТ.CKM_TLS_MASTER_KEY_DERIVE (0x00000375) – механизм для выработки 48-байтного ключа из другого
48-байтного ключа, используемый при создании master_secret ключей для протокола TLS 1.0.CKM_TLS_KEY_AND_MAC_DERIVE (0x00000376) – механизм для выработки ключа согласования из
master_secret и случайных данных.CKM_TLS_MASTER_KEY_DERIVE_DH (0x00000377) – механизм для выработки 48-байтного ключа из другого ключа
произвольного размера, используемый при создании master_secret ключей для протокола TLS 1.0.CKM_TLS_PRF (0x00000378) – механизм для генерации псевдослучайных данных произвольной длины.CKM_ECDH1_DERIVE (0x00001050) – механизм для генерации ключа согласования, основывающийся на
эллиптических кривых и алгоритме Диффи-Хеллмана.Запускается в режимах
| Результат: |
Совет Полный список ошибок см. в приложении. |
|---|
Предупреждение
Данный раздел актуален только при работе с апплетом Криптотокен.
Пример выработки ключа согласования на языке С:
// механизм выработки ключа согласования
CK_MECHANISM pkcs11DeriveKeyMechanism;
// дескрипторы открытого и закрытого ключа ключавой пары PKCS#11
CK_OBJECT_HANDLE pkcs11PubKeyHandle, pkcs11PrivKeyHandle;
// шаблон ключа согласования
CK_ATTRIBUTE pkcs11DerivedKeyTemplate[] =
{
{CKA_GOST28147_PARAMS, STR_CRYPTO_PRO_GOST28147_A, sizeof(STR_CRYPTO_PRO_GOST28147_A)}
};
// дескриптор ключа согласования PKCS#11
CK_OBJECT_HANDLE pkcs11DerivedKeyHandle;
// параметры для выработки ключа согласования
CK_GOSTR3410_DERIVE_PARAMS pkcs11DeriveParams;
// устанавливаем параметры для создания ключа согласования
pkcs11DeriveParams.kdf = NULL;
pkcs11DeriveParams.pPublicData = cpPubKeyValue;
pkcs11DeriveParams.ulPublicDataLen = 64;
pkcs11DeriveParams.pUKM = ukm;
pkcs11DeriveParams.ulUKMLen = 8;
// устанавливаем механизм создания ключа согласования
pkcs11DeriveKeyMechanism.mechanism = CKM_GOSTR3410_DERIVE;
pkcs11DeriveKeyMechanism.pParameter = &pkcs11DeriveParams;
pkcs11DeriveKeyMechanism.ulParameterLen = sizeof(pkcs11DeriveParams);
// создаем ключ согласования
rv = C_DeriveKey(pkcs11SessionHandle,
&pkcs11DeriveKeyMechanism,
pkcs11PrivKeyHandle,
pkcs11DerivedKeyTemplate,
sizeof(pkcs11DerivedKeyTemplate)/sizeof(CK_ATTRIBUTE),
&pkcs11DerivedKeyHandle);
if(rv != CKR_OK)
{
throw runtime_error("C_DeriveKey failed.");
}
Возможные значения атрибута CKA_GOST28147_PARAMS смотри в приложении.
Более полную информацию о работе с объектами смотри в приложении.