pkcs11-gereedschap

pkcs11-tool is een hulpprogramma dat deel uitmaakt van het OpenSC project dat gebruikt kan worden om sleutels op een PKCS#11 apparaat te beheren.

Je moet de locatie van de PKCS#11 module die je wilt gebruiken doorgeven met de --module optie:

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

Vervang /usr/lib/nitrokey/libnethsm_pkcs11.so door het pad waar de NetHSM PKCS#11 module zich bevindt.

Je kunt testen of de module werkt met het volgende commando:

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

Je zou zoiets als dit moeten zien:

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

Lijst Slots

De informatie over de beschikbare slots. De vermelde slots zijn afhankelijk van de configuratie van de slots array in het configuratiebestand p11nethsm.conf. Raadpleeg het hoofdstuk Configuratie <pkcs11-setup.html#Configuration>`_ voor meer informatie over de configuratie van slots.

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

Notitie

Als uw configuratie meer dan één sleuf ondersteunt, kan het nodig zijn om de optie --slot <arg> toe te voegen in pkcs11-tool commando’s om de juiste sleuf te gebruiken.

Sleutel-ID’s

pkcs11-tool gebruikt een hexadecimale sleutel-ID om sleutels te identificeren. NetHSM gebruikt alfanumerieke tekenreeksen als sleutel-ID. De PKCS#11-module van NetHSM gebruikt de ruwe bytewaarden van de tekenreeks om de PKCS#11 ID te vormen. Je kunt de hexadecimale versie van een NetHSM-sleutel krijgen met xxd:

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

Je kunt deze hexadecimale waarde dan doorgeven aan pkcs11-tool met de optie --id.

Een sleutel genereren

Genereer een sleutelpaar en sla het op in de NetHSM.

Notitie

De sleuf die je wilt gebruiken moet een andministrator gebruiker hebben in het configuratiebestand. Anders krijg je een CKR_USER_NOT_LOGGED_IN foutmelding.

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

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

Lijst Sleutels

Maak een lijst van de sleutels die zijn opgeslagen op de 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

Sleutels lezen

De openbare sleutel lezen van een sleutelpaar dat is opgeslagen op de NetHSM. Het is niet mogelijk om privésleutels van de NetHSM te lezen.

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

Het certificaat van het sleutelpaar kan met hetzelfde commando worden gelezen door de optie --type te veranderen in cert.

Notitie

De uitvoer is in DER-formaat.

Schrijf toetsen

Schrijf een privésleutel op de NetHSM. De openbare sleutel wordt automatisch afgeleid van de privésleutel.

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

Het certificaat van het sleutelpaar kan met hetzelfde commando worden geschreven door de optie --type te veranderen in cert.

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

Versleutel

Encryptie van gegevens wordt alleen ondersteund voor AES-sleutels.

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

Notitie

Je moet de invoergegevens handmatig opvullen tot de blokgrootte van de AES-sleutel.

Ontcijfer

AES

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

RSA

Je kunt gegevens versleutelen met de openbare sleutel en ontsleutelen met de privésleutel.

# 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

Teken

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

Om de handtekening te verifiëren met 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