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