ESMART: различия между версиями

Материал из ALT Linux Wiki
 
(не показаны 3 промежуточные версии 2 участников)
Строка 23: Строка 23:
= Работа с ESMART Token ГОСТ утилитой pkcs11-tool=
= Работа с ESMART Token ГОСТ утилитой pkcs11-tool=
== Пакеты для работы с ESMART Token ГОСТ==
== Пакеты для работы с ESMART Token ГОСТ==
Должна быть установлена библиотека libisbc_pkcs11_main.so:
Должна быть установлена библиотека libisbc_pkcs11_main.so и утилита pkcs11-tool:
<source lang="text" highlight="1"># apt-get install isbc-pkcs11</source>
<source lang="text" highlight="1"># apt-get install isbc-pkcs11 opensc</source>
{{Note|При работе с ESMART Token ГОСТ необходимо указывать путь до библиотеки libisbc_pkcs11_main.so:
{{Note|При работе с ESMART Token ГОСТ необходимо указывать путь до библиотеки libisbc_pkcs11_main.so:
<source lang="text" highlight="1">--module /usr/lib64/pkcs11/libisbc_pkcs11_main.so</source>}}
<source lang="text" highlight="1">--module /usr/lib64/pkcs11/libisbc_pkcs11_main.so</source>}}
Строка 192: Строка 192:
Success</source>
Success</source>


Изменение SO PIN (PIN) для смарт карты или токена:
Изменение SO PIN (PIN) для смарт-карты или токена:
<source lang="text" highlight="1">$ PKIClientCli changesopin --sopin 12345678 --newsopin 00000000</source>
<source lang="text" highlight="1">$ PKIClientCli changesopin --sopin 12345678 --newsopin 00000000</source>
Разблокировка PIN-кода:
Разблокировка PIN-кода:
Строка 245: Строка 245:


Например, генерация ключей GOST:256:
Например, генерация ключей GOST:256:
<source lang="text" highlight="1">$ PKIClientCli genkey --pin 12345678</source>
<source lang="text" highlight="1">$ PKIClientCli genkey --pin 12345678
Key Pair ID:    2066466304.
Key Pair Label: 2066466304.
Success</source>
 


{{Attention|GOST, GOST:256, GOST:512 не работает?}}


Ключи RSA:1024:
Ключи RSA:1024:
Строка 258: Строка 261:
Просмотр объектов (verbose 1 — показать подробную информацию, 0 — краткую):
Просмотр объектов (verbose 1 — показать подробную информацию, 0 — краткую):
<source lang="text" highlight="1">$ PKIClientCli list --pin 12345678 --verbose 1
<source lang="text" highlight="1">$ PKIClientCli list --pin 12345678 --verbose 1
private key; GOSTR3410-2001
private key; GOSTR3410-2012 256 bits
label: my key
label: 2066466304
ID: 0101
ID: 2066466304
usage: SIGN, UNWRAP,  
usage: SIGN, UNWRAP, DERIVE, DECRYPT
private key; RSA length 1024
private key; RSA length 1024
label: 1975611901
label: 1975611901
ID: 1975611901
ID: 1975611901
usage: SIGN, UNWRAP, DECRYPT
usage: SIGN, UNWRAP, DECRYPT
public key; GOSTR3410-2001
public key; GOSTR3410-2012 256 bits
label: my key
label: 2066466304
ID: 0101
ID: 2066466304
usage: VERIFY
usage: ENCRYPT, VERIFY
public key; RSA length 1024
public key; RSA length 1024
label: 1975611901
label: 1975611901
Строка 368: Строка 371:
Основные опции:
Основные опции:


--pin — PIN (PIN пользователя) для смарт карты или токена (обязательный);
--pin — PIN (PIN пользователя) для смарт-карты или токена (обязательный);


--inpath — путь к файлу для подписи (обязательный);
--inpath — путь к файлу для подписи (обязательный);

Текущая версия от 17:25, 25 июля 2023

Stub.png
Данная страница находится в разработке.
Эта страница ещё не закончена. Информация, представленная здесь, может оказаться неполной или неверной.


  • Токен: ESMART Token ГОСТ
   библиотека libisbc_pkcs11_main.so обеспечивает взаимодействие с криптопровайдером токена по стандарту PKCS#11;
   ESMART Token ГОСТ может использоваться для генерации ключей, формирования и проверки электронной подписи, строгой многофакторной аутентификации пользователей и др. 
   Российские криптографические алгоритмы ГОСТ реализованы нативно в ОС смарт-карты в маске чипа (не используются Java апплеты для реализации ГОСТ).

PIN-код

PIN-кодом называют сочетание символов, как правило цифр, но для ESMART Token также могут использоваться алфавитные и служебные символы. Оптимально, надежный пароль должен быть не менее 8 символов и желательно содержать символы минимум 3 типов, например, большие и маленькие буквы и цифры, или буквы, цифры и служебные символы.

Благодаря аппаратной защите PIN-код может быть проще, т.к. карта защищена от подбора пароля методом перебора. После того как несколько раз был введен неверный пароль, карта блокируется.

Получить доступ к хранящимся на заблокированной карте ключам, данным и сертификатам невозможно. Разблокировать карту можно при помощи SO PIN.

SO PIN используется администратором для инициализации карты, разблокировки карты после ввода пользователем неверного ПИН-кода.

Значения PIN-кодов ESMART Token ГОСТ, установленные по умолчанию: Пользователь (pin): 12345678; Администратор (so-pin): 12345678

Работа с ESMART Token ГОСТ утилитой pkcs11-tool

Пакеты для работы с ESMART Token ГОСТ

Должна быть установлена библиотека libisbc_pkcs11_main.so и утилита pkcs11-tool:

# apt-get install isbc-pkcs11 opensc
Примечание: При работе с ESMART Token ГОСТ необходимо указывать путь до библиотеки libisbc_pkcs11_main.so:
--module /usr/lib64/pkcs11/libisbc_pkcs11_main.so


Проверка работы ESMART Token ГОСТ

Проверяем работу токена, он должен быть виден в списке:

$ pkcs11-tool -L --module /usr/lib64/pkcs11/libisbc_pkcs11_main.so 
Available slots:
Slot 0 (0x1): Generic CCID Reader [CCID Bulk Interface] 00 00
  token label        : EsmartToken
  token manufacturer : ISBC
  token model        : ESMARTToken GOST
  token flags        : login required, rng, token initialized, PIN initialized
  hardware version   : 2.5
  firmware version   : 255.255
  serial num         : 346056D604154404
  pin min/max        : 4/8

Просмотреть имеющуюся на токене информацию можно при помощи команды (требуется пароль от токена):

$ pkcs11-tool -Ol --module /usr/lib64/pkcs11/libisbc_pkcs11_main.so
Using slot 0 with a present token (0x1)
Logging in to "EsmartToken".
Please enter User PIN:

Инициализация токена

Внимание! При инициализации все данные с токена будут удалены!

Для инициализации токена следует выполнить команду (необходимо ввести so-pin карты 2 раза или передать его в качестве параметра --so-pin):

$ pkcs11-tool --init-token --label EsmartToken  --module /usr/lib64/pkcs11/libisbc_pkcs11_main.so
Using slot 0 with a present token (0x1)
Please enter the new SO PIN: 
Please enter the new SO PIN (again): 
Token successfully initialized

Смена PIN-кода

Для смены PIN-кода необходимо выполнить команду (потребуется ввести текущий PIN-код, а затем дважды ввести новый):

$ pkcs11-tool --change-pin  --module /usr/lib64/pkcs11/libisbc_pkcs11_main.so
Using slot 0 with a present token (0x1)
Please enter the current PIN: 
Please enter the new PIN: 
Please enter the new PIN again: 
PIN successfully changed

Разблокировка PIN-кода

Для того чтобы разблокировать PIN-код необходимо выполнить команду (потребуется ввести so-pin карты, а затем дважды ввести новый PIN-код):

$ pkcs11-tool --init-pin -l  --module /usr/lib64/pkcs11/libisbc_pkcs11_main.so
Using slot 0 with a present token (0x1)
Please enter SO PIN: 
Please enter the new PIN: 
Please enter the new PIN again: 
User PIN successfully initialized

Удаление объекта

Для удаления объекта необходимо указать его тип и идентификатор (id) или название (label). Открытый и закрытый ключ удаляются отдельно.

$ pkcs11-tool -b -y privkey --login --id 1024 --module /usr/lib64/pkcs11/libisbc_pkcs11_main.so

Типы объектов:

  • privkey – закрытый ключ;
  • pubkey – открытый ключ;
  • cert – сертификат.

Создание ключевой пары

Создание ключевой пары по алгоритму ГОСТ:

$ pkcs11-tool --module /usr/lib64/pkcs11/libisbc_pkcs11_main.so --login --pin 12345678 --keypairgen --key-type GOSTR3410:A --id 0101 --label "my key"
Using slot 0 with a present token (0x1)
Key pair generated:
Private Key Object; GOSTR3410 
  PARAMS OID: 06072a850302022301
  label:      my key
  ID:         0101
  Usage:      sign, unwrap
Public Key Object; GOSTR3410 
  PARAMS OID: 06072a850302022301
  VALUE:      a973f28ea2462781249fff1060d37276f23030e9766b54b8a14f0daa6fba6a7d
              62f2481e00a3df35bdd6c75ed82e8e95f1a78e9db549c8ee55008cfd92d7abb2
  label:      my key
  ID:         0101
  Usage:      verify, wrap

Создание ключевой пары RSA 1024:

$ pkcs11-tool --module /usr/lib64/pkcs11/libisbc_pkcs11_main.so --keypairgen --key-type rsa:1024 --login --id 2222 --label myrsakey
Using slot 0 with a present token (0x1)
Logging in to "EsmartToken".
Please enter User PIN: 
Key pair generated:
Private Key Object; RSA 
  label:      myrsakey
  ID:         2222
  Usage:      decrypt, sign, unwrap
Public Key Object; RSA 1024 bits
  label:      myrsakey
  ID:         2222
  Usage:      encrypt, verify, wrap

Сертификаты

Создание запроса на сертификат

Получение сертификата

Запрос на сертификат необходимо подписать в аккредитованном удостоверяющем центре.

Запись сертификата на карту

Подписанный сертификат необходимо записать на карту:

$ pkcs11-tool -w cert.cer -y cert --id 1024 --module /usr/lib64/pkcs11/libisbc_pkcs11_main.so

OpenSC требует сертификаты в двоичном формате (DER). При попытке записать файл в кодировке base64 (PEM), появляется сообщение об ошибке.

Сертификат можно переконвертировать при помощи OpenSSL:

PEM → DER

$ openssl x509 -inform pem -in cert.pem -out cert.cer

DER → PEM

$ openssl x509 -inform der -in cert.cer -out cert.pem

Чтение сертификата

Если на карте имеется сертификат, его можно прочитать командой:

$ pkcs11-tool --read-object --type cert --login --id 0101 --module /usr/lib64/pkcs11/libisbc_pkcs11_main.so

ID сертификата можно посмотреть, выведя список объектов на токене:

$ pkcs11-tool --module /usr/lib64/pkcs11/libisbc_pkcs11_main.so -O

Создание и настройка входа через ssh

Примечание: Работает только с RSA ключами

Предполагается что ssh-сервер запущен (на 192.168.3.108) и имеет настройки, принятые по умолчанию в ALT Linux.

  1. Вывести список открытых ключей на смарт-карте в формате OpenSSH:
    $ ssh-keygen -D /usr/lib64/pkcs11/libisbc_pkcs11_main.so
    ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQCHahc9HhA/DQkvJFShNHo2BJV3/cj0tmGNfj0RO3mCtRl8cgqvkb9N/4bJcfG3NiDR4T+x1MxmFxHcQXDstUwnF1mc40kabWz9d1a16dlwVmtFCKv0l2pK6MMX6igqtHnapGNvyUpsYSV4wXnMwevGNQGeq6l9AE+r18cEVx4KLQ==
    
  2. Добавить ключ на сервер в файл ~/.ssh/authorized_keys
  3. Подключение к серверу (необходимо будет ввести PIN):
    $ ssh -I /usr/lib64/pkcs11/libisbc_pkcs11_main.so user@192.168.3.108
    The authenticity of host '192.168.3.108 (192.168.3.108)' can't be established.
    ED25519 key fingerprint is SHA256:6wjAK3qjuaASBQOHaBLH5mZMeHP6cAjws4HI1Xr3vZc.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added '192.168.3.108' (ED25519) to the list of known hosts.
    Enter PIN for 'EsmartToken': 
    [user@host-15 ~]$
    

Для удобства на компьютере клиенте в файле ~/.ssh/config можно указать сокращение:

$ vim ~/.ssh/config
Host example
   Hostname 192.168.3.108
   PKCS11Provider /usr/lib64/pkcs11/libisbc_pkcs11_main.so

и вызывать просто:

$ ssh example
Enter PIN for 'EsmartToken': 
Last login: Tue Feb 26 14:04:32 2019 from 192.168.3.106
[user@host-15 ~]$

Утилита PKIClientCli

Утилита PKIClientCli предназначена для работы со смарт-картами или USB-ключами ESMARTToken. Утилита позволяет выполнить все необходимые операции со смарт-картами или USB-ключами ESMARTToken в командной строке.

Установка:

# apt-get install isbc-pkcs11-utils


Изменение ПИН-кода:

$ PKIClientCli changepin --pin 12345678 --newpin 00000000
Success

Изменение SO PIN (PIN) для смарт-карты или токена:

$ PKIClientCli changesopin --sopin 12345678 --newsopin 00000000

Разблокировка PIN-кода:

$ PKIClientCli unlockpin --sopin 12345678 --newpin 00000000

Поддерживаемые алгоритмы

Список поддерживаемых механизмов:

$ PKIClientCli listm
GOST28147, encrypt, decrypt
MAGMA_ECB, encrypt, decrypt
GOSTR3410_256, sign, verify
GOSTR3410_WITH_GOSTR3411_94, sign, verify
GOSTR3410_WITH_GOSTR3411_2012_256, sign, verify
RSA_PKCS_KEY_PAIR_GEN, keySize={1024,1024}, gen_key_pair
GOSTR3410_256_KEY_PAIR_GEN, gen_key_pair
RSA_PKCS, keySize={1024,2048}, encrypt, decrypt, sign, sign_recover, verify, verify_recover
RSA_X_509, keySize={1024,2048}, encrypt, decrypt
SHA_1, digest
MD5, digest
SHA256, digest
GOSTR3411_94, digest
SHA224, digest
SHA384, digest
SHA512, digest
GOSTR3411_2012_256, digest
AES_ECB, keySize={16,32}, encrypt, decrypt
AES_CBC, keySize={16,32}, encrypt, decrypt
AES_CBC_PAD, keySize={16,32}, encrypt, decrypt
DES_ECB, keySize={8,8}, encrypt, decrypt
DES_CBC, keySize={8,8}, encrypt, decrypt
DES_CBC_PAD, keySize={8,8}, encrypt, decrypt
DES3_ECB, keySize={16,16}, encrypt, decrypt
DES3_CBC, keySize={16,16}, encrypt, decrypt
DES3_CBC_PAD, keySize={16,16}, encrypt, decrypt
AES_KEY_GEN, keySize={16,32}, generate
DES_KEY_GEN, keySize={8,8}, generate
DES2_KEY_GEN, keySize={16,16}, generate
GOST28147_KEY_GEN, generate
ECDSA_KEY_PAIR_GEN, keySize={256,256}, gen_key_pair, ec_f_p, ec_namedcurve, ec_uncompress
ECDSA, keySize={256,256}, sign, verify, ec_f_p, ec_namedcurve, ec_uncompress
GOSTR3410_DERIVE
GOSTR3410_2012_DERIVE
GOST28147_MAC, sign, verify
GOST28147_KEY_WRAP

Генерация ключей

Команда:

$ PKIClientCli genkey --pin <PIN> --keytype <Key type>

где: Key type — тип ключа: GOST, GOST:256, GOST:512 или RSA:бит (512/1024/ и т.д) [по умолчанию GOST:256]

Например, генерация ключей GOST:256:

$ PKIClientCli genkey --pin 12345678
Key Pair ID:    2066466304.
Key Pair Label: 2066466304.
Success


Ключи RSA:1024:

$ PKIClientCli genkey --keytype RSA:1024 --pin 12345678
Key Pair ID:    1975611901.
Key Pair Label: 1975611901.
Success

Просмотр объектов (verbose 1 — показать подробную информацию, 0 — краткую):

$ PKIClientCli list --pin 12345678 --verbose 1
private key; GOSTR3410-2012 256 bits
	 label: 	2066466304
	 ID: 		2066466304
	 usage: 	SIGN, UNWRAP, DERIVE, DECRYPT
private key; RSA length 1024
	 label: 	1975611901
	 ID: 		1975611901
	 usage: 	SIGN, UNWRAP, DECRYPT
public key; GOSTR3410-2012 256 bits
	 label: 	2066466304
	 ID: 		2066466304
	 usage: 	ENCRYPT, VERIFY
public key; RSA length 1024
	 label: 	1975611901
	 ID: 		1975611901
	 usage: 	ENCRYPT, VERIFY

Создание запроса на сертификат и импорт полученного сертификата

Команда создания запроса на сертификат:

$ PKIClientCli genkey --pin <PIN> --path <Путь к шаблону CSR> --csrpath <Путь к шаблону CSR> --pubkeyid <ID открытого ключа>

Шаблон CSR имеет вид:

# CSR template example for PKIClientCli
[DN]
# Distinguished Name section
#(ИНН)
1.2.643.3.131.1.1=395556660000
#(СНИЛС)
1.2.643.100.3=11223344556
#(Country)
2.5.4.6=RU
#(State)
2.5.4.8=39 Калининградская обл.
#(City)
2.5.4.7=Калининград
#(Street)
2.5.4.9=Пр-т Победы 14 кв.3
#(Organization)
2.5.4.10=
#(OU)
2.5.4.11=
#(Unstructured Name)
1.2.840.113549.1.9.2=
#(Title)
2.5.4.12=
#(email)
1.2.840.113549.1.9.1=ivanov@mail.mail
#(Given Name)
2.5.4.42=Иван Иванович
#(Surname)
2.5.4.4=Иванов
#(Common Name)
2.5.4.3=Иванов Иван Иванович
[ATTRIBUTES]
# CSR attributes section
#(challengePassword)
1.2.840.113549.1.9.7=
# GOST R 34.10-2012, 256 bit
1.2.643.7.1.1.2.2=FALSE
[EXTENSIONS]
# CSR extensiotns section
keyUsage=digitalSignature,keyEncipherment,nonRepudiation,dataEncipherment,keyAgreement=FALSE
# Extended Key Usage
#extKeyUsage=clientAuth,emailProtection=TRUE
2.5.29.37=DER:303006072A85030202220606082A8503030700010C06072A85030307080106082B0601050507030206082B06010505070304=TRUE
# Microsoft UPN
#1.3.6.1.4.1.311.20.2.3=user@local=FALSE

Например, создадим запрос на сертификат esmart.csr на основе данных записанных в шаблоне esmart.tmpl:

$ PKIClientCli csr --pin 12345678 --pubkeyid 0101 --path esmart.tmpl --csrpath esmart.csr
Success

Запрос на сертификат необходимо подписать в аккредитованном удостоверяющем центре.

Примечание: Может понадобится перекодировать запрос на сертификат в формат PEM или Base64. Сделать это можно, выполнив команду:
$ openssl req -inform der -in esmart.csr -out esmart.pem


Для получения сертификата в УЦ (на примере тестового удостоверяющего центра КриптоПро), необходимо выполнить следующие действия:

  1. Откройте в браузере ссылку http://www.cryptopro.ru/certsrv (тестовый удостоверяющий центр КриптоПро).
  2. Нажмите ссылку «Отправить готовый запрос PKCS#10 или PKCS#7 в кодировке Base64»:
    Ссылка «Отправить готовый запрос PKCS#10 или PKCS#7 в кодировке Base64»
  3. Вставьте в поле «Base-64-шифрованный запрос сертификата» содержимое файла test5.req и нажмите кнопку «Выдать»:
    Выдача запроса на сертификат
  4. Сохраните файл по ссылке «Загрузить сертификат» (по умолчанию предлагается имя certnew.cer):
    Ссылка «Загрузить сертификат»
Примечание: Просмотреть содержимое файла esmart.pem можно, выполнив команду:
$ cat esmart.pem
MIIBMDCB4AIBADA2MRMwEQYDVQQDDApUZXN0IFVzZXI1MR8wHQYJKoZIhvcNAQkBFhBjYXNAYWx0
bGludXgub3JnMGMwHAYGKoUDAgITMBIGByqFAwICJAAGByqFAwICHgEDQwAEQDq5IAql+tHfVT7r
oz+P5dPgOUVXc7dg91nzGM7fkUBSKlapGO2A2xUDRUBHLtW/hBCiZsxdH3ydhzlZ6nhcbNKgPjA8
BgorBgEEAYI3AgEOMS4wLDAdBgNVHSUEFjAUBggrBgEFBQcDBAYIKwYBBQUHAwIwCwYDVR0PBAQD
AgTwMAgGBiqFAwICAwNBAFYnhGI6SsCwFRSl5p6EVnM7y6Hx9JGM6BFS4U3xTEGvzMK7yzk9j1kG
EKU7YZO5cFluPuDdi0WuYskhdz4SEg4=


Подписанный сертификат необходимо записать на карту:

$ PKIClientCli importcert --pin 12345678 --path certnew.cer
Matching key pair found. Following label and ID have been assigned to the certificate:
Certificate ID:    0101.
Certificate Label: my key.
Success
Примечание: Данные сертификата должны быть в формате DER


Подписание документов

Команда:

$ PKIClientCli pkcs7sign --pin <PIN> --inpath <файл> --outpath <файл> --certid <ID сертификата> --intcertids <ID1, ID2> --privkeyid <ID сертификата>

Основные опции:

--pin — PIN (PIN пользователя) для смарт-карты или токена (обязательный);

--inpath — путь к файлу для подписи (обязательный);

--outpath — путь к файлу, где будет храниться подпись (обязательный);

--certid — ID объекта сертификата пользователя (обязательный);

--intcertids — промежуточные идентификаторы объекта сертификата (через запятую);

--detached — тип подписи, 0 — прикреплённая (по умолчанию), 1 — откреплённая;

--privkeyid — ID объекта закрытого ключа. Если не указан, будет найден автоматически по сертификату пользователя;

--noconfirm — не спрашивать подтверждение перед подписью, 0 — подтверждение необходимо (по умолчанию), 1 — пропустить подтверждение.

Создание прикреплённой (attached) подписи:

$ PKIClientCli pkcs7sign --pin 12345678 --inpath ./my_file.odt --outpath out.sign --certid 0101
File path: 		./my_file.odt
File size: 		8086
Created date: 		2019-02-25 13:56:29
Modified date: 		2019-02-25 13:56:29
Checksum: 		287495846084353A1404776EFCBA61F0DC6FA4ACAA6F9B78DFBA6F023085ABC (GOST R 34.11-2012) 
Certificate CN: 	Иванов Иван Иванович
Certificate serial: 	120032DA694AB3BC3711A2AA3500000032DA69
Continue? [y/n or yes/no]: y
Success

Создание откреплённой (detached) подписи (если в команде не вводить обязательные поля, они будут запрошены):

$ PKIClientCli pkcs7sign --detached 1
Please enter PIN (User PIN): 
Please enter path to file to be signed: my_file.odt
Please enter path to file where signature will be stored: my_sign.sig
Please enter user certificate ID: 0101

File path: 		my_file.odt
File size: 		8256
Created date: 		2019-02-26 16:58:16
Modified date: 		2019-02-26 16:58:16
Checksum: 		287495846084353A1404776EFCBA61F0DC6FA4ACAA6F9B78DFBA6F023085ABC (GOST R 34.11-2012) 
Certificate CN: 	Иванов Иван Иванович
Certificate serial: 	120032DA694AB3BC3711A2AA3500000032DA69
Continue? [y/n or yes/no]: y
Success

Проверка подписи

Команда:

$ PKIClientCli pkcs7verify --signature <файл>

Основные опции:

--signature — путь к файлу с подписью (обязательный);

--path — путь к файлу с откреплённой подписью;

--crldir — путь к каталогу с файлами CRL (--verifychain 1 также должен быть указан);

--verifychain — проверить цепочку сертификатов и CRL, 0 — не проверять (по умолчанию), 1 — проверять. Сертификат CA должен быть загружен как доверенный.

Проверка подписи:

$ PKIClientCli pkcs7verify --signature out.sig
Success

Проверка откреплённой подписи:

$ PKIClientCli pkcs7verify --signature my_sign.sig --path my_file.odt
Success

Хэш-функция

Команда:

PKIClientCli digest --path <файл> --mechanism <файл>

Основные опции:

--path — путь к файлу (обязательный);

--mechanism — механизм хэш-функции,полный список можно получить командой listm (обязательный).

Примеры:

$ PKIClientCli digest --path my_file.odt --mechanism GOSTR3411_2012_256 
my_file.odt : A5BB085BB54D5A6A7A0E0A98680024F4E9FDDEFFCD4050DBFA53946F4370D124 : GOSTR3411_2012_256
Success
$ PKIClientCli digest --path my_file.odt --mechanism SHA256
my_file.odt : 61A620869E4AF332A8B11EBDF50D103CAEA2222DEA5AF72D39054544B9C8E25F : SHA256
Success

КриптоПро

Подробнее о КриптоПро: КриптоПро

Примечание: Проверена работоспособность на версии КриптоПро: КриптоПро CSP 4.0 R4

Электронный идентификатор ESMART Token ГОСТ поддерживается в СКЗИ «КриптоПро CSP» в качестве ключевого носителя.

Для версии КриптоПро: КриптоПро CSP 4.0 R4, необходимо установить пакет поддержки карт Esmart (из архива КриптоПро):

# apt-get install cprocsp-rdr-esmart*

Для версии КриптоПро: КриптоПро CSP 5.0, необходимо скачать «Модуль поддержки КриптоПро CSP 5.x для Linux» с https://esmart.ru/download/, распаковать архив и установить пакет поддержки карт Esmart (из скаченного архива - для 64-битной версии ОС):

# apt-get install ESMARTTokenGOST-cryptoproV5*86_64.rpm

Управление считывателями

Проверка видимости токена:

$ list_pcsc
ACS ACR38U-CCID 00 00

Просмотр доступных считывателей:

$ csptest -enum -info -type PP_ENUMREADERS | iconv -f cp1251
CSP (Type:80) v4.0.9017 KC1 Release Ver:4.0.9944 OS:Linux CPU:AMD64 FastCode:READY:AVX.
CryptAcquireContext succeeded.HCRYPTPROV: 30405923
GetProvParam(...PP_ENUMREADERS...) until it returns false
  Len    Byte  NickName/Name
_____________________________
 0x012a  0x72  ACS ACR 38U-CCID 00 00
               ACS ACR38U-CCID 00 00
 0x012a  0x58  FLASH
               FLASH
 0x012a  0x18  HDIMAGE
               Структура дискеты на жестком диске

Инициализация считывателя ACS ACR38U-CCID 00 00 (требуется, если считыватель есть в списке видимых считывателей и отсутствует в списке настроенных), где в параметре -add указано имя, которое было получено при просмотре доступных считывателей, в параметре -name указано удобное для обращения к считывателю имя, например, Esmart (под правами root):

# cpconfig -hardware reader -add 'ACS ACR 38U-CCID 00 00' -name 'Esmart'
Adding new reader:
Nick name: ACS ACR 38U-CCID 00 00
Name device: Esmart
Succeeded, code:0x0
Примечание: Если получаете ошибку:
-bash: cpconfig: команда не найдена

Выполните:

export PATH="$(/bin/ls -d /opt/cprocsp/{s,}bin/*|tr '\n' ':')$PATH"
Для пользователя root будет действовать до перезагрузки


Создание контейнера

Создание контейнера на токене/смарт-карте:

$ csptest -keyset -provtype 80 -newkeyset -cont '\\.\ACS ACR 38U-CCID 00 00\esmart'                    
CSP (Type:80) v4.0.9017 KC1 Release Ver:4.0.9944 OS:Linux CPU:AMD64 FastCode:READY:AVX.
AcquireContext: OK. HCRYPTPROV: 9348387
GetProvParam(PP_NAME): Crypto-Pro GOST R 34.10-2012 KC1 CSP
Container name: "esmart"
Signature key is not available.
Attempting to create a signature key...
a signature key created.
Exchange key is not available.
Attempting to create an exchange key...
an exchange key created.
Keys in container:
  signature key
  exchange key
Extensions:
  OID: 1.2.643.2.2.37.3.9

  OID: 1.2.643.2.2.37.3.10
Total: SYS: 0,150 sec USR: 0,290 sec UTC: 51,860 sec
[ErrorCode: 0x00000000]

При установленном пакете cprocsp-rdr-gui-gtk будет показано графическое окно, где будет предложено перемещать указатель мыши или нажимать клавиши:

Генерация случайной последовательности

Примечание: Если такой пакет не установлен, будет предложено ввести любые символы с клавиатуры.


После этого необходимо предъявить PIN-код пользователя.

После указания PIN-кода снова будет предложено перемещать указатель мыши.

Примечание: Если используется КриптоПро 5, можно будет выбрать способ создания контейнера.

Создание неизвлекаемого контейнера:

Создание неизвлекаемого контейнера

В этом случае будет использована встроенная криптография носителя.

Создание контейнера КриптоПро:

Создание обычного контейнера

В этом случае будет использована криптография КриптоПро


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

$ csptest -keyset -enum_cont -fqcn -verifyc | iconv -f cp1251
CSP (Type:80) v5.0.10001 KC1 Release Ver:5.0.11319 OS:Linux CPU:AMD64 FastCode:READY:AVX.
AcquireContext: OK. HCRYPTPROV: 33752963
\\.\ACS ACR38U-CCID 00 00\esmart
\\.\ACS ACR38U-CCID 00 00\new_esmart
\\.\HDIMAGE\test
OK.
Total: SYS: 0,020 sec USR: 0,100 sec UTC: 4,310 sec
[ErrorCode: 0x00000000]

Просмотр подробной информации о контейнере:

$ csptestf -keyset -container '\\.\ACS ACR 38U-CCID 00 00\esmart' -info

Удалить контейнер можно с помощью команды:

$ csptestf -keyset -deletekeyset -cont '\\.\ACS ACR 38U-CCID 00 00\esmart'

Управление сертификатами

Создание запроса на сертификат

Создание запроса на получение сертификата средствами КриптоПро:

$ cryptcp -creatrqst -dn "список имён полей" -cont 'путь к контейнеру' <название_файла>.csr

Например:

$ cryptcp -creatrqst \
-dn "E=ivanov@mail.mail,CN=Иванов Иван Иванович,SN=Иванов,G=Иван Иванович,C=RU,L=Калининград,ST=39 Калининградская обл.,street=Пр-т Победы 14 кв.3,INN=102301111222,SNILS=11223344556" \
-provtype 80 -nokeygen \
-cont '\\.\ACS ACR 38U-CCID 00 00\esmart' \
-certusage "1.3.6.1.5.5.7.3.4,1.3.6.1.5.5.7.3.2" esmart.req
CryptCP 4.0 (c) "Crypto-Pro", 2002-2017.
Command prompt Utility for file signature and encryption.
Request is saved in file.
[ReturnCode: 0]

Запрос на сертификат необходимо подписать в аккредитованном удостоверяющем центре.

Добавление (запись) сертификатов

Добавление сертификата, без привязки к ключам (только проверка ЭЦП):

$ certmgr -inst -file cert.cer

Ассоциировать сертификат с контейнером, сертификат попадет в пользовательское хранилище My:

$ certmgr -inst -file certnew.cer -store uMy -cont '\\.\ACS ACR 38U-CCID 00 00\esmart' 
Certmgr 1.1 (c) "CryptoPro",  2007-2010.
program for managing certificates, CRLs and stores

Installing: 
=============================================================================
1-------
Issuer              : E=support@cryptopro.ru, C=RU, L=Moscow, O=CRYPTO-PRO LLC, CN=CRYPTO-PRO Test Center 2
Subject             : E=ivanov@mail.mail, CN=Иванов Иван Иванович, SN=Иванов, G=Иван Иванович, C=RU, S=39 Калининградская обл., L=Калининград, STREET=Пр-т Победы 14 кв.3, INN=102301111222, SNILS=11223344556
Serial              : 0x120032E646B1C251C57B05D32900000032E646
SHA1 Hash           : a7bf3ec0013cd2086ff05476640cc14ede74f2cd
SubjKeyID           : e5e8b4261993c39de30b268eff790e32e2e7e7ed
Signature Algorithm : ГОСТ Р 34.11/34.10-2001
PublicKey Algorithm : ГОСТ Р 34.10-2012 (512 bits)
Not valid before    : 27/02/2019  12:24:38 UTC
Not valid after     : 27/05/2019  12:34:38 UTC
PrivateKey Link     : No                  
CA cert URL         : http://testca.cryptopro.ru/CertEnroll/test-ca-2014_CRYPTO-PRO%20Test%20Center%202.crt
OCSP URL            : http://testca.cryptopro.ru/ocsp/ocsp.srf
CDP                 : http://testca.cryptopro.ru/CertEnroll/CRYPTO-PRO%20Test%20Center%202.crl
Extended Key Usage  : 1.3.6.1.5.5.7.3.4
                      1.3.6.1.5.5.7.3.2
=============================================================================
[ErrorCode: 0x00000000]

Запись сертификата УЦ:

# /opt/cprocsp/bin/amd64/certmgr -inst -file certne_ucw.cer -store uRoot
Certmgr 1.1 (c) "CryptoPro",  2007-2010.
program for managing certificates, CRLs and stores

Installing: 
=============================================================================
1-------
Issuer              : E=support@cryptopro.ru, C=RU, L=Moscow, O=CRYPTO-PRO LLC, CN=CRYPTO-PRO Test Center 2
Subject             : E=support@cryptopro.ru, C=RU, L=Moscow, O=CRYPTO-PRO LLC, CN=CRYPTO-PRO Test Center 2
Serial              : 0x2B6E3351FD6EB2AD48200203CB5BA141
SHA1 Hash           : 046255290b0eb1cdd1797d9ab8c81f699e3687f3
SubjKeyID           : 15317cb08d1ade66d7159c4952971724b9017a83
Signature Algorithm : ГОСТ Р 34.11/34.10-2001
PublicKey Algorithm : ГОСТ Р 34.10-2001 (512 bits)
Not valid before    : 05/08/2014  13:44:24 UTC
Not valid after     : 05/08/2019  13:54:03 UTC
PrivateKey Link     : No                  
=============================================================================

[ErrorCode: 0x00000000]

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

Просмотр сертификатов:

$ certmgr -list

Просмотр сертификатов в локальном хранилище uMy:

$ certmgr -list -store uMy

Просмотр сертификатов в контейнере:

$ certmgr -list -container '\\.\ACS ACR 38U-CCID 00 00\esmart'

Просмотр корневых сертификатов:

$ certmgr -list -store uRoot

Создание и проверка подписи

Для создания электронной подписи файла необходимо указать сертификат и имя подписываемого файла:

$ cryptcp -sign -dn E=ivanov@mail.mail -der zayavlenie.pdf 
CryptCP 4.0 (c) "Crypto-Pro", 2002-2017.
Command prompt Utility for file signature and encryption.

Certificate chains are checked.
Folder './':
zayavlenie.pdf... Signing the data...

Signed message is created.
[ReturnCode: 0]

На выходе появится файл zayavlenie.pdf.sig, содержащий как сам подписываемый файл, так и электронную подпись. Для проверки прикреплённой подписи выполните команду:

$ cryptcp -verify zayavlenie.pdf.sig
CryptCP 4.0 (c) "Crypto-Pro", 2002-2017.
Command prompt Utility for file signature and encryption.
RDN:ivanov@mail.mail
Valid from 27.02.2019 11:06:42 to 27.05.2019 11:16:42

Certificate chains are checked.
Folder './':
zayavlenie.pdf.sig... Signature verifying...     
Signer: ivanov@mail.mail

 Signature's verified.
[ReturnCode: 0]

Для извлечения файла с данными из файла электронной подписи необходимо указать имя файла, в который будут извлечены данные, в конце команды проверки подписи:

$ cryptcp -verify zayavlenie.pdf.sig zayavlenie.pdf

Для создания откреплённой (detached) подписи необходимо заменить ключ -sign на -signf:

$ cryptcp -signf -dn E=ivanov@mail.mail -der zayavlenie.pdf

Проверка откреплённой подписи:

$ cryptcp -vsignf zayavlenie.pdf