pkcs11-tool¶
pkcs11-tool yra OpenSC projekto dalis, kurią galima naudoti PKCS#11 įrenginio raktams tvarkyti.
PKCS#11 modulio, kurį norite naudoti, buvimo vietą turite perduoti su --module
parinktimi:
pkcs11-tool --module /usr/lib/nitrokey/libnethsm_pkcs11.so
Pakeiskite /usr/lib/nitrokey/libnethsm_pkcs11.so
keliu, kuriame yra NetHSM PKCS#11 modulis.
Ar modulis veikia, galite patikrinti naudodami kitą komandą:
pkcs11-tool --module /usr/lib/nitrokey/libnethsm_pkcs11.so --show-info
Turėtumėte matyti kažką panašaus:
Cryptoki version 2.40
Manufacturer Nitrokey
Library Nitrokey PKCS#11 library (ver 0.1)
Sąrašo lizdai¶
Informacija apie turimus laiko tarpsnius. Išvardyti lizdai priklauso nuo lizdų masyvo konfigūracijos konfigūracijos faile p11nethsm.conf. Daugiau informacijos apie lizdų konfigūraciją rasite skyriuje Konfigūracija.
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
Pastaba
Jei jūsų konfigūracija palaiko daugiau nei vieną lizdą, gali tekti į pkcs11-tool komandas įtraukti --slot <arg>
parinktį, kad būtų naudojamas tinkamas lizdas.
Pagrindiniai ID¶
pkcs11 įrankis raktams identifikuoti naudoja šešioliktainį rakto ID. NetHSM kaip rakto ID naudoja raidines-skaitmenines eilutes. NetHSM PKCS#11 modulis PKCS#11 ID formuoti naudoja neapdorotas eilutės baitų reikšmes. NetHSM rakto šešioliktainę versiją galite gauti naudodami xxd
:
echo -n "MyKey" | xxd -p
4d794b6579
Šią šešiaženklę vertę galite perduoti pkcs11 įrankiui, naudodami --id
parinktį.
Generuoti raktą¶
Sukurkite raktų porą ir išsaugokite ją „NetHSM“.
Pastaba
Norimo naudoti lizdo konfigūracijos faile turi būti įrašytas naudotojas andministrator. Priešingu atveju gausite CKR_USER_NOT_LOGGED_IN klaidą.
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/Generinis¶
pkcs11-tool --module /usr/lib/nitrokey/libnethsm_pkcs11.so --keygen --key-type AES:256 --label "aeskey"
Sąrašo raktai¶
Išvardykite NetHSM saugomus raktus.
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
Skaityti raktus¶
Perskaitykite viešąjį raktų poros raktą, saugomą NetHSM. Iš NetHSM negalima nuskaityti privačių raktų.
pkcs11-tool --module /usr/lib/nitrokey/libnethsm_pkcs11.so --read-object --type pubkey --label rsakey --output-file rsakey.pub
Raktų poros sertifikatą galima perskaityti ta pačia komanda, pakeitus --type
parinktį į cert
.
Pastaba
Išvestis pateikiama DER formatu.
Rašyti raktus¶
Įrašykite privatų raktą į NetHSM. Viešasis raktas automatiškai išvedamas iš privataus rakto.
pkcs11-tool --module /usr/lib/nitrokey/libnethsm_pkcs11.so --write-object rsakey.key --type privkey --id 7273616b6579
Raktų poros sertifikatą galima įrašyti ta pačia komanda, pakeitus --type
parinktį į cert
.
pkcs11-tool --module /usr/lib/nitrokey/libnethsm_pkcs11.so --write-object rsakey.crt --type cert --id 7273616b6579
Užšifruoti¶
Duomenų šifravimas palaikomas tik naudojant AES raktus.
echo "NetHSM rulez! " | pkcs11-tool --module /usr/lib/nitrokey/libnethsm_pkcs11.so --encrypt --id 6165736b6579 --mechanism AES_CBC --output-file encrypted.txt
Pastaba
Įvesties duomenis reikia rankiniu būdu užpildyti iki AES rakto bloko dydžio.
Iššifruoti¶
AES¶
pkcs11-tool --module /usr/lib/nitrokey/libnethsm_pkcs11.so --decrypt --id 6165736b6579 --mechanism AES_CBC --input-file encrypted.txt
RSA¶
Duomenis galite užšifruoti viešuoju raktu ir iššifruoti privačiuoju raktu.
# 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
Ženklas¶
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
Norėdami patikrinti parašą naudodami 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