

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Libreria CorePKCS11
<a name="security-pkcs"></a>

**Nota**  <a name="out-of-date-message"></a>
Il contenuto di questa pagina potrebbe non essere aggiornato. Consulta la [pagina della FreeRTOS.org libreria](https://www.freertos.org/Documentation/03-Libraries/01-Library-overview/01-All-libraries) per l'ultimo aggiornamento.

## Panoramica di
<a name="freertos-pkcs-overview"></a>

Il Public Key Cryptography Standard \#11 definisce un'API indipendente dalla piattaforma per gestire e utilizzare i token crittografici. [PKCS \#11](https://en.wikipedia.org/wiki/PKCS_11) si riferisce all'API definita dallo standard e allo standard stesso. L'API crittografica PKCS \#11 astrae l'archiviazione delle chiavi, get/set le proprietà degli oggetti crittografici e la semantica delle sessioni. È ampiamente utilizzata per manipolare oggetti crittografici comuni ed è importante perché le funzioni che specifica consentono al software applicativo di utilizzare, creare, modificare ed eliminare oggetti crittografici, senza mai esporre tali oggetti alla memoria dell'applicazione. Ad esempio, le integrazioni di riferimento AWS FreerTOS utilizzano un piccolo sottoinsieme dell'API PKCS \#11 per accedere alla chiave segreta (privata) necessaria per creare una connessione di rete autenticata e protetta dal protocollo [Transport Layer Security (TLS) senza che l'](https://en.wikipedia.org/wiki/Transport_Layer_Security)applicazione «veda» la chiave.

La libreria CorePKCS11 contiene un'implementazione fittizia basata su software dell'interfaccia (API) PKCS \#11 che utilizza la funzionalità crittografica fornita da Mbed TLS. L'utilizzo di un software mock consente uno sviluppo e una flessibilità rapidi, ma è previsto che il mock venga sostituito con un'implementazione specifica per l'archiviazione sicura delle chiavi utilizzata nei dispositivi di produzione. In genere, i fornitori di criptoprocessori sicuri, come Trusted Platform Module (TPM), Hardware Security Module (HSM), Secure Element o qualsiasi altro tipo di enclave hardware sicura, distribuiscono un'implementazione PKCS \#11 con l'hardware. Lo scopo della finta libreria di mock del software CorePKCS11 è quindi quello di fornire un'implementazione PKCS \#11 non specifica per l'hardware che consenta la prototipazione e lo sviluppo rapidi prima di passare a un'implementazione PKCS \#11 specifica per criptoprocessori nei dispositivi di produzione.

Viene implementato solo un sottoinsieme dello standard PKCS \#11, con particolare attenzione alle operazioni che coinvolgono chiavi asimmetriche, generazione di numeri casuali e hashing. I casi d'uso mirati includono la gestione di certificati e chiavi per l'autenticazione TLS e la verifica della firma con firma in codice su piccoli dispositivi integrati. Guarda il file `pkcs11.h` (ottenuto da OASIS, il corpo standard) nel repository del codice sorgente di FreerTOS. Nell'implementazione di [riferimento di FreerTOS](https://docs.aws.amazon.com/embedded-csdk/latest/lib-ref/libraries/standard/corePKCS11/docs/doxygen/output/html/index.html), le chiamate API PKCS \#11 vengono effettuate dall'interfaccia helper TLS per eseguire l'autenticazione del client TLS durante. `SOCKETS_Connect` Le chiamate API PKCS \#11 vengono effettuate anche dal nostro flusso di lavoro monouso di provisioning per gli sviluppatori per importare un certificato client TLS e una chiave privata per l'autenticazione nel broker MQTT. AWS IoT Questi due casi d'uso, il provisioning e l'autenticazione del client TLS, richiedono l'implementazione solo di un piccolo sottoinsieme dello standard di interfaccia PKCS \#11.

## Funzionalità
<a name="freertos-pcks-features"></a>

Viene utilizzato il seguente sottoinsieme di PKCS \#11. L'ordine dell'elenco è pressappoco quello con cui le routine vengono chiamate per il provisioning, l'autenticazione client TLS e la pulizia. Per descrizioni dettagliate delle funzioni, consultate la documentazione PKCS \#11 fornita dal comitato standard.

### Configurazione generale e API di disattivazione
<a name="pkcs-required-setup-teardown"></a>
+ `C_Initialize`
+ `C_Finalize`
+ `C_GetFunctionList`
+ `C_GetSlotList`
+ `C_GetTokenInfo`
+ `C_OpenSession`
+ `C_CloseSession`
+ `C_Login`

### API di provisioning
<a name="pkcs-required-provisioning"></a>
+ `C_CreateObject CKO_PRIVATE_KEY` (per chiave privata dispositivo)
+ `C_CreateObject CKO_CERTIFICATE` (per certificato dispositivo e certificato di verifica del codice)
+ `C_GenerateKeyPair`
+ `C_DestroyObject`

### Autenticazione client
<a name="pkcs-required-client-auth"></a>
+ `C_GetAttributeValue`
+ `C_FindObjectsInit`
+ `C_FindObjects`
+ `C_FindObjectsFinal`
+ `C_GenerateRandom`
+ `C_SignInit`
+ `C_Sign`
+ `C_VerifyInit`
+ `C_Verify`
+ `C_DigestInit`
+ `C_DigestUpdate`
+ `C_DigestFinal`

## Supporto per sistema di crittografia asimmetrica
<a name="pkcs-asym-crypto"></a>

L'implementazione di riferimento di FreerTOS utilizza PKCS \#11 RSA a 2048 bit (solo firma) ed ECDSA con la curva NIST. P-256 Le seguenti istruzioni descrivono come creare un oggetto basato su un certificato client. AWS IoT P-256 

Assicurati di utilizzare le seguenti (o più recenti) versioni di AWS CLI e OpenSSL:

```
aws --version
aws-cli/1.11.176 Python/2.7.9 Windows/8 botocore/1.7.34

openssl version
OpenSSL 1.0.2g  1 Mar 2016
```

La procedura seguente presuppone che sia stato utilizzato il `aws configure` comando per configurare. AWS CLI Per ulteriori informazioni, vedere [Configurazione rapida con `aws configure`](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html#cli-configure-quickstart-config) nella *Guida per l'AWS Command Line Interface utente*.

**Per creare un AWS IoT cosa basata su un certificato P-256 client**

1. Crea qualsiasi AWS IoT cosa.

   ```
   aws iot create-thing --thing-name {{thing-name}}
   ```

1. Usa OpenSSL per creare una chiave. P-256 

   ```
   openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:P-256 -pkeyopt ec_param_enc:named_curve -outform PEM -out {{thing-name}}.key
   ```

1. Creare una richiesta di registrazione dei certificati firmata dalla chiave creata nella fase 2.

   ```
   openssl req -new -nodes -days 365 -key {{thing-name}}.key -out {{thing-name}}.req
   ```

1. Invia la richiesta di registrazione del certificato a. AWS IoT

   ```
   aws iot create-certificate-from-csr  \
     --certificate-signing-request file://{{thing-name}}.req --set-as-active  \
     --certificate-pem-outfile {{thing-name}}.crt
   ```

1. Collegare il certificato (cui fa riferimento l'output ARN mediante il comando precedente) all'oggetto.

   ```
   aws iot attach-thing-principal --thing-name {{thing-name}} \
     --principal "arn:aws:iot:{{us-east-1}}:{{123456789012}}:cert/{{86e41339a6d1bbc67abf31faf455092cdebf8f21ffbc67c4d238d1326c7de729}}"
   ```

1. Creazione di una policy. (Questa politica è troppo permissiva. Dovrebbe essere usato solo per scopi di sviluppo.)

   ```
   aws iot create-policy --policy-name FullControl --policy-document file://policy.json
   ```

   Di seguito è riportato un elenco relativo al file policy.json specificato nel comando `create-policy`. Puoi omettere l'`greengrass:*`azione se non vuoi eseguire la demo di FreerTOS per la connettività e il rilevamento di Greengrass.

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Action": "iot:*",
         "Resource": "*"
       },
       {
         "Effect": "Allow",
         "Action": "greengrass:*",
         "Resource": "*"
       }
     ]
   }
   ```

------

1. Collegare l'entità principale (certificato) e la policy all'oggetto.

   ```
   aws iot attach-principal-policy --policy-name FullControl \
     --principal "arn:aws:iot:us-east-1:{{123456789012}}:cert/{{86e41339a6d1bbc67abf31faf455092cdebf8f21ffbc67c4d238d1326c7de729}}"
   ```

Ora seguire le fasi illustrate nella sezione [Nozioni di base su AWS IoT](https://docs.aws.amazon.com/iot/latest/developerguide/iot-gs.html) di questa guida. Non dimenticare di copiare la chiave privata e del certificato creati nel file `aws_clientcredential_keys.h`. Copiare il nome dell'oggetto in `aws_clientcredential.h`.

**Nota**  
Il certificato e la chiave privata sono codificati solo a scopo dimostrativo. Production-level le applicazioni devono archiviare questi file in un luogo sicuro.

## Portabilità
<a name="freertos-pkcs-porting"></a>

Per informazioni sul porting della libreria CorePKCS11 sulla tua piattaforma, vedi Porting the CorePKCS11 Library nella [FreerTOS Porting Guide](https://docs.aws.amazon.com/freertos/latest/portingguide/afr-porting-pkcs.html).

## Uso della memoria
<a name="freertos-pkcs-memory"></a>


****  
<a name="corePKCS11-memory-estimate"></a>
<table>
<thead>
  <tr><th colspan="3">Dimensione del codice di CorePKCS11 (esempio generato con GCC per ARM) Cortex-M</th></tr>
  <tr><th>File</th><th>Con ottimizzazione -O1</th><th>Con ottimizzazione -Os</th></tr>
</thead>
<tbody>
  <tr><td>core\_pkcs11.c</td><td>0,8K</td><td>0,8 K</td></tr>
  <tr><td>core\_pki\_utils.c</td><td>0,5K</td><td>0,3 K</td></tr>
  <tr><td>core\_pkcs11\_mbedtls.c</td><td>8,9K</td><td>7,5 K</td></tr>
  <tr><td>Stime totali</td><td>10,2 K</td><td>8,6K</td></tr>
</tbody>
</table>
