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