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

RSA

RSA_Decryption_RAW RSA_Decryption_PKCS1 RSA_Decryption_OAEP_MD5 RSA_Decryption_OAEP_SHA1 RSA_Decryption_OAEP_SHA224 RSA_Decryption_OAEP_SHA256 RSA_Decryption_OAEP_SHA384 RSA_Decryption_OAEP_SHA512 RSA_Signature_PKCS1 RSA_Signature_PSS_MD5 RSA_Signature_PSS_SHA1 RSA_Signature_PSS_SHA224 RSA_Signature_PSS_SHA256 RSA_Signature_PSS_SHA384 RSA_Signature_PSS_SHA512

Curve25519

EdDSA_Signature

EC_P224

EdDSA_Signature

EC_P224

EdDSA_Signature

EC_P224

EdDSA_Signature

EC_P224

EdDSA_Signature

EC_P224

AES_Encryption_CBC AES_Decryption_CBC

Le chiavi sono assegnate al `Namespace <administration.html#namespaces>`__ dell’utente che genera la chiave.

La chiave può essere generata come segue.

Ruolo richiesto

Questa operazione richiede un’autenticazione con il ruolo Administrator.

Opzioni richieste

Opzione

Descrizione

-t, --type KEYTYPE

Il tipo della chiave generata. I valori possibili per l’argomento KEYTYPE sono riportati nella tabella precedente.

-m, --mechanism MECHANISM

I meccanismi della chiave generata. I valori possibili per l’argomento MECHANISM sono riportati nella tabella precedente.

-l, --length INTEGER

La lunghezza della chiave generata

Opzioni opzionali

Opzione

Descrizione

-k, --key-id TEXT

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

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

RSA

RSA_Decryption_RAW RSA_Decryption_PKCS1 RSA_Decryption_OAEP_MD5 RSA_Decryption_OAEP_SHA1 RSA_Decryption_OAEP_SHA224 RSA_Decryption_OAEP_SHA256 RSA_Decryption_OAEP_SHA384 RSA_Decryption_OAEP_SHA512 RSA_Signature_PKCS1 RSA_Signature_PSS_MD5 RSA_Signature_PSS_SHA1 RSA_Signature_PSS_SHA224 RSA_Signature_PSS_SHA256 RSA_Signature_PSS_SHA384 RSA_Signature_PSS_SHA512

Curve25519

EdDSA_Signature

EC_P224

EdDSA_Signature

EC_P224

EdDSA_Signature

EC_P224

EdDSA_Signature

EC_P224

EdDSA_Signature

EC_P224

AES_Encryption_CBC AES_Decryption_CBC

Le chiavi sono assegnate al *Namespace* dell’utente che le importa.

L’importazione può essere avviata come segue.

Ruolo richiesto

Questa operazione richiede un’autenticazione con il ruolo Administrator.

Opzioni richieste

Opzione

Descrizione

-t, --type KEYTYPE

Il tipo della chiave generata. I valori possibili per l’argomento KEYTYPE sono riportati nella tabella precedente.

-m, --mechanism MECHANISM

I meccanismi della chiave generata. I valori possibili per l’argomento MECHANISM sono riportati nella tabella precedente.

-p, --prime-p TEXT

Il primo p per le chiavi RSA, codificato in base 64

-p, --prime-p TEXT

Il primo q per le chiavi RSA, codificato in base 64

-e, --public-exponent TEXT

L’esponente pubblico per le chiavi RSA, codificato in base64

-d, --data TEXT

I dati delle chiavi ED25519 o ECDSA_*, codificati in base64.

Opzioni opzionali

Opzione

Descrizione

-k, --key-id TEXT

L’ID della nuova chiave

--tags TEXT

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

Tasto di cancellazione#

Il NetHSM può cancellare le chiavi dal Key Store. Gli utenti possono cancellare solo le chiavi del loro *Namespace*.

Ruolo richiesto

Questa operazione richiede un’autenticazione con il ruolo Administrator.

Argomenti

Argomento

Descrizione

KEY_ID

L’ID della chiave da eliminare

Esempio

$ nitropy nethsm --host $NETHSM_HOST delete-key myFirstKey
Key myFirstKey deleted on NetHSM localhost:8443

Chiavi dell’elenco#

Il NetHSM può elencare tutte le chiavi del Key Store che si trovano nel *Namespace* dell’utente corrente.

L’elenco può essere recuperato come segue.

Ruolo richiesto

Questa operazione richiede un’autenticazione con il ruolo Administrator o Operator.

Opzioni opzionali

Opzione

Descrizione

-f, --filter TEXT

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

Mostra dettagli chiave#

NetHSM può fornire informazioni più dettagliate su una chiave memorizzata. Gli utenti possono accedere solo alle chiavi del proprio *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

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-----

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-----

Tag per le chiavi#

I tag possono essere usati per impostare restrizioni di accesso a grana fine sulle chiavi e sono una caratteristica opzionale. A una chiave possono essere assegnati uno o più tag. Gli utenti Operatori possono vedere tutte le chiavi, ma possono usare solo quelle con almeno un Tag corrispondente. Se una chiave non ha Tag può essere utilizzata da tutti gli utenti Operatori. Un Tag non può essere modificato da un Operatore utente.

Per sapere come usare i Tags sugli account degli Operatori, consultare il capitolo Tags for Users.

Nota

I Tags sono gestiti senza restrizioni dagli utenti con il ruolo Administrator.

Il Tag può essere aggiunto come segue.

Ruolo richiesto

Questa operazione richiede un’autenticazione con il ruolo Administrator.

Argomenti

Argomento

Descrizione

KEY_ID

L’ID della chiave su cui impostare il tag

RSA

Il tag da impostare sulla chiave

Esempio

$ nitropy nethsm --host $NETHSM_HOST add-key-tag myFirstKey berlin
Added tag berlin for key myFirstKey on the NetHSM localhost:8443

Il Tag può essere eliminato come segue.

Ruolo richiesto

Questa operazione richiede un’autenticazione con il ruolo Administrator.

Argomenti

Argomento

Descrizione

KEY_ID

L’ID della chiave su cui impostare il tag.

RSA

Il tag da impostare sulla chiave.

Esempio

$ nitropy nethsm --host $NETHSM_HOST delete-key-tag myFirstKey berlin
Deleted tag berlin for key myFirstKey on the NetHSM localhost:8443

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

-k, --key-id TEXT

L’ID della chiave per cui impostare il certificato

Opzioni opzionali

Opzione

Descrizione

-m, --mechanism MECHANISM

Il tipo MIME del certificato. I tipi MIME disponibili sono elencati sopra.

Argomenti

Argomento

Descrizione

OAEP_MD5

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

Il certificato può essere recuperato come segue.

Ruolo richiesto

Questa operazione richiede un’autenticazione con il ruolo Administrator o Operator.

Opzioni richieste

Opzione

Descrizione

-k, --key-id TEXT

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-----

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

-k, --key-id TEXT

L’ID della chiave per la quale generare il CSR

--country TEXT

Il nome del paese

--state-or-province TEXT

Il nome dello Stato o della provincia

--locality TEXT

Il nome della località

--organization TEXT

Il nome dell’organizzazione

--organizational-unit TEXT

Il nome dell’unità organizzativa

--common-name TEXT

Il nome comune

--email-address TEXT

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-----

Operazioni chiave#

Tutte le operazioni descritte in questo capitolo possono essere eseguite solo per le chiavi che si trovano nel *Namespace* dell’utente corrente.

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

-k, --key-id TEXT

L’ID della chiave con cui crittografare i dati

-d, --data TEXT

I dati in codifica Base64

-m, --mode [AES_CBC]

La modalità di crittografia

-iv, --initialization-vector TEXT

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==

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

-k, --key-id TEXT

L’ID della chiave per decifrare l’ampiezza dei dati

-d, --data TEXT

I dati crittografati in codifica Base64

-d, --data TEXT

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!

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

-k, --key-id TEXT

L’ID della chiave per firmare la larghezza dei dati

-d, --data TEXT

I dati da firmare codificati utilizzando Base64

-d, --data TEXT

La modalità del segno

Esempio

$ nitropy nethsm -h $NETHSM_HOST sign -k myFirstKey -m PKCS1 -d "$(cat data.digest)" | base64 -d > data.sig

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

KEY_ID

Byte da recuperare

Esempio

nitropy nethsm --host $NETHSM_HOST random 4
94A2rg==