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¶
pkcs11-tool använder ett hexadecimalt nyckel-ID för att identifiera nycklar. NetHSM använder alfanumeriska strängar som nyckel-ID. NetHSM:s PKCS#11-modul använder de råa bytevärdena i strängen för att bilda PKCS#11-ID. Du kan få den hexadecimala versionen av en NetHSM-nyckel 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
Den slot du vill använda måste ha en andministrator-användare i konfigurationsfilen. Annars kommer du att få ett CKR_USER_NOT_LOGGED_IN-fel.
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