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.
Запускается в режимах
Результат: |
Совет Полный список ошибок см. в приложении. |
---|
Пример генерации сессионного ключа на языке Java под ОС Android:
// дескриптор сессии
LongRef session = new LongRef();
// переменные атрибута, определяющего место сохранения объекта
boolean bToken = true;
boolean bSession = !bToken;
// дескриптор сессионного ключа
LongRef sessionKeyHandle = new LongRef();
// механизм для генерации сессионного ключа
CKM sessionKeyGenMech = new CKM(CKM.GOST28147_KEY_GEN, null);
// атрибуты сессионного ключа
CKA[] sessionKeyAttribs = new CKA[3];
sessionKeyAttribs[0] = new CKA(CKA.CLASS, CKO.SECRET_KEY); // сессионный ключ
sessionKeyAttribs[1] = new CKA(CKA.TOKEN, bSession); // как сессионный объект
sessionKeyAttribs[2] = new CKA(CKA.GOST28147_PARAMS, Default.STR_CRYPTO_PRO_GOST_28147_A); // тип ключа согласно rfc 4357
// генерация сессионного ключа
rv = C.GenerateKey(session.value, sessionKeyGenMech, sessionKeyAttribs, sessionKeyHandle);
if(rv != CKR.OK)
{
throw new CKRException("C.GenerateKey", rv);
}
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.
Запускается в режимах
Результат: |
Совет Полный список ошибок см. в приложении. |
---|
Пример генерации ключевой пары на языке Java:
// дескриптор сессии
LongRef session = new LongRef();
// механизм для генерации ключевой пары
CKM mech = new CKM(CKM.GOSTR3410_KEY_PAIR_GEN, null);
// атрибуты открытого ключа
CKA[] pubKeyAttribs = new CKA[5];
pubKeyAttribs[0] = new CKA(CKA.CLASS, CKO.PUBLIC.KEY); // открытый ключ
pubKeyAttribs[1] = new CKA(CKA.TOKEN, bToken); // в токене
pubKeyAttribs[2] = new CKA(CKA.LABEL, "Public key"); // метка для отображения
pubKeyAttribs[3] = new CKA(CKA.GOSTR3410_PARAMS, Default.STR_CRYPTO_PRO_A); // тип ключевой пары согласно rfc 4357
pubKeyAttribs[4] = new CKA(CKA.ID, relatedID); // общий идентификатор
// атрибуты закрытого ключа
CKA[] prKeyAttribs = new CKA[5];
prKeyAttribs[0] = new CKA(CKA.CLASS, CKO.PRIVATE_KEY); // закрытый ключ
prKeyAttribs[1] = new CKA(CKA.TOKEN, bToken); // в токене
prKeyAttribs[2] = new CKA(CKA.LABEL, "Private key"); // метка для отображения
prKeyAttribs[3] = new CKA(CKA.GOSTR3410_PARAMS, Default.STR_CRYPTO_PRO_A); // тип ключевой пары согласно rfc 4357
prKeyAttribs[4] = new CKA(CKA.ID, relatedID); // общий идентификатор
// дескрипторы создаваемых объектов
LongRef pubKeyHandle = new LongRef();
LongRef prKeyHandle = new LongRef();
// генерация ключевой пары
rv = C.GenerateKeyPair(session.value, mech, pubKeyAttribs, prKeyAttribs, pubKeyHandle, prKeyHandle);
if(rv != CKR.OK)
{
throw new CKRException("C.GenerateKeyPair", rv);
}
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.
Запускается в режимах
Результат: |
Совет Полный список ошибок см. в приложении. |
---|
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.
Запускается в режимах
Результат: |
Совет Полный список ошибок см. в приложении. |
---|
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
) – механизм для генерации псевдослучайных данныхпроизвольной длины защищенным образом, соответствующий стандарту ГОСТ.
Запускается в режимах
Результат: |
Совет Полный список ошибок см. в приложении. |
---|
Пример выработки ключа согласования на языке Java:
// дескриптор сессии
LongRef session = new LongRef();
// атрибуты ключа согласования
CKA[] deriveKeyAttribs = new CKA[5];
deriveKeyAttribs[0] = new CKA(CKA.CLASS, CKO.SECRET_KEY); // ключ согласования
deriveKeyAttribs[1] = new CKA(CKA.TOKEN, bSession); // как сессионный объект
deriveKeyAttribs[2] = new CKA(CKA.ENCRYPT, true); // использование ключа для шифрования
deriveKeyAttribs[3] = new CKA(CKA.DECRYPT, true); // использование ключа для расшифрования
deriveKeyAttribs[4] = new CKA(CKA.GOST28147_PARAMS, Default.STR_CRYPTO_PRO_GOST_28147_A); // тип ключа согласно rfc 4357
// параметры механизма для создания ключа согласования
CK_PARAMS deriveParams = null;
// механизм для создания ключа согласования
CKM deriveKeyMech = null;
// дескрипторы объектов
LongRef pubKeyHandle = new LongRef();
LongRef prKeyHandle = new LongRef();
LongRef drvKeyHandle = new LongRef();
// формирование ключа согласования
rv = C.DeriveKey(session.value, deriveKeyMech, prKeyHandle.value, deriveKeyAttribs, drvKeyHandle);
if(rv != CKR.OK)
{
throw new CKRException("C.DeriveKey", rv);
}