Start · Sprachen · PHP · Referenz · rnp_key_export_revocation

rnp_key_export_revocation

Funktion

Erzeugt und exportiert eine Widerrufssignatur (Revocation Certificate) für einen OpenPGP-Hauptschlüssel als armored oder binäre Ausgabe.

Kategorie: crypto

Signatur

rnp_key_export_revocation(RnpFFI $ffi, string $handle, int $flags, string $hash, string $code, string $reason): string|false

Beschreibung

rnp_key_export_revocation ist Teil der RNP-Bibliothek (eine OpenPGP-Implementierung für PHP) und ermöglicht es, ein Widerrufszertifikat für einen bestimmten OpenPGP-Hauptschlüssel zu erzeugen und zu exportieren. Das resultierende Zertifikat kann anschließend auf Schlüsselserver hochgeladen oder an Kommunikationspartner verteilt werden, um den Schlüssel als ungültig zu markieren.

Ein Widerrufszertifikat ist besonders wichtig, wenn ein privater Schlüssel kompromittiert wurde, verloren gegangen ist oder nicht mehr verwendet werden soll. Durch das Verteilen des Zertifikats können andere Benutzer erkennen, dass der öffentliche Schlüssel nicht mehr vertrauenswürdig ist.

Der Parameter flags steuert das Ausgabeformat (z. B. ASCII-Armor), hash gibt den verwendeten Hash-Algorithmus an (z. B. "SHA256"), code gibt den Widerrufsgrund als standardisierten Code an (z. B. "superseded", "compromised", "retired", "no") und reason enthält eine optionale menschenlesbare Begründung als Freitext.

Die Funktion gibt die exportierten Daten als string zurück oder false im Fehlerfall. Die RNP-Erweiterung muss dafür installiert und geladen sein (ext-rnp).

Parameter

Name Typ Default Beschreibung
$ffi Pflicht RnpFFI Eine gültige RNP-FFI-Instanz, die zuvor mit rnp_ffi_create() erstellt wurde.
$handle Pflicht string Ein Schlüssel-Handle (Key-Handle-String), der den Hauptschlüssel identifiziert, für den das Widerrufszertifikat erzeugt werden soll. Das Handle wird z. B. über rnp_locate_key() ermittelt.
$flags Pflicht int Bitmaske zur Steuerung der Ausgabe. Mit RNP_KEY_EXPORT_ARMORED wird ASCII-Armor aktiviert, andernfalls wird binäres Format verwendet.
$hash Pflicht string Name des Hash-Algorithmus, der für die Widerrufssignatur verwendet wird, z. B. "SHA256" oder "SHA512".
$code Pflicht string Standardisierter Widerrufsgrund-Code. Mögliche Werte: "no" (kein Grund angegeben), "superseded" (Schlüssel ersetzt), "compromised" (Schlüssel kompromittiert), "retired" (Schlüssel nicht mehr in Verwendung).
$reason Pflicht string Optionaler Freitext mit einer menschenlesbaren Begründung für den Widerruf. Kann ein leerer String sein.

Rückgabewert

Typ
string|false
Beschreibung
Gibt den exportierten Widerruf als string zurück (ASCII-armored oder binär, je nach flags). Im Fehlerfall wird false zurückgegeben.

Beispiele

Widerrufszertifikat für einen kompromittierten Schlüssel erzeugen

<?php
// RNP-FFI-Instanz erzeugen
$ffi = rnp_ffi_create('GPG', 'GPG');

// Schlüsselring aus Datei laden
rnp_load_keys($ffi, 'GPG', file_get_contents('/pfad/zu/secring.gpg'), RNP_LOAD_SAVE_SECRET_KEYS);

// Schlüssel anhand der Fingerprint-ID lokalisieren
$key = rnp_locate_key($ffi, 'fingerprint', 'ABCDEF1234567890ABCDEF1234567890ABCDEF12');

if ($key === false) {
    die('Schlüssel nicht gefunden.');
}

// Widerrufszertifikat erzeugen (ASCII-armored, SHA256, kompromittiert)
$revocation = rnp_key_export_revocation(
    $ffi,
    $key,
    RNP_KEY_EXPORT_ARMORED,
    'SHA256',
    'compromised',
    'Der private Schlüssel wurde auf einem kompromittierten System gespeichert.'
);

if ($revocation === false) {
    die('Fehler beim Erzeugen des Widerrufszertifikats.');
}

// Zertifikat in Datei speichern
file_put_contents('revocation.asc', $revocation);
echo "Widerrufszertifikat erfolgreich gespeichert.\n";
echo $revocation;

rnp_key_handle_destroy($key);
rnp_ffi_destroy($ffi);
Widerrufszertifikat erfolgreich gespeichert. -----BEGIN PGP PUBLIC KEY BLOCK----- ... -----END PGP PUBLIC KEY BLOCK-----

Widerrufszertifikat ohne Grund erzeugen und ausgeben

<?php
$ffi = rnp_ffi_create('GPG', 'GPG');

// Öffentlichen und privaten Schlüssel laden
rnp_load_keys($ffi, 'GPG', file_get_contents('pubring.gpg'), RNP_LOAD_SAVE_PUBLIC_KEYS);
rnp_load_keys($ffi, 'GPG', file_get_contents('secring.gpg'), RNP_LOAD_SAVE_SECRET_KEYS);

$key = rnp_locate_key($ffi, 'userid', 'Alice &lt;alice@example.com&gt;');

if ($key) {
    $cert = rnp_key_export_revocation(
        $ffi,
        $key,
        RNP_KEY_EXPORT_ARMORED,
        'SHA256',
        'no',    // kein spezifischer Grund
        ''       // kein Freitext
    );

    if ($cert !== false) {
        header('Content-Type: application/pgp-keys');
        header('Content-Disposition: attachment; filename="revoke.asc"');
        echo $cert;
    }

    rnp_key_handle_destroy($key);
}

rnp_ffi_destroy($ffi);

// Wichtig · Fallstricke

Sicherheitshinweis: Ein Widerrufszertifikat gewährt die Möglichkeit, einen Schlüssel dauerhaft ungültig zu erklären. Es sollte daher sicher aufbewahrt und niemals versehentlich veröffentlicht werden, bevor ein tatsächlicher Widerrufsgrund vorliegt.

Der Schlüssel-Handle muss einen Hauptschlüssel (Primary Key) referenzieren – Unterschlüssel (Subkeys) können nicht direkt widerrufen werden. Außerdem muss der zugehörige private Schlüssel im Schlüsselring geladen sein, da die Widerrufssignatur kryptografisch signiert werden muss.

Die Funktion ist Teil der PHP-RNP-Erweiterung (ext-rnp), die separat installiert werden muss und auf der RNP-Bibliothek basiert. Sie ist nicht Teil der PHP-Standardinstallation.