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