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