pkcs11-instruments

pkcs11-tool ir rīks, kas ir daļa no OpenSC projekta un ko var izmantot, lai pārvaldītu PKCS#11 ierīces atslēgas.

Jums ir jānorāda PKCS#11 moduļa atrašanās vieta, kas jāizmanto ar --module opciju:

pkcs11-tool --module /usr/lib/nitrokey/libnethsm_pkcs11.so

Aizstāt /usr/lib/nitrokey/libnethsm_pkcs11.so ar ceļu, kurā atrodas NetHSM PKCS#11 modulis.

Ar nākamo komandu varat pārbaudīt, vai modulis darbojas:

pkcs11-tool --module /usr/lib/nitrokey/libnethsm_pkcs11.so --show-info

Jums vajadzētu redzēt kaut ko līdzīgu šim:

Cryptoki version 2.40
Manufacturer     Nitrokey
Library          Nitrokey PKCS#11 library (ver 0.1)

Saraksta spēļu automāti

Informācija par pieejamajiem laika nišām. Uzskaitītie laika nišas ir atkarīgi no laika nišu masīva konfigurācijas p11nethsm.conf konfigurācijas failā. Lai uzzinātu vairāk par slotu konfigurāciju, skatiet nodaļu Konfigurācija.

pkcs11-tool --module /usr/lib/nitrokey/libnethsm_pkcs11.so --list-slots
Slot 0 (0x0): NetHSM
  token label        : LocalHSM
  token manufacturer : Nitrokey GmbH
  token model        : NetHSM
  token flags        : rng, token initialized, PIN initialized
  hardware version   : 0.1
  firmware version   : 0.1
  serial num         : unknown
  pin min/max        : 0/0

Piezīme

Ja jūsu konfigurācija atbalsta vairāk nekā vienu slotu, lai izmantotu pareizo slotu, pkcs11-tool komandās, iespējams, būs jāpievieno --slot <arg> opcija.

Atslēgas identifikatori

pkcs11 rīks izmanto heksadecimālo atslēgas ID, lai identificētu atslēgas. NetHSM kā atslēgas ID izmanto burtciparu virknes. NetHSM PKCS#11 modulis PKCS#11 ID veidošanai izmanto neapstrādātas virknes baitu vērtības. NetHSM atslēgas heksadecimālo versiju var iegūt, izmantojot xxd:

echo -n "MyKey" | xxd -p
4d794b6579

Pēc tam šo sešciparu vērtību var nodot pkcs11 rīkam, izmantojot --id opciju.

Izveidot atslēgu

Izveidojiet atslēgu pāri un saglabājiet to NetHSM.

Piezīme

Slotam, kuru vēlaties izmantot, konfigurācijas failā ir jābūt lietotājam andministrator. Pretējā gadījumā jūs saņemsiet CKR_USER_NOT_LOGGED_IN kļūdu.

RSA

pkcs11-tool --module /usr/lib/nitrokey/libnethsm_pkcs11.so --keypairgen --key-type rsa:2048 --label "rsakey"

ECDSA

pkcs11-tool --module /usr/lib/nitrokey/libnethsm_pkcs11.so --keypairgen --key-type EC:prime256v1 --label "eckey"

AES/Generic

pkcs11-tool --module /usr/lib/nitrokey/libnethsm_pkcs11.so --keygen --key-type AES:256 --label "aeskey"

Saraksta atslēgas

Uzskaitiet NetHSM saglabātās atslēgas.

pkcs11-tool --module /usr/lib/nitrokey/libnethsm_pkcs11.so --list-objects
Using slot 0 with a present token (0x0)
Public Key Object; RSA 2048 bits
  label:      rsakey
  ID:         7273616b6579
  Usage:      none
  Access:     none
Private Key Object; RSA
  label:      rsakey
  ID:         7273616b6579
  Usage:      decrypt, sign
  Access:     sensitive, always sensitive, never extractable

Lasīt atslēgas

NetHSM saglabātā atslēgu pāra publiskās atslēgas nolasīšana. No NetHSM nav iespējams nolasīt privātās atslēgas.

pkcs11-tool --module /usr/lib/nitrokey/libnethsm_pkcs11.so --read-object --type pubkey --label rsakey --output-file rsakey.pub

Atslēgu pāra sertifikātu var nolasīt ar to pašu komandu, mainot --type opciju uz cert.

Piezīme

Izvades rezultāts ir DER formātā.

Rakstīt atslēgas

Ierakstiet privāto atslēgu NetHSM. Publiskā atslēga tiek automātiski atvasināta no privātās atslēgas.

pkcs11-tool --module /usr/lib/nitrokey/libnethsm_pkcs11.so --write-object rsakey.key --type privkey --id 7273616b6579

Atslēgu pāra sertifikātu var ierakstīt ar to pašu komandu, mainot --type opciju uz cert.

pkcs11-tool --module /usr/lib/nitrokey/libnethsm_pkcs11.so --write-object rsakey.crt --type cert --id 7273616b6579

Šifrēt

Datu šifrēšana tiek atbalstīta tikai AES atslēgām.

echo "NetHSM rulez!  " | pkcs11-tool --module /usr/lib/nitrokey/libnethsm_pkcs11.so --encrypt --id 6165736b6579 --mechanism AES_CBC --output-file encrypted.txt

Piezīme

Ievades dati ir manuāli jāaizpilda līdz AES atslēgas bloka lielumam.

Atšifrējiet

AES

pkcs11-tool --module /usr/lib/nitrokey/libnethsm_pkcs11.so --decrypt --id 6165736b6579 --mechanism AES_CBC --input-file encrypted.txt

RSA

Datus var šifrēt ar publisko atslēgu un atšifrēt ar privāto atslēgu.

# get the public key first
pkcs11-tool --module /usr/lib/nitrokey/libnethsm_pkcs11.so --read-object --type pubkey --id 7273616b6579 --output-file public.der

# encrypt some data with OpenSSL
echo 'NetHSM rulez!NetHSM rulez!' | openssl pkeyutl -encrypt -pubin -inkey public.der -keyform DER -out data.crypt
pkcs11-tool --module /usr/lib/nitrokey/libnethsm_pkcs11.so --decrypt --id 7273616b6579 --mechanism RSA-PKCS --input-file data.crypt

Pierakstīties

echo "NetHSM rulez!" | openssl dgst -sha256 -binary |  pkcs11-tool --module /usr/lib/nitrokey/libnethsm_pkcs11.so --sign --label rsakey --mechanism RSA-PKCS-PSS --hash-algorithm SHA256 --output-file data.sig --signature-format openssl

Paraksta pārbaude ar OpenSSL:

# get the public key
pkcs11-tool --module /usr/lib/nitrokey/libnethsm_pkcs11.so --read-object --type pubkey --label rsakey --output-file public.der

echo 'NetHSM rulez!' | openssl dgst -keyform DER -verify public.der -sha256 -sigopt rsa_padding_mode:pss -sigopt rsa_pss_saltlen:-1 -signature data.sig