pkcs11-tööriist#
pkcs11-tool on projekti OpenSC kuuluv tööriist, mida saab kasutada PKCS#11 seadme võtmete haldamiseks.
Sa pead edastama PKCS#11 mooduli asukoha, mida kasutada koos --module
valikuga:
pkcs11-tool --module /usr/lib/nitrokey/libnethsm_pkcs11.so
Asendage /usr/lib/nitrokey/libnethsm_pkcs11.so
teega, kus asub NetHSM PKCS#11 moodul.
Järgmise käsuga saate testida, kas moodul töötab:
pkcs11-tool --module /usr/lib/nitrokey/libnethsm_pkcs11.so --show-info
Sa peaksid nägema midagi sellist:
Cryptoki version 2.40
Manufacturer Nitrokey
Library Nitrokey PKCS#11 library (ver 0.1)
Loetelu teenindusajad#
Teave vabade teenindusaegade kohta. Loetletud teenindusajad sõltuvad teenindusaegade massiivi konfiguratsioonist p11nethsm.conf konfiguratsioonifailis. Lisateavet teenindusaegade konfigureerimise kohta leiate peatükist Konfigureerimine.
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
Märkus
Kui teie konfiguratsioon toetab rohkem kui ühte pesa, peate võib-olla lisama pkcs11-tööriista käskudesse valiku --slot <arg>
, et kasutada õiget pesa.
Võtmetunnused#
pkcs11-tool kasutab võtmete identifitseerimiseks kuuekohalist võtme ID-d. NetHSM kasutab võtme ID-na tähtnumbrilist stringi. NetHSMi PKCS#11-moodul kasutab PKCS#11 ID moodustamiseks stringi toorseid baidiväärtusi. NetHSMi võtme heksadetsimaalse versiooni saate kätte aadressiga xxd
:
echo -n "MyKey" | xxd -p
4d794b6579
Seejärel saate selle heksaväärtuse edastada pkcs11-tool’ile valikuga --id
.
Võtme genereerimine#
Looge võtmepaar ja salvestage see NetHSMis.
Märkus
Pesa, mida soovite kasutada, peab konfiguratsioonifailis olema kasutaja andministrator. Vastasel juhul saate vea 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"
Loetelu võtmed#
Loetlege NetHSMi salvestatud võtmed.
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
Loe võtmed#
Loe NetHSMi salvestatud võtmepaari avalikku võtit. NetHSMilt ei ole võimalik lugeda privaatseid võtmeid.
pkcs11-tool --module /usr/lib/nitrokey/libnethsm_pkcs11.so --read-object --type pubkey --label rsakey --output-file rsakey.pub
Võtmepaari sertifikaati saab sama käsuga lugeda, muutes --type
valikuks cert
.
Märkus
Väljund on DER-vormingus.
Võtmete kirjutamine#
Kirjutage NetHSMi privaatne võti. Avalik võti tuletatakse automaatselt privaatvõtmest.
pkcs11-tool --module /usr/lib/nitrokey/libnethsm_pkcs11.so --write-object rsakey.key --type privkey --id 7273616b6579
Võtmepaari sertifikaadi saab sama käsuga kirjutada, muutes --type
valikuks cert
.
pkcs11-tool --module /usr/lib/nitrokey/libnethsm_pkcs11.so --write-object rsakey.crt --type cert --id 7273616b6579
Krüpteeri#
Andmete krüpteerimine on toetatud ainult AES-võtmete puhul.
echo "NetHSM rulez! " | pkcs11-tool --module /usr/lib/nitrokey/libnethsm_pkcs11.so --encrypt --id 6165736b6579 --mechanism AES_CBC --output-file encrypted.txt
Märkus
Sa pead sisendandmed käsitsi täitma vastavalt AES-võtme plokisuurusele.
Dekrüpteeri#
AES#
pkcs11-tool --module /usr/lib/nitrokey/libnethsm_pkcs11.so --decrypt --id 6165736b6579 --mechanism AES_CBC --input-file encrypted.txt
RSA#
Andmeid saab krüpteerida avaliku võtmega ja dekrüpteerida privaatvõtmega.
# 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
Allkiri#
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
Allkirja kontrollimine OpenSSL-i abil:
# 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