Page tree

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 5 Next »

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

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

Ключевая пара идентифицируется с помощью 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

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

pkcs11:model=Rutoken%20ECP

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

Генерация ключевой пары ГОСТ в файл

openssl genpkey -algorithm gost2012_256 -pkeyopt paramset:A -out seckey.pem

Укажите алгоритм, используя опцию -algorithm.

Укажите параметры эллиптической кривой (парамсет) с помощью -pkeyopt.

Поддерживаются следующие значения алгоритмов и соответствующих им парамсетов:

   gost2001: A,B,C,XA,XB

   gost2012_256: A,B,C,XA,XB

   gost2012_512: A,B

Генерация  ключевой пары ГОСТ на Рутокене

Через OpenSSL пока не поддерживается. Для генерации на Рутокене используйте pkcs11-tool из состава OpenSC.

Генерация ключевой пары ГОСТ-2001 на Рутокене

   pkcs11-tool.exe --module rtPKCS11ECP.dll --login --pin 12345678 --keypairgen  --key-type GOSTR3410:A --id 3132

pin: PIN-код Рутокена

id:  идентификатор объекта (CKA_ID) в виде двузначных номеров символов в hex из таблицы ASCII.

Чтобы использовать этот id через OpenSSL надо использовать символы, соответствующие этим кодам.
Например: для ‘--id 3132’ в OpenSSL надо указывать "pkcs11:id=12".  


GOSTR3410:A : ‘A’ - парамсет, может быть так же B или С

Генерация ключевой пары ГОСТ-2012 на Рутокене

 Используйте ветку pkcs11-tool с поддержкой ГОСТ-2012 пока она не влита в master OpenSC

   pkcs11-tool.exe --module rtPKCS11ECP.dll --login --pin 12345678 --keypairgen --key-type GOSTR3410-2012-256:B --id 3132

pin: PIN-код Рутокена

id:  идентификатор объекта (CKA_ID) в виде двузначных номеров символов в hex из таблицы ASCII.

Чтобы использовать этот id через OpenSSL надо использовать символы, соответствующие этим кодам.
Например: для ‘--id 3132’ в OpenSSL надо указывать "pkcs11:id=12".  


GOSTR3410-2012-512:A : ‘A’ - парамсет, может быть так же B или С,

GOSTR3410-2012-256:B : ‘B’ - парамсет, может быть так же C или D


или

используйте веб-сервис "Центр регистрации Рутокен"

Для просмотра объектов на токене:

    pkcs11-tool.exe --module rtPKCS11ECP.dll -Ol

Формирование запроса PKCS#10

Используя ключ в файле:

openssl req -utf8 -new -key seckey.pem -out req.csr

Используя ключ на Рутокене:

openssl req -utf8 -new -keyform engine -key "pkcs11:your_pkcs11_uri" -engine rtengine -out req.csr

Формат параметра -key описан в разделе "Использование ключей на Рутокене"

В процессе работы команда попросит ввести PIN-код. После этого потребуется указать данные для сертификата:

  • State or Province []: Moscow

  • Locality []:  RU

  • Organization Name []: Aktiv Company

  • Organizational Unit Name []: development

  • Common Name []: tester

  • Email []: tester@rutoken.ru

Набор вводимой информации при формировании запроса определяется конфигурационным файлом openssl.cnf.

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

Используя ключ в файле:

openssl req -utf8 -x509 -key seckey.pem -out cert.cer

Используя ключ на Рутокене:

openssl req -utf8 -x509 -keyform engine -key "pkcs11:your_pkcs11_uri" -engine rtengine -out cert.cer

Создание подписи в формате CMS

Для создания CMS подписи необходимо иметь сертификат. В тестовых целях в папке sdk\openssl\rtengine\samples\tool\ предоставлены настройки удостоверяющего центра OpenSSL, который позволяет выпускать сертификаты.

Скопируйте папке sdk\openssl\rtengine\samples\tool\demoCA и конфигурационный файл openssl.cnf в папку с OpenSSL и выполните:

openssl ca -batch -in req.csr -out cert.cer


Затем создайте CMS подпись используя ключ в файле:

openssl cms -sign -binary -nosmimecap -in data_to_sign -out signed_cms -outform PEM -inkey seckey.pem -signer cert.cer


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

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

 Используя -nodetach подписываемые данные включаются в состав CMS пакета — присоединенная подпись. Без этой опции подпись будет «отсоединенной».

 Используя -nocerts сертификат подписанта не включается в состав CMS пакета.

Проверка подписи в формате CMS

 openssl cms -verify -binary -in signed_cms -inform PEM -out verified_data -CAfile demoCA/cacert.pem -content data_to_sign

Файл, указанный в -CAfile, является доверенным сертификатом удостоверяющего

центра и используется для проверки сертификата подписанта.

В опцию -content передается файл с подписанными данными, если он не был включен в состав CMS пакета.

Если сертификат подписанта не был включен в CMS пакет (отсоединенная подпись), он указывается в опции -certfile.

«Сырая» подпись данных

 Используя ключ в файле:

openssl dgst -sign seckey.pem -out signature data_to_sign

 Используя ключ на Рутокене:

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

 Алгоритм хеша будет зависеть от алгоритма ключа.

Проверка «сырой подписи»

 Получить открытый ключ из закрытого можно следующей командой:

   openssl pkey -in seckey.pem -pubout -out pubkey.pem

 Проверка используя ключ в файле:

   openssl dgst -verify pubkey.pem -signature signature data_to_sign

 Используя ключ на Рутокене:

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

Шифрование в формате CMS

   openssl cms -encrypt -binary -gost28147-paramset_a-cfb -in test_data -out encrypted_cms -outform PEM respondent.cer

respondent.cer: сертификат адресата, для которого шифруется сообщение.

gost28147-paramset_a-cfb: единственный доступный алгоритм, работает в режиме гаммирования с обратной связью с набором параметров А.

Расшифрование на стороне адресата:

 Используя ключ в файле:

   openssl cms -decrypt -binary -in encrypted_cms -inform PEM -recip respondent.cer -inkey seckey.pem -out decrypted_cms_data

 Используя ключ на Рутокене:

   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

  • No labels