Page tree

Versions Compared

Key

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

...

  • атрибуты идентификаторов (CKA_ID) "открытого", "закрытого" ключа и их сертификата должны иметь одинаковое значение и быть отличны от CKA_ID других объектов rtpkcs11ecp;
  • атрибуты "открытого" (CKA_ENCRYPT) и "закрытого" (CKA_DECRYPT) ключа одновременно должны принимать одно из значений:
    • TRUE. Ключ предназначен можно использовать для шифрования (расшифрования) данных;
    • FALSE.  Ключ предназначен для электронной подписи (ЭП) документа (проверки ЭП)Ключ не используется для шифрования (расшифрования) данных.
  • перечень основных атрибутов объектов rtpkcs11ecp должен соответствовать приведенным в разделе "Шаблоны rtpkcs11ecp".

...

CryptoAPI для работы с объектами rtpkcs11ecp  создает контейнеры.
Один контейнер содержит одну ключевую пару и ее сертификат. Допускается наличие в контейнере только ключевой пары, без сертификата.
Если ключевой паре соответствует несколько сертификатов, в контейнере отображается только последний выданный.
В CryptoAPI реализовано два вида контейнеров:

  • AT_KEYEXCHANGE, содержащий объекты rtpkcs11ecp, предназначенные содержащий объекты rtpkcs11ecp со значением атрибутов CKA_ENCRYPT и CKA_DECRYPT равным TRUE. Может использоваться для шифрования (расшифрования) данных и электронной подписи документов;
  • AT_SIGNATURE,  содержащий объекты rtpkcs11ecp, предназначенные содержащий объекты rtpkcs11ecp со значением атрибутов CKA_ENCRYPT и CKA_DECRYPT равным FALSE. Используется только для электронной подписи документадокументов.
Warning
titleВНИМАНИЕ!

CryptoAPI не отображает:

  • "открытый" или "закрытый" ключ без наличия на устройстве Рутокен его ключевой пары;
  • сертификат без его ключевой пары.

...

Code Block
CK_ATTRIBUTE privateKeyTemplate[] =
{
    { CKA_CLASS, &privateKeyObject, sizeof(privateKeyObject)}, // Класс - закрытый ключ
    { CKA_LABEL, &privateKeyLabelRsa, sizeof(privateKeyLabelRsa) - 1}, // Метка ключа
    { CKA_ID, &keyPairIdRsa, sizeof(keyPairIdRsa) - 1}, // Идентификатор ключевой пары (должен совпадать у "открытого" и "закрытого" ключей)
    { CKA_KEY_TYPE, &keyTypeRsa, sizeof(keyTypeRsa)}, // Тип ключа - RSA
    { CKA_DECRYPT, &attributeTrue, sizeof(attributeTrue)}, // Ключ предназначенможно использовать для расшифрования
    { CKA_TOKEN, &attributeTrue, sizeof(attributeTrue)}, // Ключ является объектом токена
    { CKA_PRIVATE, &attributeTrue, sizeof(attributeTrue)} // Ключ доступен только после аутентификации на токене };

...

Code Block
CK_ATTRIBUTE publicKeyTemplate[] =
{
    { CKA_CLASS, &publicKeyObject, sizeof(publicKeyObject)}, // Класс - открытый ключ
    { CKA_LABEL, &publicKeyLabelRsa, sizeof(publicKeyLabelRsa) - 1}, // Метка ключа
    { CKA_ID, &keyPairIdRsa, sizeof(keyPairIdRsa) - 1}, // Идентификатор ключевой пары (должен совпадать у "открытого" и "закрытого" ключей)
    { CKA_KEY_TYPE, &keyTypeRsa, sizeof(keyTypeRsa)}, // Тип ключа - RSA
    { CKA_TOKEN, &attributeTrue, sizeof(attributeTrue)}, // Ключ является объектом токена
    { CKA_ENCRYPT, &attributeTrue, sizeof(attributeTrue)}, // Ключ можно предназначениспользовать для зашифрования
    { CKA_PRIVATE, &attributeFalse, sizeof(attributeFalse)}, // Ключ доступен без аутентификации на токене
    { CKA_MODULUS_BITS, &rsaModulusBits, sizeof(rsaModulusBits)} // Длина модуля ключа };

...

Code Block
CK_ATTRIBUTE privateKeyTemplate[] =
{
    { CKA_CLASS, &privateKeyObject, sizeof(privateKeyObject)}, // Класс - закрытый ключ
    { CKA_LABEL, &privateKeyLabelRsa, sizeof(privateKeyLabelRsa) - 1}, // Метка ключа
    { CKA_ID, &keyPairIdRsa, sizeof(keyPairIdRsa) - 1}, // Идентификатор ключевой пары (должен совпадать у "открытого" и "закрытого" ключей)
    { CKA_KEY_TYPE, &keyTypeRsa, sizeof(keyTypeRsa)}, // Тип ключа - RSA
    { CKA_DECRYPT, &attributeFalse, sizeof(attributeFalse)}, // Ключ не предназначениспользуется для расшифрования
    { CKA_TOKEN, &attributeTrue, sizeof(attributeTrue)}, // Ключ является объектом токена
    { CKA_PRIVATE, &attributeTrue, sizeof(attributeTrue)} // Ключ доступен только после аутентификации на токене };

...

Code Block
CK_ATTRIBUTE publicKeyTemplate[] =
{
    { CKA_CLASS, &publicKeyObject, sizeof(publicKeyObject)}, // Класс - открытый ключ
    { CKA_LABEL, &publicKeyLabelRsa, sizeof(publicKeyLabelRsa) - 1}, // Метка ключа
    { CKA_ID, &keyPairIdRsa, sizeof(keyPairIdRsa) - 1}, // Идентификатор ключевой пары (должен совпадать у "открытого" и "закрытого" ключей)
    { CKA_KEY_TYPE, &keyTypeRsa, sizeof(keyTypeRsa)}, // Тип ключа - RSA
    { CKA_TOKEN, &attributeTrue, sizeof(attributeTrue)}, // Ключ является объектом токена
    { CKA_ENCRYPT, &attributeFalse, sizeof(attributeFalse)}, // Ключ не предназначениспользуется для зашифрования
    { CKA_PRIVATE, &attributeFalse, sizeof(attributeFalse)}, // Ключ доступен без аутентификации на токене
    { CKA_MODULUS_BITS, &rsaModulusBits, sizeof(rsaModulusBits)} // Длина модуля ключа };

...

Code Block
CK_ATTRIBUTE privateKeyTemplate[] =
{
    { CKA_CLASS, &privateKeyObject, sizeof(privateKeyObject)}, // Класс - закрытый ключ
    { CKA_LABEL, &privateKeyLabelRsa, sizeof(privateKeyLabelRsa) - 1}, 
    { CKA_ID, &keyPairIdRsa, sizeof(keyPairIdRsa) - 1}, // Идентификатор ключевой пары (должен совпадать у "открытого" и "закрытого" ключей)
    { CKA_KEY_TYPE, &keyTypeRsa, sizeof(keyTypeRsa)}, // Тип ключа - RSA
    { CKA_DECRYPT, &attributeTrue, sizeof(attributeTrue)}, // Ключ предназначенможно использовать для расшифрования
    { CKA_TOKEN, &attributeTrue, sizeof(attributeTrue)}, // Ключ является объектом токена
    { CKA_PRIVATE, &attributeTrue, sizeof(attributeTrue)}, // Ключ доступен только после аутентификации на токене
    { CKA_MODULUS, &rsaModulus, sizeof(rsaModulus)}, // Модуль n
    { CKA_PUBLIC_EXPONENT, &pubExp, sizeof(pubExp)}, // Открытая экспонента e
    { CKA_PRIVATE_EXPONENT, &privExp, sizeof(privExp)}, // Закрытая экспонента d
    { CKA_PRIME_1, &prime1, sizeof(prime1)}, // Простое число p
    { CKA_PRIME_2, &prime2, sizeof(prime2)}, // Простое число q
    { CKA_EXPONENT_1, &exp1, sizeof(exp1)}, // Закрытая экспонента d по модулю p-1 
    { CKA_EXPONENT_2, &exp2, sizeof(exp2)}, // Закрытая экспонента d по модулю q-1
    { CKA_COEFFICIENT, &coeff, sizeof(coeff)}, // q^(-1) mod p
}

...

Code Block
CK_ATTRIBUTE publicKeyTemplate[] =
{
    { CKA_CLASS, &publicKeyObject, sizeof(publicKeyObject)}, // Класс - открытый ключ
    { CKA_LABEL, &privateKeyLabelRsa, sizeof(privateKeyLabelRsa) - 1}, 
    { CKA_ID, &keyPairIdRsa, sizeof(keyPairIdRsa) - 1}, // Идентификатор ключевой пары (должен совпадать у "открытого" и "закрытого" ключей)
    { CKA_KEY_TYPE, &keyTypeRsa, sizeof(keyTypeRsa)}, // Тип ключа - RSA
    { CKA_ENCRYPT, &attributeTrue, sizeof(attributeTrue)}, // Ключ можно предназначениспользовать для шифрования
    { CKA_TOKEN, &attributeTrue, sizeof(attributeTrue)}, // Ключ является объектом токена
    { CKA_PRIVATE, &attributeFalse, sizeof(attributeTrue)}, // Ключ доступен только без аутентификации на токене
    { CKA_MODULUS, &rsaModulus, sizeof(rsaModulus)}, // Модуль n
    { CKA_MODULUS_BITS, &modulusBits, sizeof(modulusBits) }, // Длина модуля n в битах
	{ CKA_PUBLIC_EXPONENT, pubExp, sizeof(pubExp) } }); // Открытая экспонента е

...

Code Block
CK_ATTRIBUTE privateKeyTemplate[] =
{
    { CKA_CLASS, &privateKeyObject, sizeof(privateKeyObject)}, // Класс - закрытый ключ
    { CKA_LABEL, &privateKeyLabelRsa, sizeof(privateKeyLabelRsa) - 1}, 
    { CKA_ID, &keyPairIdRsa, sizeof(keyPairIdRsa) - 1}, // Идентификатор ключевой пары (должен совпадать у "открытого" и "закрытого" ключей)
    { CKA_KEY_TYPE, &keyTypeRsa, sizeof(keyTypeRsa)}, // Тип ключа - RSA
    { CKA_DECRYPT, &attributeFalse, sizeof(attributeFalse)}, // Ключ не предназначениспользуется для расшифрования
    { CKA_TOKEN, &attributeTrue, sizeof(attributeTrue)}, // Ключ является объектом токена
    { CKA_PRIVATE, &attributeTrue, sizeof(attributeTrue)}, // Ключ доступен только после аутентификации на токене
    { CKA_MODULUS, &rsaModulus, sizeof(rsaModulus)}, // Модуль n
    { CKA_PUBLIC_EXPONENT, &pubExp, sizeof(pubExp)}, // Открытая экспонента e
    { CKA_PRIVATE_EXPONENT, &privExp, sizeof(privExp)}, // Закрытая экспонента d
    { CKA_PRIME_1, &prime1, sizeof(prime1)}, // Простое число p
    { CKA_PRIME_2, &prime2, sizeof(prime2)}, // Простое число q
    { CKA_EXPONENT_1, &exp1, sizeof(exp1)}, // Закрытая экспонента d по модулю p-1 
    { CKA_EXPONENT_2, &exp2, sizeof(exp2)}, // Закрытая экспонента d по модулю q-1
    { CKA_COEFFICIENT, &coeff, sizeof(coeff)}, // q^(-1) mod p
}

...

Code Block
CK_ATTRIBUTE publicKeyTemplate[] =
{
    { CKA_CLASS, &publicKeyObject, sizeof(publicKeyObject)}, // Класс - открытый ключ
    { CKA_LABEL, &privateKeyLabelRsa, sizeof(privateKeyLabelRsa) - 1}, 
    { CKA_ID, &keyPairIdRsa, sizeof(keyPairIdRsa) - 1}, // Идентификатор ключевой пары (должен совпадать у "открытого" и "закрытого" ключей)
    { CKA_KEY_TYPE, &keyTypeRsa, sizeof(keyTypeRsa)}, // Тип ключа - RSA
    { CKA_ENCRYPT, &attributeFalse, sizeof(attributeFalse)}, // Ключ не предназначениспользуется для зашифрования
    { CKA_TOKEN, &attributeTrue, sizeof(attributeTrue)}, // Ключ является объектом токена
    { CKA_PRIVATE, &attributeFalse, sizeof(attributeTrue)}, // Ключ доступен только без аутентификации на токене
    { CKA_MODULUS, &rsaModulus, sizeof(rsaModulus)}, // Модуль n
    { CKA_MODULUS_BITS, &modulusBits, sizeof(modulusBits) }, // Длина модуля n в битах
	{ CKA_PUBLIC_EXPONENT, pubExp, sizeof(pubExp) } }); // Открытая экспонента е

...