JaCarta/ГОСТ

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


  • Токен: JaCarta-2 ГОСТ
   библиотека libjcPKCS11-2.so.2.4.0 обеспечивает взаимодействие с криптопровайдером токена по стандарту PKCS#11;
   криптопровайдер токена осуществляет функции подписи секретным ключом передаваемых ему данных; секретный ключ при этом не покидает пределов токена;

Установить утилиту для работы с аппаратными токенами Jacarta ГОСТ и библиотеку libjcPKCS11:

# apt-get install jacarta-tools jcPKCS11-2

Подключить USB-токен к компьютеру.

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

$ pkcs11-tool -L --module /usr/lib64/pkcs11/libjcPKCS11-2.so.2.4.0
Available slots:
Slot 0 (0x1ffff): Aladdin R.D. JaCarta [SCR Interface] 00 00
  token label        : JaCarta-2 GOST
  token manufacturer : Aladdin R.D.
  token model        : JaCarta GOST 2.0
  token flags        : login required, rng, token initialized, PIN initialized, readonly, other flags=0x800
  hardware version   : 1.0
  firmware version   : 2.5
  serial num         : 4E3900214083304C
  pin min/max        : 6/32
Slot 1 (0x2ffff): Aladdin R.D. JaCarta [SCR Interface] 00 00
  token label        : JaCarta GOST
  token manufacturer : Aladdin R.D.
  token model        : JaCarta Laser
  token flags        : login required, token initialized, PIN initialized, readonly
  hardware version   : 1.0
  firmware version   : 1.0
  serial num         : 4E3900214083304C
  pin min/max        : 4/10
Slot 2 (0x3ffff): 
  (empty)
Slot 3 (0x4ffff): 
  (empty)

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

$ pkcs11-tool -Ol --module /usr/lib64/pkcs11/libjcPKCS11-2.so.2.4.0
Using slot 0 with a present token (0x1ffff)
Logging in to "JaCarta-2 GOST".
Please enter User PIN: 
Certificate Object; type = X.509 cert
  label:      
  subject:    DN: CN=\xd0\x98\xd0\xb2\xd0\xb0\xd0\xbd\xd0\xbe\xd0\xb2 \xd0\x98\xd0\xb2\xd0\xb0\xd0\xbd \xd0\x98\xd0\xb2\xd0\xb0\xd0\xbd\xd0\xbe\xd0\xb2\xd0\xb8\xd1\x87, C=RU, L=\xD0\xB3. \xD0\x9A\xD0\xB0\xD0\xBB\xD0\xB8\xD0\xBD\xD0\xB8\xD0\xBD\xD0\xB3\xD1\x80\xD0\xB0\xD0\xB4/street=\xd0\x9f\xd1\x80-\xd1\x82 \xd0\x9f\xd0\xbe\xd0\xb1\xd0\xb5\xd0\xb4\xd1\x8b 14 \xD0\xBA\xD0\xB2. 3, emailAddress=ivanov@mail.mail
  ID:         0101
Public Key Object; GOSTR3410 
  PARAMS OID: 06072a850302022301
  VALUE:      5c6a95785381c6e97f188b5c1bda5b452984c57846b6439455847b6852078138
              0cf4b6e0bae04ce05234e18c608613a839945056875fd3f38fb32ae3130bc705
  label:      key
  ID:         0123
  Usage:      verify
Private Key Object; GOSTR3410 
  PARAMS OID: 06072a850302022301
  label:      key
  ID:         0123
  Usage:      sign
Public Key Object; RSA 0 bits
  label:      
  ID:         56504b4f5f4944
  Usage:      verify, wrap


Список объектов в определенном слоте:

$ pkcs11-tool -Ol --slot-index 0 --module /usr/lib64/pkcs11/libjcPKCS11-2.so.2.4.0

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

$ pkcs11-tool --module /usr/lib64/pkcs11/libjcPKCS11-2.so.2.4.0 --login --pin 1234567890 --keypairgen --key-type GOSTR3410:A --id 0101 --label "my key"
Using slot 0 with a present token (0x1ffff)
Key pair generated:
Private Key Object; GOSTR3410 
  PARAMS OID: 06072a850302022301
  label:      my key
  ID:         0101
  Usage:      sign


Public Key Object; GOSTR3410 
  PARAMS OID: 06072a850302022301
  VALUE:      5c6a95785381c6e97f188b5c1bda5b452984c57846b6439455847b6852078138
              0cf4b6e0bae04ce05234e18c608613a839945056875fd3f38fb32ae3130bc705
  label:      my key
  ID:         0101

  Usage:      verify

Формирование запроса на сертификат:

$ jc_certreq --module /usr/lib64/pkcs11/libjcPKCS11-2.so.2.4.0 -o csr5.der \
  --pin=1234567890 \
  --dn "INN=391506390000" \
  --dn "SNILS=11223344556" \
  --dn "emailAddress=ivanov@mail.mail" \
  --dn "CN=Иванов Иван Иванович" \
  --dn "SN=Иванов" \
  --dn "2.5.4.42=Иван Иванович" \
  --dn "C=RU" \
  --dn "L=Калининград" \
  --dn "ST=39 Калининградская обл." \
  --dn "street=Пр-т Победы 14 кв.3" \
  --ext "keyUsage=critical,digitalSignature,nonRepudiation,keyEncipherment,dataEncipherment" \
  --ext "extendedKeyUsage=clientAuth,emailProtection,1.2.643.2.2.34.6,1.2.643.3.7.0.1.12,1.2.643.3.7.8.1" \
  --ext "1.2.643.100.111=ASN1:UTF8String:JaCarta-2 GOST"
Trying to load /usr/lib64/pkcs11/libjcPKCS11-2.so.2.4.0
jcPKCS11-2 library initialized.
Applet GOST2 found in slot 131071
Open session: OK
Login: OK
Key 1:
  Label: test
  ID: 0123
Key 2:
  Label: my key
  ID: 0101
Key 3:
  Label: 
  ID: 56504b4f5f4944
Please, select public key: 2
Create CSR: OK
Write CSR to file: OK

Можно использовать OID для формирования запроса на сертификат:

$ jc_certreq --module /usr/lib64/pkcs11/libjcPKCS11-2.so.2.4.0 -o csr.der \
  --pin=1234567890 \
  --dn "1.2.643.3.131.1.1=391506390000" \
  --dn "1.2.643.100.3=11223344556" \
  --dn "1.2.840.113549.1.9.1=ivanov@mail.mail" \
  --dn "2.5.4.3=Иванов Иван Иванович" \
  --dn "2.5.4.4=Иванов" \
  --dn "2.5.4.42=Иван Иванович" \
  --dn "2.5.4.6=RU" \
  --dn "2.5.4.7=Калининград" \
  --dn "2.5.4.8=39 Калининградская обл." \
  --dn "2.5.4.9=Пр-т Победы 14 кв.3" \
  --ext "keyUsage=critical,digitalSignature,nonRepudiation,keyEncipherment,dataEncipherment" \
  --ext "extendedKeyUsage=1.3.6.1.5.5.7.3.2,1.3.6.1.5.5.7.3.4,1.2.643.2.2.34.6,1.2.643.3.7.0.1.12,1.2.643.3.7.8.1" \
  --ext "1.2.643.100.111=ASN1:UTF8String:JaCarta-2 GOST"

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

$ pkcs11-tool  --module /usr/lib64/pkcs11/libjcPKCS11-2.so.2.4.0 --pin 1234567890 --write-object ./cert.der --type cert --id 0101
Using slot 0 with a present token (0x1ffff)
Created certificate:
Certificate Object; type = X.509 cert
  label:      
  subject:    DN: CN=\xd0\x98\xd0\xb2\xd0\xb0\xd0\xbd\xd0\xbe\xd0\xb2 \xd0\x98\xd0\xb2\xd0\xb0\xd0\xbd \xd0\x98\xd0\xb2\xd0\xb0\xd0\xbd\xd0\xbe\xd0\xb2\xd0\xb8\xd1\x87, C=RU, L=\xD0\xB3. \xD0\x9A\xD0\xB0\xD0\xBB\xD0\xB8\xD0\xBD\xD0\xB8\xD0\xBD\xD0\xB3\xD1\x80\xD0\xB0\xD0\xB4/street=\xd0\x9f\xd1\x80-\xd1\x82 \xd0\x9f\xd0\xbe\xd0\xb1\xd0\xb5\xd0\xb4\xd1\x8b 14 \xD0\xBA\xD0\xB2. 3, emailAddress=ivanov@mail.mail
  ID:         0101