pkcs11-tool#

Το pkcs11-tool είναι ένα εργαλείο του έργου OpenSC που μπορεί να χρησιμοποιηθεί για τη διαχείριση κλειδιών σε μια συσκευή PKCS#11.

Πρέπει να περάσετε τη θέση της ενότητας PKCS#11 που θα χρησιμοποιήσετε με την επιλογή --module:

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

Αντικαταστήστε το /usr/lib/nitrokey/libnethsm_pkcs11.so με τη διαδρομή στην οποία βρίσκεται η ενότητα NetHSM PKCS#11.

Μπορείτε να ελέγξετε αν η μονάδα λειτουργεί με την επόμενη εντολή:

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

Θα πρέπει να δείτε κάτι τέτοιο:

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

Λίστα Κουλοχέρηδων#

Οι πληροφορίες σχετικά με τις διαθέσιμες υποδοχές. Οι αναφερόμενες υποδοχές εξαρτώνται από τη διαμόρφωση της συστοιχίας υποδοχών στο αρχείο διαμόρφωσης p11nethsm.conf. Για να μάθετε περισσότερα σχετικά με τη διαμόρφωση των slots, ανατρέξτε στο κεφάλαιο Διαμόρφωση.

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

Σημείωση

Αν η διαμόρφωσή σας υποστηρίζει περισσότερες από μία υποδοχές, ίσως χρειαστεί να προσθέσετε την επιλογή --slot <arg> στις εντολές του pkcs11-tool για να χρησιμοποιήσετε τη σωστή υποδοχή.

Αναγνωριστικά κλειδιών#

Το pkcs11-tool χρησιμοποιεί ένα δεκαεξαδικό αναγνωριστικό κλειδιού για την αναγνώριση των κλειδιών. Το NetHSM χρησιμοποιεί αλφαριθμητικές συμβολοσειρές ως αναγνωριστικό κλειδιού. Η ενότητα PKCS#11 του NetHSM χρησιμοποιεί τις ακατέργαστες τιμές byte της συμβολοσειράς για να σχηματίσει το αναγνωριστικό PKCS#11. Μπορείτε να λάβετε τη δεκαεξαδική έκδοση ενός κλειδιού NetHSM με το xxd:

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

Μπορείτε στη συνέχεια να περάσετε αυτή τη δεκαεξαδική τιμή στο pkcs11-tool με την επιλογή --id.

Δημιουργία κλειδιού#

Δημιουργήστε ένα ζεύγος κλειδιών και αποθηκεύστε το στο NetHSM.

Σημείωση

Η υποδοχή που θέλετε να χρησιμοποιήσετε πρέπει να έχει έναν χρήστη andministrator στο αρχείο ρυθμίσεων. Διαφορετικά θα λάβετε το σφάλμα 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"

Λίστα κλειδιών#

Καταγράψτε τα κλειδιά που είναι αποθηκευμένα στο NetHSM.

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

Διαβάστε τα κλειδιά#

Διαβάστε το δημόσιο κλειδί ενός ζεύγους κλειδιών που είναι αποθηκευμένο στο NetHSM. Δεν είναι δυνατή η ανάγνωση ιδιωτικών κλειδιών από το NetHSM.

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

Το πιστοποιητικό του ζεύγους κλειδιών μπορεί να διαβαστεί με την ίδια εντολή αλλάζοντας την επιλογή --type σε cert.

Σημείωση

Η έξοδος είναι σε μορφή DER.

Γράψτε τα πλήκτρα#

Γράψτε ένα ιδιωτικό κλειδί στο NetHSM. Το δημόσιο κλειδί προκύπτει αυτόματα από το ιδιωτικό κλειδί.

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

Το πιστοποιητικό του ζεύγους κλειδιών μπορεί να εγγραφεί με την ίδια εντολή αλλάζοντας την επιλογή --type σε cert.

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

Κρυπτογράφηση#

Η κρυπτογράφηση δεδομένων υποστηρίζεται μόνο για κλειδιά AES.

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

Σημείωση

Πρέπει να συμπληρώσετε χειροκίνητα τα δεδομένα εισόδου στο μέγεθος του μπλοκ του κλειδιού AES.

Αποκρυπτογράφηση#

AES#

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

RSA#

Μπορείτε να κρυπτογραφήσετε δεδομένα με το δημόσιο κλειδί και να τα αποκρυπτογραφήσετε με το ιδιωτικό κλειδί.

# 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

Υπογράψτε#

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

Για να επαληθεύσετε την υπογραφή με το 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