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 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 Werte der Attestierung vom HSM-Hersteller herunter und installieren Sie sie. Laden Sie jedes dieser Skripts herunter:
verify_pubkey.py
parse_v1.py
parse_v2.py
Lesen Sie die Dokumentation zur Verwendung der Skripts, die am selben Ort verfügbar sind.
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.
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.
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
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
Laden Sie das Root-Zertifikat von Google herunter.
curl -O https://www.gstatic.com/cloudhsm/roots/global_1498867200.pem
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 inliquid_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
Rufen Sie in der Cloud Console die Seite Cryptographic Keys (Kryptografische Schlüssel) 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 abrufen aus.
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
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 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.
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.
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
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. 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.