Page tree

Versions Compared

Key

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

...

Для этого соберите библиотеку libp11 из репозитория. Вместе с ней идет libpkcs11.so начиная с версии 0.4.


Использование ключей на Рутокене

pkcs11-engine позволяет использовать ключи, расположенные на токене.

Ключевая пара идентифицируется с помощью pkcs11 uri.

Возможные компоненты идентификатора пути:

   manufacturer: ID производителя токена

   model: модель токена

   serial: серийный номер токена

   token: метка токена(поле "label")

   object: имя объекта(CKA_LABEL)

   id: идентификатор объекта (CKA_ID)


Пример идентификатора ключевой пары на токене:

pkcs11:manufacturer=Aktiv%20Co.;model=Rutoken%20ECP;serial=2adc8d87;object=my%20label;id=%aa%bb%cc%dd?pin-value=12345678

Если подключен только один Рутокен с единственной ключевой парой:

pkcs11:model=Rutoken%20ECP

В зависимости от операции будет выбран открытый или закрытый ключ соответственно. Оба ключа пары должны иметь одинаковый идентификатор объекта и/или имя объекта.


Создание ключей

Вы можете пропустить данный раздел, если у вас уже имеются необходимые RSA ключи.
Если ключей нет, ниже команда для их созданию:

...

id:  идентификатор объекта (CKA_ID) в виде двузначных номеров символов в hex из таблицы ASCII
Чтобы использовать этот id через OpenSSL надо использовать символы, соответствующие этим кодам.
Например: для ‘--id 3132’ в OpenSSL надо указывать "pkcs11:id=12". 
Для удобства, можно воспользоваться онлайн-сервисом конвертации ACSII-кодов в строку.

Проверим сгенерированный ключ:

...

openssl cms -sign -binary -nosmimecap -in data_to_sign -out signed_cms -outform PEM -keyform engine -inkey "pkcs11:your_pkcs11_uri" -engine pkcs11 -signer cert.crt

...

openssl dgst -keyform engine -sign "pkcs11:your_pkcs11_uri" -engine pkcs11 -out signature data_to_sign

...

openssl dgst -keyform engine -verify "pkcs11:your_pkcs11_uri" -engine pkcs11 -signature signature test_data

...

Info
titleШифрование на ключах с Рутокена

При расшифровании сообщения вырабатывается общий симметричный ключ, который непосредственно и используется при расшифровке. Рутокен позволяет генерировать такой общий ключ только на не извлекаемых закрытых ключах с опцией 'derive' в поле key usage. Для того чтобы указать эту опцию, при генерации ключа используйте флаг  --usage-derive. Например:

pkcs11-tool --module /usr/lib/librtpkcs11ecp.so --keypairgen --key-type rsa:2048 -l --id 3132 --usage-derive

...

   openssl cms -decrypt -binary -in encrypted_cms -inform PEM -recip respondent.cer -keyform engine -inkey "pkcs11:your_pkcs11_uri" -engine rtengine -out decrypted_cms_data

...