Start · Sprachen · PHP · Referenz · rnp_key_remove

rnp_key_remove

Funktion

Entfernt einen Schlüssel aus einem oder mehreren Schlüsselbünden der RNP-Instanz.

Kategorie: crypto

Signatur

rnp_key_remove(RnpFFI $ffi, RnpKey $key, int $flags): bool

Beschreibung

rnp_key_remove gehört zur PHP-Erweiterung rnp (OpenPGP-Bibliothek) und ermöglicht es, einen zuvor geladenen oder generierten Schlüssel aus dem öffentlichen und/oder privaten Schlüsselbund der FFI-Instanz zu entfernen. Die Funktion ist nützlich, wenn Schlüssel nur temporär verarbeitet werden sollen und nicht dauerhaft im Speicher verbleiben dürfen.

Über den Parameter flags wird gesteuert, aus welchem Schlüsselbund der Schlüssel entfernt werden soll. Typische Konstanten sind RNP_KEY_REMOVE_PUBLIC, RNP_KEY_REMOVE_SECRET sowie RNP_KEY_REMOVE_SUBKEYS, die auch kombiniert (mit bitweisem OR) übergeben werden können, um beispielsweise sowohl den öffentlichen als auch den privaten Teil samt Unterschlüsseln zu löschen.

Die Funktion entfernt den Schlüssel ausschließlich aus dem In-Memory-Schlüsselbund der FFI-Instanz. Persistierte Schlüsseldaten in Dateien oder Datenbanken werden nicht automatisch gelöscht. Soll eine dauerhafte Löschung erfolgen, muss der Schlüsselbund anschließend explizit gespeichert werden.

Typischer Einsatz ist die sichere Bereinigung sensibler Schlüsselmaterialien nach Abschluss kryptografischer Operationen oder das gezielte Entfernen abgelaufener bzw. kompromittierter Schlüssel aus dem aktiven Schlüsselbund.

Parameter

Name Typ Default Beschreibung
$ffi Pflicht RnpFFI Die RNP-FFI-Instanz, aus deren Schlüsselbund der Schlüssel entfernt werden soll.
$key Pflicht RnpKey Das Schlüsselobjekt, das entfernt werden soll. Muss zuvor aus der gleichen FFI-Instanz stammen.
$flags Pflicht int Bitmaske, die bestimmt, aus welchem Schlüsselbund der Schlüssel entfernt wird. Mögliche Werte: RNP_KEY_REMOVE_PUBLIC, RNP_KEY_REMOVE_SECRET, RNP_KEY_REMOVE_SUBKEYS (kombinierbar mit |).

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn der Schlüssel erfolgreich entfernt wurde. Bei einem Fehler (z. B. ungültige FFI-Instanz oder Schlüssel nicht gefunden) wird false zurückgegeben.

Beispiele

Öffentlichen und privaten Schlüssel entfernen

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

// Schlüsselbund aus Datei laden
rnp_load_keys($ffi, 'GPG', file_get_contents('/pfad/zum/keyring.gpg'), RNP_LOAD_SAVE_PUBLIC_KEYS);

// Schlüssel anhand der E-Mail-Adresse suchen
$key = rnp_locate_key($ffi, 'userid', 'nutzer@example.com');

if ($key !== false) {
    // Schlüssel aus beiden Schlüsselbünden inklusive Unterschlüssel entfernen
    $result = rnp_key_remove(
        $ffi,
        $key,
        RNP_KEY_REMOVE_PUBLIC | RNP_KEY_REMOVE_SECRET | RNP_KEY_REMOVE_SUBKEYS
    );

    if ($result) {
        echo "Schlüssel erfolgreich entfernt.\n";
    } else {
        echo "Fehler beim Entfernen des Schlüssels.\n";
    }
} else {
    echo "Schlüssel nicht gefunden.\n";
}

rnp_ffi_destroy($ffi);
Schlüssel erfolgreich entfernt.

Nur den öffentlichen Teil eines Schlüssels entfernen

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

// Schlüsselpaar importieren
rnp_load_keys(
    $ffi,
    'GPG',
    file_get_contents('/pfad/zum/public-keyring.gpg'),
    RNP_LOAD_SAVE_PUBLIC_KEYS
);

$key = rnp_locate_key($ffi, 'fingerprint', 'AABBCCDDEEFF00112233445566778899AABBCCDD');

if ($key !== false) {
    // Nur den öffentlichen Schlüssel entfernen, privaten Teil behalten
    if (rnp_key_remove($ffi, $key, RNP_KEY_REMOVE_PUBLIC)) {
        echo "Öffentlicher Schlüssel wurde entfernt.\n";
    }
}

rnp_ffi_destroy($ffi);
Öffentlicher Schlüssel wurde entfernt.

// Wichtig · Fallstricke

Persistenz: rnp_key_remove wirkt ausschließlich auf den In-Memory-Zustand der FFI-Instanz. Um die Änderung dauerhaft zu machen, muss der Schlüsselbund anschließend mit rnp_save_keys in eine Datei oder einen anderen Speicher zurückgeschrieben werden.

Schlüsselreferenzen: Nach dem Entfernen eines Schlüssels sollte das zugehörige RnpKey-Objekt nicht mehr verwendet werden, da es auf einen nicht mehr gültigen Speicherbereich verweisen kann.

Unterschlüssel: Wird RNP_KEY_REMOVE_SUBKEYS nicht gesetzt, bleiben eventuell vorhandene Unterschlüssel (Subkeys) im Schlüsselbund erhalten. Dies kann zu inkonsistenten Zuständen führen.