Funzionamento¶
Questo capitolo descrive le attività operative per gli utenti con il ruolo Administrator e Operator. Per ulteriori informazioni sui ruoli, consultare il capitolo Ruoli.
Importante
Assicuratevi di aver letto le informazioni all’inizio di questo documento prima di iniziare a lavorare.
Gestione delle chiavi¶
Generare le chiavi¶
NetHSM può generare coppie di chiavi. Si consiglia di specificare l’opzione ID chiave per darle un nome espressivo.
I tipi di chiave supportati e i meccanismi corrispondenti sono i seguenti.
Tipo di chiave |
Meccanismi |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Keys are assigned to the Namespace of the user that generates the key.
La chiave può essere generata come segue.
Ruolo richiesto
Questa operazione richiede un’autenticazione con il ruolo Administrator.
Opzioni richieste
Opzione |
Descrizione |
---|---|
|
Il tipo della chiave generata. I valori possibili per l’argomento |
|
I meccanismi della chiave generata. I valori possibili per l’argomento |
|
La lunghezza della chiave generata |
Opzioni opzionali
Opzione |
Descrizione |
---|---|
|
L’ID della chiave generata |
Esempio
$ nitropy nethsm --host $NETHSM_HOST generate-key --type RSA --mechanism RSA_Signature_PSS_SHA256 --mechanism RSA_Decryption_PKCS1 --length 2048 --key-id myFirstKey
Key myFirstKey generated on NetHSM localhost:8443
Le informazioni sull’endpoint /keys/generate si trovano nella documentazione dell’API.
Chiave di importazione¶
Il NetHSM può importare chiavi private esistenti nel Key Store.
I tipi di chiave supportati e i meccanismi corrispondenti sono i seguenti.
Tipo di chiave |
Meccanismi |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Keys are assigned to the Namespace of the user that imports the key.
Importare una chiave privata da un file PEM in NetHSM come segue.
Ruolo richiesto
Questa operazione richiede un’autenticazione con il ruolo Administrator.
Argomenti
Argomento |
Descrizione |
---|---|
|
Private key file in PEM format |
Opzioni opzionali
Opzione |
Descrizione |
---|---|
|
I meccanismi della chiave generata. I valori possibili per l’argomento |
|
L’ID della nuova chiave |
|
Il tag per la nuova chiave |
Esempio
$ nitropy nethsm --host $NETHSM_HOST import-key \
--mechanism RSA_Signature_PSS_SHA256 \
--mechanism RSA_Decryption_PKCS1 \
--key-id myFirstKey \
mykey.pem
Key myFirstKey added to NetHSM localhost:8443
Le informazioni sull’endpoint /keys si trovano nella documentazione dell’API.
Private keys in raw format can be imported as follows.
Ruolo richiesto
Questa operazione richiede un’autenticazione con il ruolo Administrator.
Opzioni richieste
Opzione |
Descrizione |
---|---|
|
Il tipo della chiave generata. I valori possibili per l’argomento |
|
I meccanismi della chiave generata. I valori possibili per l’argomento |
|
Il primo p per le chiavi RSA, codificato in base 64 |
|
Il primo q per le chiavi RSA, codificato in base 64 |
|
L’esponente pubblico per le chiavi RSA, codificato in base64 |
|
I dati delle chiavi ED25519 o ECDSA_*, codificati in base64. |
Opzioni opzionali
Opzione |
Descrizione |
---|---|
|
L’ID della nuova chiave |
|
Il tag per la nuova chiave |
Esempio
$ nitropy nethsm --host $NETHSM_HOST add-key \
--type RSA \
--mechanism RSA_Signature_PSS_SHA256 \
--mechanism RSA_Decryption_PKCS1 \
--key-id myFirstKey \
--public-exponent AQAB \
--prime-p "AOnWFZ+JrI/xOXJU04uYCZOiPVUWd6CSbVseEYrYQYxc7dVroePshz29tc+VEOUP5T0O8lXMEkjFAwjW6C9QTAsPyl6jwyOQluMRIkdN4/7BAg3HAMuGd7VmkGyYrnZWW54sLWp1JD6XJG33kF+9OSar9ETPoVyBgK5punfiUFEL" \
--prime-q "ANT1kWDdP9hZoFKT49dwdM/S+3ZDnxQa7kZk9p+JKU5RaU9e8pS2GOJljHwkES1FH6CUGeIaUi81tRKe2XZhe/163sEyMcxkaaRbBbTc1v6ZDKILFKKt4eX7LAQfhL/iFlgi6pcyUM8QDrm1QeFgGz11ChM0JuQw1WwkX06lg8iv"
Key myFirstKey added to NetHSM localhost:8443
Le informazioni sull’endpoint /keys si trovano nella documentazione dell’API.
Tasto di cancellazione¶
The NetHSM can delete keys from the Key Store. Users can only delete keys in their Namespace.
Ruolo richiesto
Questa operazione richiede un’autenticazione con il ruolo Administrator.
Argomenti
Argomento |
Descrizione |
---|---|
|
L’ID della chiave da eliminare |
Esempio
$ nitropy nethsm --host $NETHSM_HOST delete-key myFirstKey
Key myFirstKey deleted on NetHSM localhost:8443
Le informazioni sull’endpoint /keys/{KeyID} si trovano nella documentazione dell’API.
Chiavi dell’elenco¶
The NetHSM can list all keys in the Key Store that are in the Namespace of the current user.
L’elenco può essere recuperato come segue.
Ruolo richiesto
Questa operazione richiede un’autenticazione con il ruolo Administrator o Operator.
Opzioni opzionali
Opzione |
Descrizione |
---|---|
|
Il Tag da cercare |
Esempio
$ nitropy nethsm --host $NETHSM_HOST list-keys
Keys on NetHSM localhost:8443:
Key ID Type Mechanisms Operations Tags
----------- ---- ---------------------------------------------- ---------- ----
myFirstKey RSA RSA_Decryption_PKCS1, RSA_Signature_PSS_SHA256 0
Le informazioni sull’endpoint /keys si trovano nella documentazione dell’API.
Mostra dettagli chiave¶
The NetHSM can output more detailed information about a stored key. Users can only access keys in their Namespace.
Le informazioni dettagliate possono essere recuperate come segue.
Ruolo richiesto
Questa operazione richiede un’autenticazione con il ruolo Administrator o Operator.
Esempio
$ nitropy nethsm --host $NETHSM_HOST get-key myFirstKey
Key myFirstKey on NetHSM localhost:8443:
Type: RSA
Mechanisms: RSA_Decryption_RAW
Operations: 0
Modulus: r62XHPWMDdEf2I1WEpSxGowY/fQF8lMPtv3EUQJE/PLWBvehF8G0QY3AVVZ3etlQWiKreOuGDx4Nr2PFNYAu5f+JP2Jc1lsFNOYF8D82RF41MBySbQR+k+44N/04B0ahTBCxX+ovFH7Sd6SzvxMPa7EKvhaOsLbgyrPlFZxQnhIEqJRCSo5DRRD+CRCPpGXsVXgFbJrNilh21i8OZCct4nC2OS191MeDKmCH4tjrfLMwOKJE8zKlwhdtA1uMY49+JuaC48GUFsLYwbLp1723Uv1PjZjC5jbUhScD0u9I+iNrqznAeka4dWsJ9jgA+h6hblSgCs0I3MWOsMXx/Y5PGQ==
Public exponent: AQAB
Le informazioni sull’endpoint /keys/{KeyID} si trovano nella documentazione dell’API.
La chiave pubblica di una chiave può essere recuperata come segue. È in formato PKCS#8.
Ruolo richiesto
Questa operazione richiede un’autenticazione con il ruolo Administrator o Operator.
Esempio
$ nitropy nethsm --host $NETHSM_HOST get-key myFirstKey --public-key
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAr62XHPWMDdEf2I1WEpSx
GowY/fQF8lMPtv3EUQJE/PLWBvehF8G0QY3AVVZ3etlQWiKreOuGDx4Nr2PFNYAu
5f+JP2Jc1lsFNOYF8D82RF41MBySbQR+k+44N/04B0ahTBCxX+ovFH7Sd6SzvxMP
a7EKvhaOsLbgyrPlFZxQnhIEqJRCSo5DRRD+CRCPpGXsVXgFbJrNilh21i8OZCct
4nC2OS191MeDKmCH4tjrfLMwOKJE8zKlwhdtA1uMY49+JuaC48GUFsLYwbLp1723
Uv1PjZjC5jbUhScD0u9I+iNrqznAeka4dWsJ9jgA+h6hblSgCs0I3MWOsMXx/Y5P
GQIDAQAB
-----END PUBLIC KEY-----
Le informazioni sull’endpoint /keys/{KeyID}/public.pem sono disponibili nella documentazione dell’API.
La chiave pubblica può essere ispezionata, ad esempio, con OpenSSL come segue.
Ruolo richiesto
Questa operazione richiede un’autenticazione con il ruolo Administrator o Operator.
Esempio
nitropy nethsm --host= $NETHSM_HOST get-key myFirstKey --public-key | openssl rsa -pubin -text
Public-Key: (2048 bit)
Modulus:
00:af:ad:97:1c:f5:8c:0d:d1:1f:d8:8d:56:12:94:
b1:1a:8c:18:fd:f4:05:f2:53:0f:b6:fd:c4:51:02:
44:fc:f2:d6:06:f7:a1:17:c1:b4:41:8d:c0:55:56:
77:7a:d9:50:5a:22:ab:78:eb:86:0f:1e:0d:af:63:
c5:35:80:2e:e5:ff:89:3f:62:5c:d6:5b:05:34:e6:
05:f0:3f:36:44:5e:35:30:1c:92:6d:04:7e:93:ee:
38:37:fd:38:07:46:a1:4c:10:b1:5f:ea:2f:14:7e:
d2:77:a4:b3:bf:13:0f:6b:b1:0a:be:16:8e:b0:b6:
e0:ca:b3:e5:15:9c:50:9e:12:04:a8:94:42:4a:8e:
43:45:10:fe:09:10:8f:a4:65:ec:55:78:05:6c:9a:
cd:8a:58:76:d6:2f:0e:64:27:2d:e2:70:b6:39:2d:
7d:d4:c7:83:2a:60:87:e2:d8:eb:7c:b3:30:38:a2:
44:f3:32:a5:c2:17:6d:03:5b:8c:63:8f:7e:26:e6:
82:e3:c1:94:16:c2:d8:c1:b2:e9:d7:bd:b7:52:fd:
4f:8d:98:c2:e6:36:d4:85:27:03:d2:ef:48:fa:23:
6b:ab:39:c0:7a:46:b8:75:6b:09:f6:38:00:fa:1e:
a1:6e:54:a0:0a:cd:08:dc:c5:8e:b0:c5:f1:fd:8e:
4f:19
Exponent: 65537 (0x10001)
writing RSA key
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAr62XHPWMDdEf2I1WEpSx
GowY/fQF8lMPtv3EUQJE/PLWBvehF8G0QY3AVVZ3etlQWiKreOuGDx4Nr2PFNYAu
5f+JP2Jc1lsFNOYF8D82RF41MBySbQR+k+44N/04B0ahTBCxX+ovFH7Sd6SzvxMP
a7EKvhaOsLbgyrPlFZxQnhIEqJRCSo5DRRD+CRCPpGXsVXgFbJrNilh21i8OZCct
4nC2OS191MeDKmCH4tjrfLMwOKJE8zKlwhdtA1uMY49+JuaC48GUFsLYwbLp1723
Uv1PjZjC5jbUhScD0u9I+iNrqznAeka4dWsJ9jgA+h6hblSgCs0I3MWOsMXx/Y5P
GQIDAQAB
-----END PUBLIC KEY-----
Le informazioni sull’endpoint /keys/{KeyID}/public.pem sono disponibili nella documentazione dell’API.
Certificati chiave¶
È possibile impostare e interrogare i certificati per le chiavi memorizzate in un NetHSM.
I tipi MIME supportati sono i seguenti.
application/x-pem-file
application/x-x509-ca-cert
application/pgp-keys
Il certificato può essere impostato come segue.
Ruolo richiesto
Questa operazione richiede un’autenticazione con il ruolo Administrator.
Opzioni richieste
Opzione |
Descrizione |
---|---|
|
L’ID della chiave per cui impostare il certificato |
Opzioni opzionali
Opzione |
Descrizione |
---|---|
|
Il tipo MIME del certificato. I tipi MIME disponibili sono elencati sopra. |
Argomenti
Argomento |
Descrizione |
---|---|
|
File di certificato |
Esempio
$ nitropy nethsm --host $NETHSM_HOST set-certificate --key-id myFirstKey --mime-type application/x-pem-file /tmp/cert.pem
Updated the certificate for key myFirstKey on NetHSM localhost:8443
Le informazioni sull’endpoint /keys/{KeyID}/cert sono disponibili nella documentazione dell’API.
Il certificato può essere recuperato come segue.
Ruolo richiesto
Questa operazione richiede un’autenticazione con il ruolo Administrator o Operator.
Opzioni richieste
Opzione |
Descrizione |
---|---|
|
L’ID della chiave per cui ottenere il certificato |
Esempio
$ nitropy nethsm --host $NETHSM_HOST get-certificate --key-id myFirstKey
-----BEGIN CERTIFICATE-----
MIICeTCCAWECFCbuzdkAvc3Zx3W53IoSnmhUen42MA0GCSqGSIb3DQEBCwUAMHsx
CzAJBgNVBAYTAkRFMQ8wDQYDVQQIDAZCZXJsaW4xDzANBgNVBAcMBkJlcmxpbjER
MA8GA1UECgwITml0cm9rZXkxFTATBgNVBAMMDG5pdHJva2V5LmNvbTEgMB4GCSqG
SIb3DQEJARYRaW5mb0BuaXRyb2tleS5jb20wHhcNMjIwODMwMjAxMzA2WhcNMjMw
ODMwMjAxMzA2WjBxMW8wCQYDVQQGEwJERTANBgNVBAcMBkJlcmxpbjANBgNVBAgM
BkJlcmxpbjAPBgNVBAoMCE5pdHJva2V5MBMGA1UEAwwMbml0cm9rZXkuY29tMB4G
CSqGSIb3DQEJARYRaW5mb0BuaXRyb2tleS5jb20wKjAFBgMrZXADIQDc58LGDY9B
wbJFdXTiDalNXrDC60Sxu3eHcpnh1MSoCjANBgkqhkiG9w0BAQsFAAOCAQEAGip8
aU5nJnzm3eic3t1ihUA3VJ0mAPyfrb1Rn8tEKOZo3vg0jpRd9CSESlBsKqhvxsdQ
A3eomM+W7R37TL5+ISm5QrbijLHz3OHoPM68c1Krz3bXTkJetf4YAxpLOPYfXXHv
weRzwVJb4y3E0lJGhZxI3sUE8Yn/T1UvTbu/o/O5P/XTA8vfFrSNQkQxWBgYh4gC
KjFFALqUPFrctSFIi34aqpdihNJWnjSS2Y7INm3oxwkR3NMKP8x4wBGfZK22nHnu
PPzXuMGJTmQM8GHTzltNvLx5Iv2sXoSHClXSpdIT5IBIcR1GmZ78fmcr75OAU0+z
3XbJq/1ij3tKsjV6WA==
-----END CERTIFICATE-----
Le informazioni sull’endpoint /keys/{KeyID}/cert sono disponibili nella documentazione dell’API.
Richieste di firma di certificati chiave¶
Il NetHSM supporta la generazione di CSR (Certificate Signing Requests) per le chiavi memorizzate.
Ruolo richiesto
Questa operazione richiede un’autenticazione con il ruolo Administrator o Operator.
Opzioni richieste
Opzione |
Descrizione |
---|---|
|
L’ID della chiave per la quale generare il CSR |
|
Il nome del paese |
|
Il nome dello Stato o della provincia |
|
Il nome della località |
|
Il nome dell’organizzazione |
|
Il nome dell’unità organizzativa |
|
Il nome comune |
|
L’indirizzo e-mail |
Esempio
$ nitropy nethsm --host $NETHSM_HOST csr --key-id myFirstKey --country="DE" --state-or-province="Berlin" --locality="Berlin" --organization="Nitrokey" --organizational-unit="" --common-name=nitrokey.com --email-address="info@nitrokey.com"
-----BEGIN CERTIFICATE REQUEST-----
MIHxMIGkAgEAMHExbzAJBgNVBAYTAkRFMA0GA1UEBwwGQmVybGluMA0GA1UECAwG
QmVybGluMA8GA1UECgwITml0cm9rZXkwEwYDVQQDDAxuaXRyb2tleS5jb20wHgYJ
KoZIhvcNAQkBFhFpbmZvQG5pdHJva2V5LmNvbTAqMAUGAytlcAMhADJMNAifke6s
u7CYqHGDy3xGtXVOUNbTJG6Gn4oki+j3oAAwBQYDK2VwA0EAQilRK2Mf6kfJ4ByI
WCn9A+8IHsnE7iFcuFZpmaKfcJwZiaQppHvPg/Z0zqldzviPQ1cjKR7hSZG+8GHH
gWjEDg==
-----END CERTIFICATE REQUEST-----
Le informazioni sull’endpoint /keys/{KeyID}/csr.pem sono disponibili nella documentazione dell’API.
Operazioni chiave¶
All operations described in this chapter can only be executed for keys that are in the Namespace of the current user.
Crittografare¶
Il NetHSM può criptare i dati per chiavi simmetriche, memorizzate nel Key Store ** . Al contrario, la crittografia di dati con chiavi asimmetriche non può essere effettuata sul NetHSM, a causa del concetto della crittografia a chiave pubblica di rendere la chiave pubblica disponibile a tutti. Per le chiavi asimmetriche il NetHSM fornisce la chiave pubblica, che può essere utilizzata per la crittografia con uno strumento esterno. Consultare Show Key Details per saperne di più su come recuperare la chiave pubblica di una chiave nel Key Store ** .
I dati possono essere crittografati con una chiave simmetrica nel modo seguente.
Ruolo richiesto
Questa operazione richiede un’autenticazione con il ruolo Operatore.
Opzioni richieste
Opzione |
Descrizione |
---|---|
|
L’ID della chiave con cui crittografare i dati |
|
I dati in codifica Base64 |
|
La modalità di crittografia |
|
Il vettore di inizializzazione in codifica Base64 |
Esempio
$ nitropy nethsm --host $NETHSM_HOST encrypt -k myFirstKey -d "TmV0SFNNIHJ1bGV6enp6enp6enp6enp6enp6enp6IQo=" -m AES_CBC -iv "aYlwUI4A9zL9tts4dMAq+A=="
Encrypted: Uk+9pgucdxTnbyIb/6+BDJef+HfRWhw+Eg3RcCvyHaU=
Initialization vector: aYlwUI4A9zL9tts4dMAq+A==
Le informazioni sull’endpoint /keys/{KeyID}/encrypt sono disponibili nella documentazione dell’API.
Stampa il messaggio criptato e codificato in base64 NetHSM rulezzzzzzzzzzzzzzzzzzz!
e il vettore di inizializzazione.
I dati possono essere crittografati per chiavi asimmetriche con OpenSSL come segue.
$ echo 'NetHSM rulez!' | openssl pkeyutl -encrypt -pubin -inkey public.pem | base64 > data.crypt
Questo scrive il messaggio criptato e codificato in base64 NetHSM rulez!
nel file data.crypt
, usando la chiave pubblica di public.pem
.
Decriptare¶
Il NetHSM può decifrare i dati per una chiave privata memorizzata nel Key Store del NetHSM. Questo esempio utilizza il messaggio criptato del capitolo precedente Encrypt.
Le modalità di decodifica supportate sono le seguenti.
RSA
PKCS1
OAEP_MD5
OAEP_SHA1
OAEP_SHA224
OAEP_SHA224
OAEP_SHA224
OAEP_SHA224
EC_P224
I dati possono essere decifrati come segue.
Ruolo richiesto
Questa operazione richiede un’autenticazione con il ruolo Operatore.
Opzioni richieste
Opzione |
Descrizione |
---|---|
|
L’ID della chiave per decifrare l’ampiezza dei dati |
|
I dati crittografati in codifica Base64 |
|
La modalità di decrittazione. Le modalità disponibili sono elencate sopra. |
Esempio
$ nitropy nethsm -h $NETHSM_HOST decrypt -k myFirstKey -d "$(cat data.crypt)" -m PKCS1 | base64 -d
NetHSM rulez!
Le informazioni sull’endpoint /keys/{KeyID}/decrypt sono disponibili nella documentazione dell’API.
Segno¶
Il NetHSM può firmare i dati per una chiave privata memorizzata nel Key Store del NetHSM. Per le firme con chiave RSA ed ECDSA, è necessario calcolare prima un digest.
Per calcolare un digest sono necessari innanzitutto i dati. Un messaggio viene creato come segue.
$ echo 'NetHSM rulez!' > data
Il digest viene calcolato con OpenSSL come segue.
$ openssl dgst -sha256 -binary data | base64 > data.digest
Le modalità di firma supportate sono le seguenti.
PKCS1
EC_P224
OAEP_MD5
Curve25519
Curve25519
Curve25519
Curve25519
PKCS1
PKCS1
Dal digest si può creare una firma come segue.
Ruolo richiesto
Questa operazione richiede un’autenticazione con il ruolo Operatore.
Opzioni richieste
Opzione |
Descrizione |
---|---|
|
L’ID della chiave per firmare la larghezza dei dati |
|
I dati da firmare codificati utilizzando Base64 |
|
La modalità del segno |
Esempio
$ nitropy nethsm -h $NETHSM_HOST sign -k myFirstKey -m PKCS1 -d "$(cat data.digest)" | base64 -d > data.sig
Le informazioni sull’endpoint /keys/{KeyID}/sign sono disponibili nella documentazione dell’API.
La firma creata può essere verificata con OpenSSL come segue.
$ openssl dgst -sha256 -verify public.pem -signature data.sig -sigopt rsa_padding_mode:pss -sigopt rsa_pss_saltlen:-1 data
Verified OK
Casuale¶
Il NetHSM può fornire byte casuali come stringa Base64.
Ruolo richiesto
Questa operazione richiede un’autenticazione con il ruolo Operatore.
Argomenti
Argomento |
Descrizione |
---|---|
|
Byte da recuperare |
Esempio
nitropy nethsm --host $NETHSM_HOST random 4
94A2rg==
Le informazioni sull’endpoint /random sono disponibili nella documentazione dell’API.