Как зашифровать файл при помощи pkcs11-tool ?

Добрый день!

Я  пытаюсь   разобраться как шифровать файлы при помощи Вашего токена  (Рутокен ЭЦП 3.0 322)  и утилиты   pkcs-tool.

Я вижу, что в утилите есть команда --encrypt.  Пытаюсь её использовать и  получаю вот такой  результат

c:\_projects\!FiscalRegistrators\token-library\keys>
c:\_projects\!FiscalRegistrators\token-library\keys>pkcs11-tool --encrypt --login --input-file "C:\_projects\!FiscalRegistrators\token-library/keys/a" --output-file "C:\_projects\!FiscalRegistrators\token-library/keys/a.encrypt" --verbose --pin 12345678 --label cpu --id 03 --module "C:\_projects\!FiscalRegistrators\token-library/lib/rutoken/rtpkcs11ecp.dll"  --slot 0
Using slot with ID 0x0
error: Secret key not found
Aborting.

ключ  с label=cpu  и id=03  у меня загружен в токен:

c:\_projects\!FiscalRegistrators\token-library\keys>pkcs11-tool --list-objects --login --verbose --pin 12345678  --module "C:\_projects\!FiscalRegistrators\token-library/lib/rutoken/rtpkcs11ecp.dll"  --slot 0
Using slot with ID 0x0
Private Key Object; EC
  label:      armi-001
  ID:         01
  Usage:      sign
  Access:     sensitive
Private Key Object; EC
  label:      armi-root
  ID:         02
  Usage:      sign
  Access:     sensitive
Public Key Object; EC  EC_POINT 256 bits
  EC_POINT:   044104ea80b86590249f072e0e2c20df923f2a33f72c82a1a07e597ee80835b8c5f32fa08f24c2bf114b642d71f0cc704cb411d90ab648a42571da6441d92388b06cd7
  EC_PARAMS:  06082a8648ce3d030107 (OID 1.2.840.10045.3.1.7)
  label:      armi-001
  ID:         01
  Usage:      verify
  Access:     none
Public Key Object; EC  EC_POINT 256 bits
  EC_POINT:   044104ffe41d568cb079efe814ec8665e98b14b4536c33c6fa80511a0d5472712a5879493828c7c0b18a457a822bf874b7443bca44baf98b4a87da0d40628d411f9514
  EC_PARAMS:  06082a8648ce3d030107 (OID 1.2.840.10045.3.1.7)
  label:      armi-root
  ID:         01
  Usage:      verify
  Access:     none
Certificate Object; type = X.509 cert
  label:      armi-001
  subject:    DN: C=RU, ST=Moscow, L=Moscow, O=AQSI, CN=AQSI_001
  serial:     0CC8163D5E0F27CE1C28B95E43888ECDADBF44E3
  ID:         01
Certificate Object; type = X.509 cert
  label:      armi-root
  subject:    DN: C=RU, ST=Moscow, L=Moscow, O=AQSI, CN=AQSI_FR_ROOT
  serial:     3AF9A62EFF92B212F04F517AB0F946DD16CC5524
  ID:         02
Private Key Object; RSA
  label:      cpu
  ID:         01
  Usage:      decrypt, sign
  Access:     sensitive
Public Key Object; RSA 2048 bits
  label:      cpu
  ID:         01
  Usage:      encrypt, verify
  Access:     none

Т.е.  по идее -  ключ есть.  Метод  encrypt  - поддерживается для этого ключа (см  вывод --list-objects).  Не понятно почему он пишет про секретный ключ  "Secret key not found"  и что  не хватает в команде

Re: Как зашифровать файл при помощи pkcs11-tool ?

Коллеги,  и второй вопрос:

Из вывода  --list-objects   я вижу, что опция  "Usage:      encrypt, verify"  есть только у ключей  RSA.  А у ключей  типа EC  только verify.  Правильно ли я понимаю, что  шифрование на эллиптических ключах не делают?

Re: Как зашифровать файл при помощи pkcs11-tool ?

bogdanov пишет:

Т.е.  по идее -  ключ есть.  Метод  encrypt  - поддерживается для этого ключа (см  вывод --list-objects).  Не понятно почему он пишет про секретный ключ  "Secret key not found"  и что  не хватает в команде

Добрый день!

Возможность шифровать на публичных ключах появилась в opensc только два месяца назад и пока не попала в полноценный релиз: https://github.com/OpenSC/OpenSC/commit … 72c7234eee Можно попробовать взять версию 0.26.0-rc1: https://github.com/OpenSC/OpenSC/releas … 0.26.0-rc1 Я бы гарантий не давал. Шифровать данные (не ключевую информацию) на асимметричных ключах, как правило, не самая хорошая идея.

bogdanov пишет:

шифрование на эллиптических ключах

Все верно. На эллиптических кривых реализуется обмен симметричной ключевой информацией, на которой реализуется симметричное шифрование.

bogdanov, у вас как будто много вопросов возникает. Если вы в hotline@rutoken.ru напишете подробнее о вашем проекте, возможно, мы сможем помочь вам с большей результативностью, чем путем решения произвольно возникающих проблем.

Например, для шифрования данных я бы предложил использовать openssl+rtengine. В rtengine как раз появилась поддержка RSA и ECDSA ключей: https://www.rutoken.ru/support/release/openssl-1.html С документацией и SDK с примерами, мы, к сожалению, подтормаживаем, но общие принципы аналогичны использованию openssl с ключами ГОСТ. См. https://dev.rutoken.ru/pages/viewpage.a … d=43450394 и Рутокен SDK (sdk/openssl/samples/tool/) https://www.rutoken.ru/support/download/get/sdk.html . Еще один вариант с openssl: https://dev.rutoken.ru/pages/viewpage.a … =132777032