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.
Hinweis
- Erstellen Sie bei Bedarf einen Cloud HSM-Schlüssel für einen Schlüsselbund in einer von Cloud HSM unterstützten Region.
Laden Sie die Skripts zum Parsen der Attestierungswerte vom HSM-Hersteller herunter und installieren Sie sie. Laden Sie alle diese Skripts herunter:
verify_pubkey.py
parse_v1.py
parse_v2.py
Die Dokumentation zur Verwendung der Skripts findet sich am selben Speicherort.
Laden Sie das Skript zum Verifizieren von Attestierungen und den zugehörigen Voraussetzungen herunter und sehen Sie sich die Dokumentation für das Skript an.
Attestierung prüfen
Die Attestierungsprüfung kann automatisch über die Google Cloud Console oder manuell erfolgen. Laden Sie dazu das Attestierungs-Bundle und das Attestierungsskript herunter und führen Sie es lokal oder in der Cloud Shell aus.
Attestierungen über die Google Cloud Console prüfen
Sie können die Attestierung über die Google Cloud Console prüfen. Dadurch wird eine Cloud Shell geöffnet und mit den Code-Snippets vorbefüllt, die für die Attestierungsprüfung global erforderlich sind.
Rufen Sie in der Google Cloud Console die Seite Schlüsselverwaltung auf.
Wählen Sie den Schlüsselbund mit dem Schlüssel aus, den Sie attestieren möchten. Wählen Sie dann den Schlüssel aus.
Klicken Sie für die zu attestierende Schlüsselversion auf Mehr more_vert und wählen Sie Attestierung prüfen.
Klicken Sie im Dialogfeld Attestierung bestätigen 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.
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.
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.
Laden Sie die Attestierungs- und Zertifikatsketten herunter.
Console
Rufen Sie in der Google Cloud Console die Seite Schlüsselverwaltung auf.
Wählen Sie den Schlüsselbund mit dem Schlüssel aus, den Sie attestieren möchten. Wählen Sie dann den Schlüssel aus.
Klicken Sie für die zu attestierende Schlüsselversion auf Mehr more_vert und wählen Sie Attestierung prüfen.
Klicken Sie im Dialogfeld Bestätigung bestätigen auf Attestierungspaket herunterladen. Dadurch wird eine ZIP-Datei mit den Attestierungs- und Zertifikatsketten heruntergeladen.
Extrahieren Sie die Attestierungs- und Zertifikatsketten aus dem Attestierungspaket.
gcloud
Klicken Sie im oberen Fensterbereich der Konsole auf 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.
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] \
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] \
Laden Sie das Skript zum Prüfen von Attestierungen und die erforderlichen Elemente herunter und lesen Sie die Dokumentation zum Skript, um die Attestierung in der Attestierungsdatei mit den Zertifikaten in der Zertifikatsdatei zu 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 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.
Rufen Sie die Ressourcen-ID der Schlüsselversion ab. Sie können die Google Cloud Console, um die Ressourcen-ID der Schlüsselversion abzurufen, oder können Sie den folgenden Befehl ausführen:
gcloud kms keys versions list \ --location location \ --keyring key-ring-name \ --key key-name
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"
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}')"
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)
Vergleichen Sie die Werte von
RESOURCE_NAME_HEX
undKEYID_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 Feld0x0162
, um zu ermitteln, ob ein Schlüssel extrahierbar ist. Der Wert\x01
isttrue
und der Wert\x00
istfalse
.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äfixCKK_*
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.