pkcs11-orodje#

pkcs11-tool je orodje, ki je del projekta OpenSC in se lahko uporablja za upravljanje ključev na napravi PKCS#11.

Lokacijo modula PKCS#11, ki ga želite uporabiti, morate posredovati z opcijo --module:

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

Zamenjajte /usr/lib/nitrokey/libnethsm_pkcs11.so s potjo, kjer se nahaja modul NetHSM PKCS#11.

Z naslednjim ukazom lahko preverite, ali modul deluje:

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

Videli bi morali videti nekaj takega:

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

Seznam igralnih mest#

Informacije o razpoložljivih režah. Naštete reže so odvisne od konfiguracije polja rež v konfiguracijski datoteki p11nethsm.conf. Če želite izvedeti več o konfiguraciji rež, si oglejte poglavje Konfiguracija.

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

Opomba

Če vaša konfiguracija podpira več kot eno režo, boste morda morali v ukaze pkcs11-tool dodati možnost --slot <arg>, da boste uporabili pravo režo.

Ključni identifikatorji#

orodje pkcs11-tool za identifikacijo ključev uporablja heksadecimalni ID ključa. NetHSM kot ID ključa uporablja alfanumerične nize. Modul PKCS#11 programa NetHSM za oblikovanje ID PKCS#11 uporablja surove vrednosti bajtov niza. Šestnajstiško različico ključa NetHSM lahko dobite s xxd:

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

To šestnajstiško vrednost lahko nato posredujete orodju pkcs11-tool z možnostjo --id.

Ustvarjanje ključa#

Ustvarite par ključev in ga shranite v NetHSM.

Opomba

V reži, ki jo želite uporabiti, mora biti v konfiguracijski datoteki uporabnik andministrator. V nasprotnem primeru boste prejeli napako CKR_USER_NOT_LOGGED_IN.

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/splošno#

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

Seznam ključev#

Seznam ključev, shranjenih v NetHSM.

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

Preberi ključe#

Preberite javni ključ para ključev, ki je shranjen v NetHSM. Zasebnih ključev ni mogoče prebrati iz naprave NetHSM.

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

Potrdilo para ključev lahko preberete z istim ukazom, če spremenite možnost --type v cert.

Opomba

Rezultat je v obliki DER.

Pisanje ključev#

Zapišite zasebni ključ v NetHSM. Javni ključ se samodejno izpelje iz zasebnega ključa.

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

Potrdilo para ključev lahko zapišete z istim ukazom tako, da možnost --type spremenite v cert.

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

Šifriranje#

Šifriranje podatkov je podprto samo za ključe AES.

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

Opomba

Vhodne podatke morate ročno prilagoditi velikosti bloka ključa AES.

Dešifriranje#

AES#

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

RSA#

Podatke lahko šifrirate z javnim ključem in dešifrirate z zasebnim ključem.

# 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

Znak#

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

Preverjanje podpisa s programom 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