Start · Sprachen · PHP · Referenz · rnp_key_revoke

rnp_key_revoke

Funktion

Widerruft einen OpenPGP-Schlüssel oder Unterschlüssel, indem eine kryptographische Widerrufssignatur erzeugt und dem Schlüssel hinzugefügt wird.

Kategorie: crypto

Signatur

rnp_key_revoke(RnpFFI $ffi, int $key, int $flags, string $hash, string $code, string $reason): bool

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

Typ
bool
Beschreibung
Gibt 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);
Schlüssel erfolgreich widerrufen.

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);
Unterschlüssel widerrufen.

// 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.