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ēgu identifikatori un etiķetes

NetHSM kā atslēgas ID izmanto burtu un ciparu virknes. NetHSM PKCS#11 modulis rāda atslēgas ID NetHSM kā atslēgas PKCS#11 marķējumu un tās sešciparu atveidojumu kā PKCS#11 ID. * pkcs11-tool* izmanto sešciparu atslēgas ID, lai identificētu atslēgas, tādējādi var izmantot ģenerēto PKCS#11 ID.

Svarīgi

NetHSM atslēgas ID ir burtu un ciparu virknes, tāpēc ir atļautas tikai rakstzīmes A-Z, a-z un 0-9. Nederīgas rakstzīmes, kas nodotas ar PKCS#11 etiķetēm, izraisīs PKCS11 function C_GenerateKeyPair failed: rv = CKR_FUNCTION_FAILED (0x6) kļūdu.

NetHSM atslēgas ID sešpadsmitzīmīgo 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