Attestierungen verifizieren

In diesem Thema erfahren Sie, wie Sie Attestierungen für Cloud HSM-Schlüssel prüfen, die immer in einem Hardware-Sicherheitsmodul (HSM) gespeichert sind.

Überblick

In der Kryptografie ist eine Attestierung eine maschinenlesbare, programmgesteuerte Anweisung, die von einer Software vorgenommen wird. Attestierungen sind eine wichtige Komponente des vertrauenswürdigen Computing und können aus Compliance-Gründen erforderlich sein.

Um die Attestierungen anzuzeigen und zu prüfen, fordern Sie eine kryptografisch signierte Attestierungserklärung vom HSM zusammen mit den zum Signieren verwendeten Zertifikatsketten an. Die Attestierungserklärung wird von der HSM-Hardware erstellt und durch Zertifikate signiert, die Google und dem HSM-Hersteller gehören.

Nachdem Sie Attestierungserklärung und Zertifikatsketten heruntergeladen haben, können Sie die Attribute oder die Gültigkeit der Attestierung mit den Zertifikatsketten prüfen.

Das Attestierungsskript ist ein von Google entwickeltes Open-Source-Python-Skript. Anhand des Quellcodes für das Skript können Sie mehr über das Attestierungsformat und die Funktionsweise der Verifizierung erfahren. Sie können ihn auch als Modell für eine benutzerdefinierte Lösung verwenden.

Die Beispiele in diesem Thema wurden für Linux-Umgebungen erstellt, einschließlich Cloud Shell. Damit Sie macOS- oder Windows-Clients folgen können, müssen Sie möglicherweise Änderungen vornehmen.

Hinweise

Attestierung prüfen

Die Attestierungsüberprüfung kann entweder automatisch über die Google Cloud Console oder manuell durchgeführt werden. Dazu laden Sie das Attestierungs-Bundle und das Attestierungsskript herunter und führen es lokal oder in Cloud Shell aus.

Attestierungen über die Google Cloud Console verifizieren

Sie können die Attestierung über die Google Cloud Console verifizieren, die Cloud Shell öffnet und die Code-Snippets enthält, die für die gesamte Attestierungsprüfung erforderlich sind.

  1. Rufen Sie in der Google Cloud Console die Seite Schlüsselverwaltung auf.

    Zur Seite „Schlüsselverwaltung“

  2. Wählen Sie den Schlüsselbund mit dem Schlüssel aus, den Sie attestieren möchten. Wählen Sie dann den Schlüssel aus.

  3. Klicken Sie für die zu attestierende Schlüsselversion auf Mehr und wählen Sie Attestierung prüfen.

  4. Klicken Sie im Dialogfeld Attestierung prüfen auf Cloud Shell öffnen. Dadurch wird die Cloud Shell geöffnet und mit dem für einen kompletten Durchlauf des Überprüfungsprozesses erforderlichen Code-Snippet vorabbefüllt.

  5. Prüfen Sie das vorabbefüllte Code-Snippet in Cloud Shell. Das Snippet lädt das Attestierungsprüfungsskript und dessen Abhängigkeiten herunter, führt gcloud-Befehle aus, um die Attestierungs- und Zertifikatsketten herunterzuladen, und führt dann das Skript aus, um die Attestierung zu prüfen.

  6. Führen Sie das Code-Snippet aus, um die Attestierung zu prüfen.

Attestierung manuell prüfen

Die Attestierung, die Zertifikatsketten und das Skript zur Attestierungsprüfung müssen heruntergeladen werden, bevor die Attestierung manuell verifiziert werden kann.

  1. Laden Sie die Attestierungs- und Zertifikatsketten herunter.

    Console

    1. Rufen Sie in der Google Cloud Console die Seite Schlüsselverwaltung auf.

      Zur Seite „Schlüsselverwaltung“

    2. Wählen Sie den Schlüsselbund mit dem Schlüssel aus, den Sie attestieren möchten. Wählen Sie dann den Schlüssel aus.

    3. Klicken Sie für die zu attestierende Schlüsselversion auf Mehr und wählen Sie Attestierung prüfen.

    4. Klicken Sie im Dialogfeld Bestätigung bestätigen auf Attestierungspaket herunterladen. Dadurch wird eine ZIP-Datei mit den Attestierungs- und Zertifikatsketten heruntergeladen.

    5. Extrahieren Sie die Attestierungs- und Zertifikatsketten aus dem Attestierungspaket.

    gcloud

    1. Klicken Sie im oberen Fensterbereich der Konsole auf Cloud Shell aktivieren.

      Cloud Shell aktivieren Im unteren Bereich der Konsole wird ein neuer Frame für die Cloud Shell-Sitzung geöffnet, in dem eine Befehlszeilen-Eingabeaufforderung angezeigt wird. Die Initialisierung der Shell-Sitzung kann einige Sekunden dauern.

      Cloud Shell-Sitzung

    2. Führen Sie in der Eingabeaufforderung der Cloud Shell-Befehlszeile den Befehl gcloud kms keys versions describe aus, um die Attestierung für den zu bestätigenden Schlüssel abzurufen. Das Flag --attestation-file gibt den Pfad und den Dateinamen für die abgerufene Attestierung an.

      gcloud kms keys versions describe key-version \
       --key key-name \
       --location location \
       --keyring keyring-name \
       --attestation-file [attestation-file] \
      
    3. Führen Sie in der Eingabeaufforderung der Cloud Shell-Befehlszeile den Befehl gcloud kms keys versions get-certificate-chain aus, um die Zertifikatkette für den Schlüssel abzurufen, den Sie bestätigen möchten. Das Flag --output-file gibt den Pfad und den Dateinamen für die abgerufenen Zertifikate an.

      gcloud kms keys versions get-certificate-chain key-version \
       --key key-name \
       --location location \
       --keyring keyring-name \
       --output-file [certificates-file] \
      
  2. Laden Sie das Skript zum Prüfen von Attestierungen und die dazu erforderlichen Elemente herunter und gehen Sie die Dokumentation für das Skript durch, um die Attestierung in der Attestierungsdatei mit den Zertifikaten in der Zertifikatsdatei zu bestätigen.

Werte der Attestierung parsen

Die HSM-Herstellerdokumentation enthält eine umfassende Anleitung zur Verwendung der zugehörigen Skripts zum Parsen der Werte einer Attestierung und zum Prüfen des öffentlichen Schlüssels für ein asymmetrisches Schlüsselpaar. Die Attestierung muss mit folgendem Befehl entpackt werden, bevor sie geparst werden kann.

  • Entpacken Sie die komprimierte Attestierung.

    gzip -d < compressed_attestation.dat > attestation.dat
    

Diese Links führen direkt zu bestimmten Anleitungen des HSM-Herstellers:

Die Anleitung zum Parsen des Attestierungswerts enthält einen Verweis auf allgemeine Felder in der Attestierung, nicht spezifisch für HSM-Schlüssel in Cloud HSM.

In folgenden Abschnitten wird gezeigt, wie Sie für Cloud HSM spezifische Informationen zu Ihren Schlüsseln prüfen.

Die Versions-ID des Schlüssels überprüfen

Sie können prüfen, ob der SHA-256-Hash der Schlüsselversion-Ressourcen-ID in der Bestätigung enthalten ist. Der Ressourcenname des Schlüssels ist in der Attestierungsdatei Teil des Felds 0x0102 oder des Felds "Schlüssel-ID". Die Schlüssel-ID besteht aus zwei verketteten Hash-Digests SHA-256 im Hexadezimalformat. Der zweite sollte dem Ressourcennamen des Schlüssels entsprechen.

  1. Rufen Sie die Ressourcen-ID der Schlüsselversion ab. Sie können die Google Cloud Console verwenden, um die Ressourcen-ID der Schlüsselversion abzurufen, oder den folgenden Befehl ausführen:

    gcloud kms keys versions list \
       --location location \
       --keyring key-ring-name \
       --key key-name
    
  2. Weisen Sie der soeben abgerufenen Schlüsselversions-Ressourcen-ID in der Befehlszeile resource_name zu.

    RESOURCE_NAME="projects/project-id/locations/location/keyRings/key-ring-name/cryptoKeys/key-name/cryptoKeyVersions/key-version"
    
  3. Da das Parsing-Skript alle Attestierungsfelder im Hexadezimalformat ausgibt, wäre die Schlüssel-ID zweimal in Hexadezimalformat formatiert worden. (Einmal beim Erstellen der Schlüssel-ID, das andere mal beim Parsen der Attestierung.) Prüfen Sie, ob der Ressourcenname mit der Schlüssel-ID übereinstimmt. Wandeln Sie dazu den Ressourcennamen in einen SHA-256-Hex-Digest um, stellen eine Hexadezimal-Konvertierung der Schlüssel-ID in der Attestierungsdatei wieder her und vergleichen die beiden.

    RESOURCE_NAME_HEX="$(echo -n ${RESOURCE_NAME} | openssl dgst -sha256 -hex | awk '{print $2}')"
    
  4. Das Parse-Skript gibt alle Attestierungsfelder im Hexadezimalformat aus und die Schlüssel-ID wird intern ein zweites Mal Hex-codiert. Legen Sie für die Umgebungsvariable KEYID_HEX den Wert der Schlüssel-ID mit einer decodierten Hex-Codierungsebene fest:

    KEYID_HEX=$(grep -m 1 0x0102 /path/to/parsed/attestation.dat | awk '{print $2}' | xxd -p -r)
    
  5. Vergleichen Sie die Werte von RESOURCE_NAME_HEX und KEYID_HEX als Strings:

    test  ${RESOURCE_NAME_HEX} == ${KEYID_HEX:(-64)} || echo "Values don't match"
    

    Wenn die Werte übereinstimmen, wird keine Ausgabe zurückgegeben und der Befehl wird mit dem Code 0 beendet.

Andere Eigenschaften des Schlüssels bestätigen

Sie können verschiedene Schlüsselattribute anzeigen lassen, die den Feldern im PKCS #11-Standard entsprechen. Anhand der folgenden Beispiele können Sie weitere Eigenschaften des Schlüssels überprüfen.

  • Ob ein Schlüssel extrahierbar ist, wird im Feld 0x0102 der geparsten Ausgabe gespeichert. Prüfen Sie das Feld 0x0162, um zu ermitteln, ob ein Schlüssel extrahierbar ist. Der Wert \x01 ist true und der Wert \x00 ist false.

    Cloud HSM-Schlüssel können nicht extrahiert werden.

    grep '0x0162:' /path/to/parsed/attestation.dat
    
  • Wie der Schlüssel in den HSM gelangt ist (direkt erstellt oder importiert), wird im Feld 0x0163 gespeichert. Wenn der Schlüssel lokal im HSM erstellt wurde, wird das Feld auf \x01 gesetzt. Das Feld eines importierten Schlüssels ist auf \x00 gesetzt.

    Sie können einige Informationen darüber ableiten, wie der Schlüssel im HSM entstanden ist. Wenn der Schlüssel in Cloud HSM erstellt wurde, bedeutet dies, dass der Schlüssel nie unverschlüsselt außerhalb eines HSM gespeichert wurde. Wenn der Schlüssel importiert wurde, garantiert der Importmechanismus, dass der Schlüssel während des Importvorgangs und anschließend in Cloud HSM geschützt ist.

    grep '0x0163:' /path/to/parsed/attestation.dat
    
  • Der Typ eines Schlüssels wird im Feld 0x0100 gespeichert. Schlüsseltypen werden im PCKS#11-Standard mit dem Präfix CKK_* dokumentiert. Ein AES-Schlüssel hat beispielsweise den Typ \x1f.

    grep '0x0100:' /path/to/parsed/attestation.dat
    

Weitere Informationen

Sie verifizieren eine Bestätigung, um festzustellen, ob eine Schlüsselversion in einem HSM erstellt wurde.