pkcs11-verktyg

pkcs11-tool är ett verktyg som ingår i projektet OpenSC och som kan användas för att hantera nycklar på en PKCS#11-enhet.

Du måste ange platsen för den PKCS#11-modul som ska användas med alternativet --module:

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

Ersätt /usr/lib/nitrokey/libnethsm_pkcs11.so med sökvägen där NetHSM PKCS#11-modulen finns.

Du kan testa om modulen fungerar med nästa kommando:

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

Du bör se något i stil med detta:

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

Lista över spelautomater

Information om tillgängliga slots. De slots som visas i listan beror på konfigurationen av slots-arrayen i konfigurationsfilen p11nethsm.conf. Mer information om konfigurationen av slots finns i kapitlet Konfiguration.

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

Observera

Om din konfiguration stöder mer än en kortplats kan du behöva lägga till alternativet --slot <arg> i pkcs11-tool-kommandon för att använda rätt kortplats.

Nyckel-ID:n och etiketter

NetHSM använder alfanumeriska strängar som nyckel-ID. NetHSM PKCS#11-modulen visar nyckel-ID:t på NetHSM som nyckelns PKCS#11-etikett och en hexadecimal representation av den som PKCS#11-ID. Verktyget pkcs11-tool använder ett hexadecimalt nyckel-ID för att identifiera nycklar och kan därför använda det genererade PKCS#11-ID:t.

Viktigt

Nyckel-ID:n på NetHSM är alfanumeriska strängar, vilket innebär att endast tecknen A-Z, a-z och 0-9 är tillåtna. Ogiltiga tecken som skickas genom PKCS#11-etiketter kommer att resultera i ett PKCS11 function C_GenerateKeyPair failed: rv = CKR_FUNCTION_FAILED (0x6)-fel.

Du kan få den hexadecimala versionen av ett NetHSM-nyckel-ID med xxd:

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

Du kan sedan skicka detta hexadecimala värde till pkcs11-tool med alternativet --id.

Skapa en nyckel

Generera ett nyckelpar och lagra det på NetHSM.

Observera

The slot you want to use needs to have an administrator user in the configuration file. Otherwise you will get a CKR_USER_NOT_LOGGED_IN error.

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/Generisk

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

Lista nycklar

Lista de nycklar som finns lagrade på 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

Läs nycklar

Läs den publika nyckeln i ett nyckelpar som lagras på NetHSM. Det är inte möjligt att läsa privata nycklar från NetHSM.

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

Certifikatet för nyckelparet kan läsas med samma kommando genom att ändra alternativet --type till cert.

Observera

Utdata är i DER-format.

Skriv nycklar

Skriv en privat nyckel på NetHSM. Den offentliga nyckeln härleds automatiskt från den privata nyckeln.

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

Certifikatet för nyckelparet kan skrivas med samma kommando genom att ändra alternativet --type till cert.

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

Kryptera

Kryptering av data stöds endast för AES-nycklar.

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

Observera

Du måste manuellt fylla i indata till AES-nyckelns blockstorlek.

Avkryptera

AES

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

RSA

Du kan kryptera data med den offentliga nyckeln och dekryptera dem med den privata nyckeln.

# 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

Skylt

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

Verifiera signaturen med 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