Signatur
Beschreibung
rnp_key_revoke ist Teil der RNP-OpenPGP-Bibliothek für PHP und ermöglicht das Widerrufen eines Schlüssels oder Unterschlüssels. Dabei wird eine kryptographische Widerrufssignatur (Revocation Signature) erzeugt und dem betreffenden Schlüssel hinzugefügt. Dies ist ein standardisiertes OpenPGP-Verfahren gemäß RFC 4880.
Ein Schlüsselwiderruf ist notwendig, wenn ein Schlüssel kompromittiert wurde, nicht mehr verwendet wird oder der Eigentümer sich geändert hat. Nach dem Widerruf können andere Nutzer über den aktualisierten Keyserver oder per Export die Widerrufsinformation erhalten und den Schlüssel fortan als ungültig behandeln.
Der Parameter code gibt den standardisierten Widerrufsgrund an (z. B. "no" für keinen bestimmten Grund, "superseded" für einen ersetzten Schlüssel oder "compromised" für einen kompromittierten Schlüssel). Der Parameter reason erlaubt eine menschenlesbare Begründung.
Wichtig: Um einen Schlüssel zu widerrufen, muss der zugehörige geheime Primärschlüssel im Keyring verfügbar sein. Nur der Schlüsselinhaber bzw. ein designierter Widerrufer kann eine gültige Widerrufssignatur erzeugen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $ffi Pflicht | RnpFFI | Das RnpFFI-Objekt, das die aktuelle RNP-Kontext-Instanz repräsentiert und den Keyring enthält. |
|
| $key Pflicht | int | Ein Handle auf den zu widerrufenden Schlüssel oder Unterschlüssel, wie er von Funktionen wie rnp_locate_key zurückgegeben wird. |
|
| $flags Pflicht | int | Optionsflags für den Widerrufsvorgang. In der Regel wird 0 übergeben; reserviert für zukünftige Erweiterungen. |
|
| $hash Pflicht | string | Der zu verwendende Hash-Algorithmus für die Widerrufssignatur, z. B. "SHA256" oder "SHA512". |
|
| $code Pflicht | string | Der Widerrufsgrund-Code als Zeichenkette. Gültige Werte sind u. a. "no" (kein bestimmter Grund), "superseded" (ersetzt), "compromised" (kompromittiert) und "retired" (außer Betrieb genommen). |
|
| $reason Pflicht | string | Eine menschenlesbare Begründung für den Widerruf als Freitext-Zeichenkette, z. B. "Schlüssel wurde kompromittiert". |
Rückgabewert
true zurück, wenn die Widerrufssignatur erfolgreich erzeugt und dem Schlüssel hinzugefügt wurde. Bei einem Fehler (z. B. fehlender geheimer Schlüssel, ungültiges Handle oder ungültiger Hash-Algorithmus) wird false zurückgegeben.Beispiele
Einen kompromittierten Schlüssel widerrufen
<?php
// RNP-Kontext initialisieren
$ffi = rnp_ffi_create('GPG', 'GPG');
// Keyring aus einer Datei laden
rnp_load_keys($ffi, 'GPG', '/pfad/zum/secring.gpg', RNP_LOAD_SAVE_SECRET_KEYS);
// Schlüssel anhand der Benutzer-ID suchen
$key = 0;
rnp_locate_key($ffi, 'userid', 'alice@example.com', $key);
if ($key !== 0) {
// Schlüssel als kompromittiert widerrufen
$result = rnp_key_revoke($ffi, $key, 0, 'SHA256', 'compromised', 'Privater Schlüssel wurde gestohlen.');
if ($result) {
echo 'Schlüssel erfolgreich widerrufen.' . PHP_EOL;
// Aktualisierten Keyring exportieren und veröffentlichen
$output = 0;
rnp_output_to_memory($output, 0);
rnp_key_export($key, $output, RNP_KEY_EXPORT_PUBLIC | RNP_KEY_EXPORT_ARMORED);
$buf = '';
rnp_output_memory_get_buf($output, $buf, false);
echo $buf;
rnp_output_destroy($output);
} else {
echo 'Fehler beim Widerrufen des Schlüssels.' . PHP_EOL;
}
rnp_key_handle_destroy($key);
}
rnp_ffi_destroy($ffi);
Einen Unterschlüssel als überholt markieren
<?php
$ffi = rnp_ffi_create('GPG', 'GPG');
rnp_load_keys($ffi, 'GPG', '/pfad/zum/secring.gpg', RNP_LOAD_SAVE_SECRET_KEYS);
// Primärschlüssel suchen
$primaryKey = 0;
rnp_locate_key($ffi, 'fingerprint', 'ABCD1234ABCD1234ABCD1234ABCD1234ABCD1234', $primaryKey);
// Ersten Unterschlüssel abrufen
$subKey = 0;
rnp_key_get_subkey_at($primaryKey, 0, $subKey);
if ($subKey !== 0) {
// Unterschlüssel als 'superseded' widerrufen
$result = rnp_key_revoke($ffi, $subKey, 0, 'SHA512', 'superseded', 'Durch neuen Unterschlüssel ersetzt.');
echo $result ? 'Unterschlüssel widerrufen.' : 'Fehler beim Widerruf.' ;
echo PHP_EOL;
rnp_key_handle_destroy($subKey);
}
rnp_key_handle_destroy($primaryKey);
rnp_ffi_destroy($ffi);
// Wichtig · Fallstricke
Sicherheitshinweis: Ein Schlüsselwiderruf ist nur dann wirksam, wenn andere Kommunikationspartner die aktualisierte Widerrufsinformation erhalten. Stellen Sie sicher, dass der widerrufene Schlüssel nach dem Widerruf auf den relevanten Keyservern aktualisiert oder direkt an Kommunikationspartner übermittelt wird.
Geheimer Schlüssel erforderlich: Für das Erzeugen einer Widerrufssignatur muss der geheime Primärschlüssel im RnpFFI-Kontext geladen sein. Ist nur der öffentliche Schlüssel vorhanden, schlägt der Vorgang fehl.
Irreversibilität: Ein Schlüsselwiderruf kann nicht rückgängig gemacht werden. Handeln Sie daher mit Bedacht, bevor Sie einen Schlüssel widerrufen.