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 anzusehen und zu überprüfen, fordern Sie eine kryptografisch signierte Attestierungserklärung vom HSM an, zusammen mit dem Zertifikat-Bundle, das zum Signieren verwendet wird. Die Attestierungserklärung wird von der HSM-Hardware erstellt und durch Zertifikate signiert, die Google und dem HSM-Hersteller gehören.

Nachdem Sie die Attestierungserklärung und die Zertifikate heruntergeladen haben, überprüfen Sie die Gültigkeit der Zertifikate im Bundle und anschließend die Attestierungserklärung selbst.

Das Format der Attestierungserklärung wird vom HSM-Hersteller festgelegt. Es ist nicht möglich, eine Attestierungserklärung mit der Cloud Console, der Cloud KMS API oder dem gcloud-Tool zu bestätigen. Die Überprüfung erfolgt absichtlich unabhängig von Google.

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 beziehen sich auf Linux-Umgebungen, einschließlich Cloud Shell. Damit Sie auch auf macOS- oder Windows-Clients folgen können, müssen Sie möglicherweise Änderungen vornehmen.

Hinweis

Herunterladen der Artefakte

Bevor Sie einen Schlüssel attestieren, laden Sie die Zertifikate und die Attestierungserklärung herunter.

Herunterladen der Zertifikate

Die Signatur einer Attestierung lässt sich mit einem Zertifikatspaket überprüfen, das zu den Root-Zertifikaten für Google und den HSM-Hersteller führt, und kann von den Zertifizierungsstellen (CA) für Google und den HSM-Hersteller werden.

  1. Laden Sie das Zertifikatspaket herunter, das zum Root-Zertifikat von Google führt.

    curl -O https://www.gstatic.com/cloudhsm/cloud-kms-prod-[location]-google.pem
    
  2. Laden Sie das Zertifikatspaket herunter, das zum Root-Zertifikat des HSM-Herstellers führt.

    curl -O https://www.gstatic.com/cloudhsm/cloud-kms-prod-[location]-cavium.pem
    
  3. Laden Sie das Root-Zertifikat von Google herunter.

    curl -O https://www.gstatic.com/cloudhsm/roots/global_1498867200.pem
    
  4. Laden Sie das Root-Zertifikat und den öffentlichen Schlüssel des HSM-Herstellers herunter und extrahieren Sie sie.

    curl -O https://www.marvell.com/content/dam/marvell/en/public-collateral/security-solutions/liquid_security_certificate.zip
    
    unzip liquid_security_certificate.zip
    

    Das Zertifikat wird in liquid_security_certificate.crt und der öffentliche Schlüssel in liquid_security_certificate.txt extrahiert.

Laden Sie die Attestierungserklärung herunter

Sie können die Attestierung für eine kryptografische Schlüsselversion mit der Google Cloud Console oder der Befehlszeile herunterladen. Die Attestierung wird direkt vom HSM-Gerät heruntergeladen, das den Schlüssel enthält.

Console

  1. Rufen Sie in der Cloud Console die Seite Cryptographic Keys (Kryptografische Schlüssel) auf.

    Zur Seite "Cryptographic Keys" (Kryptografische Schlüssel)

  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 abrufen aus.

  4. Klicken Sie im Dialogfeld Bestätigung abrufen auf Download. Die Attestierungsdatei wird auf Ihr lokales System heruntergeladen.

    Das Format für den Namen der Attestierungsdatei lautet [keyring-name]-[key-name]-[key-version]-[attestation-format]-attestation.dat. Die Bestandteile des Dateinamens sind per Bindestrich voneinander getrennt. Aus diesem Grund wird Platzhaltertext von eckigen Klammern ([ und ]) umgeben.

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 das Attestierungsformat für den Schlüssel abzurufen, den Sie bestätigen möchten.

    gcloud kms keys versions describe key-version \
      --key key-name \
      --location location \
      --keyring keyring-name
    

    Die Ausgabe dieses Befehls zeigt das Attestierungsformat der Schlüsselversion, das Sie für den nächsten Schritt benötigen.

  3. Geben Sie in der Cloud Shell-Befehlszeile den Befehl gcloud kms keys versions describe ein, um die Attestierung für den zu attestierenden Schlüssel abzurufen. Ersetzen Sie dabei attestation-format durch das im vorherigen Schritt abgerufene Attestierungsformat. Das Flag --attestation-file gibt den Pfad und den Dateinamen für die abgerufene Attestierung an. Die Bestandteile des Dateinamens sind per Bindestrich voneinander getrennt. Aus diesem Grund wird Platzhaltertext von eckigen Klammern ([ und ]) umgeben.

    gcloud kms keys versions describe key-version \
     --key key-name \
     --location location \
     --keyring keyring-name \
     --attestation-file \
     [keyring-name]-[key-name]-[key-version]-[attestation-format]-attestation.dat
    

Signatur der Attestierung verifizieren

Sie können ein Open-Source-Skript verwenden, um die kryptografische Signatur einer Attestierung zu prüfen.

Sie können auch den öffentlichen Schlüssel für ein asymmetrisches Schlüsselpaar prüfen.

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 dem folgenden Befehl dekomprimiert 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 den folgenden Abschnitten wird gezeigt, wie Sie Informationen zu Ihren für Cloud HSM spezifischen Schlüsseln überprü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 mit der Cloud Console die Ressourcen-ID der Schlüsselversion abrufen 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. Da die Verifizierung bewusst unabhängig von Google durchgeführt wird, können Sie eine Attestierung nicht mithilfe der Cloud Console, der Cloud KMS API oder des gcloud-Tools verifizieren.