

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

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

**Anmerkung**  <a name="out-of-date-message"></a>
Der Inhalt dieser Seite ist möglicherweise nicht aktuell. Das neueste Update finden Sie auf der [FreeRTOS.org Bibliotheksseite](https://www.freertos.org/Documentation/03-Libraries/01-Library-overview/01-All-libraries).

## -Übersicht
<a name="freertos-pkcs-overview"></a>

Der Public Key Cryptography Standard \#11 definiert eine plattformunabhängige API zur Verwaltung und Verwendung kryptografischer Token. [PKCS \#11](https://en.wikipedia.org/wiki/PKCS_11) bezieht sich auf die durch den Standard definierte API und auf den Standard selbst. Die kryptografische PKCS \#11 -API abstrahiert Schlüsselspeicher, get/set Eigenschaften für kryptografische Objekte und Sitzungssemantik. Sie wird häufig für die Manipulation gängiger kryptografischer Objekte verwendet und ist wichtig, weil die darin spezifizierten Funktionen es Anwendungssoftware ermöglichen, kryptografische Objekte zu verwenden, zu erstellen, zu ändern und zu löschen, ohne dass diese Objekte jemals dem Speicher der Anwendung zugänglich gemacht werden. Zum Beispiel verwenden AWS FreeRTOS-Referenzintegrationen eine kleine Teilmenge der PKCS \#11 -API, um auf den geheimen (privaten) Schlüssel zuzugreifen, der erforderlich ist, um eine Netzwerkverbindung herzustellen, die durch das [Transport Layer Security (TLS)](https://en.wikipedia.org/wiki/Transport_Layer_Security) -Protokoll authentifiziert und gesichert wird, ohne dass die Anwendung den Schlüssel jemals „sieht“.

Die CorePKCS11-Bibliothek enthält eine softwarebasierte Scheinimplementierung der PKCS \#11 -Schnittstelle (API), die die von Mbed TLS bereitgestellten kryptografischen Funktionen verwendet. Die Verwendung eines Softwaremocks ermöglicht eine schnelle Entwicklung und Flexibilität. Es wird jedoch erwartet, dass Sie das Modell durch eine Implementierung ersetzen, die speziell auf den sicheren Schlüsselspeicher Ihrer Produktionsgeräte zugeschnitten ist. Im Allgemeinen verteilen Anbieter von sicheren Kryptoprozessoren, wie Trusted Platform Module (TPM), Hardware Security Module (HSM), Secure Element oder jede andere Art von sicherer Hardware-Enklave, zusammen mit der Hardware eine PKCS \#11 -Implementierung. Der Zweck der reinen Software-Mock-Bibliothek CorePKCS11 besteht daher darin, eine nicht hardwarespezifische PKCS \#11 -Implementierung bereitzustellen, die ein schnelles Prototyping und eine schnelle Entwicklung ermöglicht, bevor auf eine kryptoprozessorspezifische PKCS \#11 -Implementierung in Produktionsgeräten umgestellt wird.

Nur ein Teil des PKCS \#11 -Standards ist implementiert, wobei der Schwerpunkt auf Operationen mit asymmetrischen Schlüsseln, Generierung von Zufallszahlen und Hashing liegt. Zu den gezielten Anwendungsfällen gehören die Zertifikats- und Schlüsselverwaltung für die TLS-Authentifizierung sowie die Überprüfung von Codesignaturen auf kleinen eingebetteten Geräten. Sehen Sie sich die Datei `pkcs11.h` (bezogen von OASIS, dem Standardtext) im FreeRTOS-Quellcode-Repository an. In der [FreeRTOS-Referenzimplementierung](https://docs.aws.amazon.com/embedded-csdk/latest/lib-ref/libraries/standard/corePKCS11/docs/doxygen/output/html/index.html) werden PKCS \#11 -API-Aufrufe von der TLS-Hilfsschnittstelle ausgeführt, um währenddessen die TLS-Client-Authentifizierung durchzuführen. `SOCKETS_Connect` PKCS \#11 -API-Aufrufe werden auch von unserem einmaligen Entwickler-Bereitstellungs-Workflow ausgeführt, um ein TLS-Client-Zertifikat und einen privaten Schlüssel für die Authentifizierung beim MQTT-Broker zu importieren. AWS IoT Für diese beiden Anwendungsfälle, Bereitstellung und TLS-Client-Authentifizierung, muss nur ein kleiner Teil des PKCS \#11 -Schnittstellenstandards implementiert werden.

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

Die folgende Teilmenge von PKCS \#11 wird verwendet. Diese Liste entspricht in etwa der Reihenfolge, in der die Routinen für die Bereitstellung, TLS-Client-Authentifizierung und Bereinigung aufgerufen werden. Eine ausführliche Beschreibung der Funktionen finden Sie in der vom Standardausschuss bereitgestellten PKCS \#11 -Dokumentation.

### Allgemeine Einrichtung und Teardown-API
<a name="pkcs-required-setup-teardown"></a>
+ `C_Initialize`
+ `C_Finalize`
+ `C_GetFunctionList`
+ `C_GetSlotList`
+ `C_GetTokenInfo`
+ `C_OpenSession`
+ `C_CloseSession`
+ `C_Login`

### Bereitstellungs-API
<a name="pkcs-required-provisioning"></a>
+ `C_CreateObject CKO_PRIVATE_KEY` (für privaten Schlüssel des Geräts)
+ `C_CreateObject CKO_CERTIFICATE` (für Gerätezertifikat und Codeverifizierungszertifikat)
+ `C_GenerateKeyPair`
+ `C_DestroyObject`

### Client-Authentifizierung
<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`

## Unterstützung asymmetrischer Kryptosysteme
<a name="pkcs-asym-crypto"></a>

Die FreeRTOS-Referenzimplementierung verwendet PKCS \#11 2048-Bit-RSA (nur Signierung) und ECDSA mit der NIST-Kurve. P-256 Die folgenden Anweisungen beschreiben, wie ein Objekt auf der Grundlage eines Client-Zertifikats erstellt wird. AWS IoT P-256 

Stellen Sie sicher, dass Sie die folgenden (oder neueren) Versionen von AWS CLI und OpenSSL verwenden:

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

Beim folgenden Verfahren wird davon ausgegangen, dass Sie den `aws configure` Befehl zur Konfiguration von verwendet haben. AWS CLI Weitere Informationen finden Sie unter [Schnellkonfiguration mit `aws configure`](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html#cli-configure-quickstart-config) im *AWS Command Line Interface Benutzerhandbuch*.

**Um ein zu erstellen AWS IoT Ding, das auf einem P-256 Client-Zertifikat basiert**

1. Erstelle ein AWS IoT Ding.

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

1. Verwenden Sie OpenSSL, um einen P-256 Schlüssel zu erstellen.

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

1. Erstellen Sie eine Zertifikatregistrierungsanfrage, die mit dem in Schritt 2 erstellten Schlüssel signiert ist.

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

1. Senden Sie die Anfrage zur Zertifikatsregistrierung an. 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. Fügen Sie das Zertifikat (auf das die ARN-Ausgabe des vorherigen Befehls verweist) an das Objekt an.

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

1. Erstellen Sie eine Richtlinie. (Diese Richtlinie ist zu freizügig. Sie sollte nur für Entwicklungszwecke verwendet werden.)

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

   Im Folgenden finden Sie die Datei policy.json, die im Befehl `create-policy` angegeben ist. Sie können die `greengrass:*` Aktion auslassen, wenn Sie die FreeRTOS-Demo für Greengrass-Konnektivität und -Erkennung nicht ausführen möchten.

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

****  

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

------

1. Fügen Sie den Prinzipal (Zertifikat) und die Richtlinie an das Objekt an.

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

Führen Sie nun die Schritte im Abschnitt [Erste Schritte mit AWS IoT](https://docs.aws.amazon.com/iot/latest/developerguide/iot-gs.html) in diesem Handbuch aus. Vergessen Sie nicht, das von Ihnen erstellte Zertifikat und den privaten Schlüssel in die `aws_clientcredential_keys.h`-Datei zu kopieren. Kopieren Sie den Objektnamen in `aws_clientcredential.h`.

**Anmerkung**  
Das Zertifikat und der private Schlüssel sind nur zu Demonstrationszwecken fest codiert. Production-level Anwendungen sollten diese Dateien an einem sicheren Ort speichern.

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

Informationen zur Portierung der CorePKCS11-Bibliothek auf Ihre Plattform finden Sie unter [Portierung der CorePKCS11-Bibliothek im FreeRTOS](https://docs.aws.amazon.com/freertos/latest/portingguide/afr-porting-pkcs.html) Porting Guide.

## Speichernutzung
<a name="freertos-pkcs-memory"></a>


****  
<a name="corePKCS11-memory-estimate"></a>
<table>
<thead>
  <tr><th colspan="3">Codegröße von CorePKCS11 (Beispiel generiert mit GCC für ARM) Cortex-M</th></tr>
  <tr><th>Datei</th><th>Mit -O1-Optimierung</th><th>Mit -Os-Optimierung</th></tr>
</thead>
<tbody>
  <tr><td>core\_pkcs11.c</td><td>0,8 K</td><td>0,8 K</td></tr>
  <tr><td>core\_pki\_utils.c</td><td>0,5 K</td><td>0,3 K</td></tr>
  <tr><td>core\_pkcs11\_mbedtls.c</td><td>8,9 K</td><td>7,5 K</td></tr>
  <tr><td>Schätzungen insgesamt</td><td>10,2 K</td><td>8,6 K</td></tr>
</tbody>
</table>
