pkcs11-instruments¶
pkcs11-tool ir rīks, kas ir daļa no OpenSC projekta un ko var izmantot, lai pārvaldītu PKCS#11 ierīces atslēgas.
Jums ir jānorāda PKCS#11 moduļa atrašanās vieta, kas jāizmanto ar --module
opciju:
pkcs11-tool --module /usr/lib/nitrokey/libnethsm_pkcs11.so
Aizstāt /usr/lib/nitrokey/libnethsm_pkcs11.so
ar ceļu, kurā atrodas NetHSM PKCS#11 modulis.
Ar nākamo komandu varat pārbaudīt, vai modulis darbojas:
pkcs11-tool --module /usr/lib/nitrokey/libnethsm_pkcs11.so --show-info
Jums vajadzētu redzēt kaut ko līdzīgu šim:
Cryptoki version 2.40
Manufacturer Nitrokey
Library Nitrokey PKCS#11 library (ver 0.1)
Saraksta spēļu automāti¶
Informācija par pieejamajiem laika nišām. Uzskaitītie laika nišas ir atkarīgi no laika nišu masīva konfigurācijas p11nethsm.conf konfigurācijas failā. Lai uzzinātu vairāk par slotu konfigurāciju, skatiet nodaļu Konfigurācija.
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
Piezīme
Ja jūsu konfigurācija atbalsta vairāk nekā vienu slotu, lai izmantotu pareizo slotu, pkcs11-tool komandās, iespējams, būs jāpievieno --slot <arg>
opcija.
Atslēgas identifikatori¶
pkcs11 rīks izmanto heksadecimālo atslēgas ID, lai identificētu atslēgas. NetHSM kā atslēgas ID izmanto burtciparu virknes. NetHSM PKCS#11 modulis PKCS#11 ID veidošanai izmanto neapstrādātas virknes baitu vērtības. NetHSM atslēgas heksadecimālo versiju var iegūt, izmantojot xxd
:
echo -n "MyKey" | xxd -p
4d794b6579
Pēc tam šo sešciparu vērtību var nodot pkcs11 rīkam, izmantojot --id
opciju.
Izveidot atslēgu¶
Izveidojiet atslēgu pāri un saglabājiet to NetHSM.
Piezīme
Slotam, kuru vēlaties izmantot, konfigurācijas failā ir jābūt lietotājam andministrator. Pretējā gadījumā jūs saņemsiet CKR_USER_NOT_LOGGED_IN kļūdu.
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"
Saraksta atslēgas¶
Uzskaitiet NetHSM saglabātās atslēgas.
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
Lasīt atslēgas¶
NetHSM saglabātā atslēgu pāra publiskās atslēgas nolasīšana. No NetHSM nav iespējams nolasīt privātās atslēgas.
pkcs11-tool --module /usr/lib/nitrokey/libnethsm_pkcs11.so --read-object --type pubkey --label rsakey --output-file rsakey.pub
Atslēgu pāra sertifikātu var nolasīt ar to pašu komandu, mainot --type
opciju uz cert
.
Piezīme
Izvades rezultāts ir DER formātā.
Rakstīt atslēgas¶
Ierakstiet privāto atslēgu NetHSM. Publiskā atslēga tiek automātiski atvasināta no privātās atslēgas.
pkcs11-tool --module /usr/lib/nitrokey/libnethsm_pkcs11.so --write-object rsakey.key --type privkey --id 7273616b6579
Atslēgu pāra sertifikātu var ierakstīt ar to pašu komandu, mainot --type
opciju uz cert
.
pkcs11-tool --module /usr/lib/nitrokey/libnethsm_pkcs11.so --write-object rsakey.crt --type cert --id 7273616b6579
Šifrēt¶
Datu šifrēšana tiek atbalstīta tikai AES atslēgām.
echo "NetHSM rulez! " | pkcs11-tool --module /usr/lib/nitrokey/libnethsm_pkcs11.so --encrypt --id 6165736b6579 --mechanism AES_CBC --output-file encrypted.txt
Piezīme
Ievades dati ir manuāli jāaizpilda līdz AES atslēgas bloka lielumam.
Atšifrējiet¶
AES¶
pkcs11-tool --module /usr/lib/nitrokey/libnethsm_pkcs11.so --decrypt --id 6165736b6579 --mechanism AES_CBC --input-file encrypted.txt
RSA¶
Datus var šifrēt ar publisko atslēgu un atšifrēt ar privāto atslēgu.
# 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
Pierakstīties¶
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
Paraksta pārbaude ar 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