pkcs11-szerszám#

A pkcs11-tool a OpenSC projekt része, amely a PKCS#11 eszközön lévő kulcsok kezelésére használható.

A --module opcióval kell megadni a PKCS#11 modul helyét:

pkcs11-tool --module /usr/lib/nitrokey/libnethsm_pkcs11.so

A /usr/lib/nitrokey/libnethsm_pkcs11.so helyett a NetHSM PKCS#11 modul elérési útvonalát adja meg.

A következő paranccsal tesztelheti, hogy a modul működik-e:

pkcs11-tool --module /usr/lib/nitrokey/libnethsm_pkcs11.so --show-info

Valami ilyesmit kell látnia:

Cryptoki version 2.40
Manufacturer     Nitrokey
Library          Nitrokey PKCS#11 library (ver 0.1)

Listanyílások listája#

A rendelkezésre álló résidőkre vonatkozó információk. A felsorolt slotok a p11nethsm.conf konfigurációs fájlban található slot tömb konfigurációjától függnek. A bővítőhelyek konfigurációjáról bővebben a Konfiguráció című fejezetben olvashat.

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

Megjegyzés

Ha az Ön konfigurációja egynél több slotot támogat, akkor előfordulhat, hogy a --slot <arg> opciót kell hozzáadni a pkcs11-tool parancsokhoz, hogy a megfelelőt használja.

Kulcs azonosítók#

A pkcs11-tool egy hexadecimális kulcsazonosítót használ a kulcsok azonosítására. A NetHSM alfanumerikus karakterláncokat használ kulcsazonosítóként. A NetHSM PKCS#11 modulja a karakterlánc nyers bájtértékeit használja a PKCS#11 azonosító kialakításához. A NetHSM kulcsok hexadecimális változatát a xxd segítségével kaphatja meg:

echo -n "MyKey" | xxd -p
4d794b6579

Ezt a hexaértéket a --id opcióval átadhatja a pkcs11-toolnak.

Kulcs generálása#

Generáljon egy kulcspárt, és tárolja azt a NetHSM-en.

Megjegyzés

A használni kívánt slotnak rendelkeznie kell egy andministrator felhasználóval a konfigurációs fájlban. Ellenkező esetben a CKR_USER_NOT_LOGGED_IN hibaüzenetet kapod.

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/Generikus#

pkcs11-tool --module /usr/lib/nitrokey/libnethsm_pkcs11.so --keygen --key-type AES:256 --label "aeskey"

Kulcsok listája#

A NetHSM-en tárolt kulcsok listája.

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

Kulcsok olvasása#

A NetHSM-en tárolt kulcspár nyilvános kulcsának leolvasása. A NetHSM-ről nem lehet privát kulcsokat olvasni.

pkcs11-tool --module /usr/lib/nitrokey/libnethsm_pkcs11.so --read-object --type pubkey --label rsakey --output-file rsakey.pub

A kulcspár tanúsítványa ugyanezzel a paranccsal olvasható, ha a --type opciót cert opcióra változtatjuk.

Megjegyzés

A kimenet DER formátumú.

Kulcsok írása#

Írjon egy privát kulcsot a NetHSM-re. A nyilvános kulcs automatikusan levezetésre kerül a magánkulcsból.

pkcs11-tool --module /usr/lib/nitrokey/libnethsm_pkcs11.so --write-object rsakey.key --type privkey --id 7273616b6579

A kulcspár tanúsítványa ugyanazzal a paranccsal írható ki, ha a --type opciót cert opcióra változtatjuk.

pkcs11-tool --module /usr/lib/nitrokey/libnethsm_pkcs11.so --write-object rsakey.crt --type cert --id 7273616b6579

Titkosítás#

Az adatok titkosítása csak AES kulcsok esetén támogatott.

echo "NetHSM rulez!  " | pkcs11-tool --module /usr/lib/nitrokey/libnethsm_pkcs11.so --encrypt --id 6165736b6579 --mechanism AES_CBC --output-file encrypted.txt

Megjegyzés

A bemeneti adatokat kézzel kell kitölteni az AES kulcs blokkméretéhez.

Dekódolás#

AES#

pkcs11-tool --module /usr/lib/nitrokey/libnethsm_pkcs11.so --decrypt --id 6165736b6579 --mechanism AES_CBC --input-file encrypted.txt

RSA#

Az adatokat a nyilvános kulccsal titkosíthatja, a titkos kulccsal pedig visszafejtheti.

# 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

Jelentkezzen a címen.#

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

Az aláírás ellenőrzése az OpenSSL segítségével:

# 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