Coerbibliothek PKS11 - FreeRTOS

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.

Coerbibliothek PKS11

Anmerkung

Der Inhalt dieser Seite ist möglicherweise nichtup-to-date. Das neueste Update finden Sie auf der FreeRTOS.org-Bibliotheksseite.

Übersicht

Der Public Key Cryptography Standard #11 definiert eine plattformunabhängige API zur Verwaltung und Verwendung kryptografischer Token. PKCS #11 bezieht sich auf die im Standard definierte API und auf den Standard selbst. Die kryptografische API PKCS #11 abstrahiert Schlüsselspeicher, Get/Set-Eigenschaften für kryptografische Objekte und Sitzungssemantik. Es wird häufig für die Manipulation gängiger kryptografischer Objekte verwendet und ist wichtig, da die darin spezifizierten Funktionen es der Anwendungssoftware ermöglichen, kryptografische Objekte zu verwenden, zu erstellen, zu ändern und zu löschen, ohne dass diese Objekte jemals dem Speicher der Anwendung ausgesetzt werden. AWSFreeRTOS-Referenzintegrationen verwenden beispielsweise einen kleinen Teil 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) -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 kryptografische Funktionalität von Mbed TLS verwendet. Die Verwendung eines Software-Mocks ermöglicht eine schnelle Entwicklung und Flexibilität. Es wird jedoch erwartet, dass Sie den Mock durch eine Implementierung ersetzen, die speziell auf den sicheren Schlüsselspeicher Ihrer Produktionsgeräte zugeschnitten ist. Im Allgemeinen verteilen Anbieter sicherer Kryptoprozessoren wie Trusted Platform Module (TPM), Hardware Security Module (HSM), Secure Element oder jede andere Art von sicherer Hardware-Enklave eine PKCS #11 -Implementierung zusammen mit der Hardware. Der Zweck der CorePKCS11-Software-Mock-Bibliothek 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 liegt, die asymmetrische Schlüssel, Zufallszahlengenerierung und Hashing beinhalten. Zu den gezielten Anwendungsfällen gehören die Zertifikats- und Schlüsselverwaltung für die TLS-Authentifizierung und die Überprüfung von Code-Sign-Signaturen auf kleinen eingebetteten Geräten. Sehen Sie sich die Datei pkcs11.h (von OASIS, dem Standardtext) im FreeRTOS-Quellcode-Repository an. In der FreeRTOS-Referenzimplementierung 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 ebenfalls von unserem einmaligen Entwickler-Bereitstellungsworkflow ausgeführt, um ein TLS-Client-Zertifikat und einen privaten Schlüssel für die Authentifizierung beim MQTT-Broker zu importieren. AWS IoT Diese beiden Anwendungsfälle, Bereitstellung und TLS-Client-Authentifizierung, erfordern nur die Implementierung einer kleinen Teilmenge des PKCS #11 -Schnittstellenstandards.

Funktionen

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 detaillierte Beschreibung der Funktionen finden Sie in der PKCS #11 -Dokumentation, die vom Standardkomitee bereitgestellt wurde.

Allgemeine Einrichtung und Teardown-API

  • C_Initialize

  • C_Finalize

  • C_GetFunctionList

  • C_GetSlotList

  • C_GetTokenInfo

  • C_OpenSession

  • C_CloseSession

  • C_Login

Bereitstellungs-API

  • 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

  • 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

Die FreeRTOS-Referenzimplementierung verwendet PKCS #11 2048-Bit-RSA (nur Signierung) und ECDSA mit der NIST P-256-Kurve. Die folgende Anleitung beschreibt, wie Sie ein AWS IoT-Objekt auf Basis eines P-256-Clientzertifikats erstellen.

Stellen Sie sicher, dass Sie die folgenden (oder neuere) 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 habenAWS CLI. Weitere Informationen finden Sie unter Schnellkonfiguration mit aws configure im AWS Command Line InterfaceBenutzerhandbuch.

Um AWS IoT etwas zu erstellen, das auf einem P-256-Client-Zertifikat basiert
  1. Erstellen Sie ein AWS IoT-Objekt.

    aws iot create-thing --thing-name thing-name
  2. 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
  3. 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
  4. Senden Sie die Zertifikatregistrierungsanfrage 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
  5. 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"
  6. Erstellen Sie eine Richtlinie. (Diese Richtlinie ist zu freizügig. Es 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 weglassen, wenn Sie die FreeRTOS-Demo für Greengrass Connectivity and Discovery nicht ausführen möchten.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iot:*", "Resource": "*" }, { "Effect": "Allow", "Action": "greengrass:*", "Resource": "*" } ] }
  7. 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 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 für Demonstrationszwecke hardcodiert. Anwendungen auf Produktionsebene sollten diese Dateien an einem sicheren Ort speichern.

Portierung

Informationen zur Portierung der CorePKCS11-Bibliothek auf Ihre Plattform finden Sie unter Portierung der CorePKCS11-Bibliothek im FreeRTOS Porting Guide.

Nutzung für Speicher

Codegröße von CorePKCS11 (mit GCC generiertes Beispiel für ARM Cortex-M)
Datei Mit -O1-Optimierung Mit -Os Optimization
core_pkcs11.c 0,8 K 0,8 K
core_pki_utils.c 0,5 K 0,3 K
core_pkcs11_mbedtls.c 8,9 K 7,5 K
Schätzungen insgesamt 10,2K 8,6K