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