pkcs11-tool¶
pkcs11-tool je nástroj, ktorý je súčasťou projektu OpenSC a ktorý možno použiť na správu kľúčov na zariadení PKCS#11.
Umiestnenie modulu PKCS#11, ktorý chcete použiť, musíte odovzdať pomocou možnosti --module
:
pkcs11-tool --module /usr/lib/nitrokey/libnethsm_pkcs11.so
Nahraďte /usr/lib/nitrokey/libnethsm_pkcs11.so
cestou, kde sa nachádza modul NetHSM PKCS#11.
Ďalším príkazom môžete otestovať, či modul funguje:
pkcs11-tool --module /usr/lib/nitrokey/libnethsm_pkcs11.so --show-info
Mali by ste vidieť niečo podobné:
Cryptoki version 2.40
Manufacturer Nitrokey
Library Nitrokey PKCS#11 library (ver 0.1)
Zoznam slotov¶
Informácie o dostupných slotoch. Uvedené sloty závisia od konfigurácie poľa slotov v konfiguračnom súbore p11nethsm.conf. Viac informácií o konfigurácii slotov nájdete v kapitole Konfigurácia.
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
Poznámka
Ak vaša konfigurácia podporuje viac ako jeden slot, možno budete musieť v príkazoch pkcs11-tool pridať možnosť --slot <arg>
, aby ste použili ten správny.
Identifikátory kľúčov¶
Nástroj pkcs11-tool používa na identifikáciu kľúčov hexadecimálne ID kľúča. NetHSM používa ako ID kľúča alfanumerické reťazce. Modul PKCS#11 NetHSM používa na vytvorenie ID PKCS#11 surové bajtové hodnoty reťazca. Hexadecimálnu verziu kľúča NetHSM môžete získať pomocou adresy xxd
:
echo -n "MyKey" | xxd -p
4d794b6579
Túto hexadecimálnu hodnotu potom môžete odovzdať nástroju pkcs11 pomocou možnosti --id
.
Generovanie kľúča¶
Vygenerujte pár kľúčov a uložte ho do NetHSM.
Poznámka
Slot, ktorý chcete použiť, musí mať v konfiguračnom súbore používateľa andministrator. Inak sa zobrazí chyba CKR_USER_NOT_LOGGED_IN.
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/Generic¶
pkcs11-tool --module /usr/lib/nitrokey/libnethsm_pkcs11.so --keygen --key-type AES:256 --label "aeskey"
Zoznam kľúčov¶
Zoznam kľúčov uložených v zariadení 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
Prečítajte si kľúče¶
Čítanie verejného kľúča páru kľúčov uloženého v NetHSM. Nie je možné čítať súkromné kľúče z NetHSM.
pkcs11-tool --module /usr/lib/nitrokey/libnethsm_pkcs11.so --read-object --type pubkey --label rsakey --output-file rsakey.pub
Certifikát páru kľúčov možno prečítať rovnakým príkazom zmenou voľby --type
na cert
.
Poznámka
Výstup je vo formáte DER.
Napísať kľúče¶
Zapíšte súkromný kľúč na NetHSM. Verejný kľúč sa automaticky odvodí od súkromného kľúča.
pkcs11-tool --module /usr/lib/nitrokey/libnethsm_pkcs11.so --write-object rsakey.key --type privkey --id 7273616b6579
Certifikát páru kľúčov možno zapísať rovnakým príkazom zmenou voľby --type
na cert
.
pkcs11-tool --module /usr/lib/nitrokey/libnethsm_pkcs11.so --write-object rsakey.crt --type cert --id 7273616b6579
Šifrovanie¶
Šifrovanie údajov je podporované len pre kľúče AES.
echo "NetHSM rulez! " | pkcs11-tool --module /usr/lib/nitrokey/libnethsm_pkcs11.so --encrypt --id 6165736b6579 --mechanism AES_CBC --output-file encrypted.txt
Poznámka
Vstupné údaje musíte ručne doplniť na veľkosť bloku kľúča AES.
Dešifrovanie¶
AES¶
pkcs11-tool --module /usr/lib/nitrokey/libnethsm_pkcs11.so --decrypt --id 6165736b6579 --mechanism AES_CBC --input-file encrypted.txt
RSA¶
Údaje môžete zašifrovať verejným kľúčom a dešifrovať súkromným kľúčom.
# 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
Podpísať¶
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
Overenie podpisu pomocou 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