Start · Sprachen · PHP · Referenz · rnp_key_get_info

rnp_key_get_info

Funktion

Liefert ein assoziatives Array mit detaillierten Informationen zu einem RNP-Kryptografieschlüssel.

Kategorie: crypto

Signatur

rnp_key_get_info(RnpKey $key): array|false

Beschreibung

rnp_key_get_info() ist Teil der RNP-Erweiterung für PHP und gibt ein assoziatives Array mit allen verfügbaren Metadaten eines OpenPGP-Schlüssels zurück. Dazu gehören unter anderem Algorithmus, Schlüssellänge, Fingerabdruck, Key-ID, Erstellungsdatum, Ablaufdatum sowie Angaben darüber, ob der Schlüssel ein primärer Schlüssel, ein Unterschlüssel (Subkey), ein geheimer Schlüssel oder ob er widerrufen ist.

Die Funktion eignet sich besonders für Anwendungen, die OpenPGP-Schlüssel verwalten, analysieren oder anzeigen müssen – etwa in Schlüsselbund-Verwaltungen, E-Mail-Verschlüsselungssystemen oder Werkzeugen zur Schlüsselinspektion. Mit den zurückgegebenen Daten lassen sich beispielsweise Ablaufdaten überwachen oder Schlüsseleigenschaften validieren.

Der RnpKey-Parameter wird typischerweise über Funktionen wie rnp_locate_key(), rnp_key_get_primary_uid() oder aus einem iterierten Schlüsselbund gewonnen. Im Fehlerfall gibt die Funktion false zurück, etwa wenn der übergebene Schlüssel ungültig ist.

  • fingerprint: Hexadezimaler Fingerabdruck des Schlüssels
  • keyid: Kurz-ID des Schlüssels (16 Hex-Zeichen)
  • alg: Algorithmus (z. B. RSA, ECDSA)
  • bits: Schlüssellänge in Bit
  • creation: Unix-Timestamp der Erstellung
  • expiration: Unix-Timestamp des Ablaufs (0 = kein Ablauf)
  • is_secret: Ob der geheime Schlüsselanteil vorhanden ist
  • is_primary: Ob es ein Primärschlüssel ist
  • is_sub: Ob es ein Unterschlüssel ist
  • is_valid: Ob der Schlüssel gültig ist
  • is_revoked: Ob der Schlüssel widerrufen wurde

Parameter

Name Typ Default Beschreibung
$key Pflicht RnpKey Ein gültiges RnpKey-Objekt, zu dem die Informationen abgerufen werden sollen. Wird typischerweise über rnp_locate_key() oder eine Schlüsselbund-Iteration erhalten.

Rückgabewert

Typ
array|false
Beschreibung
Gibt ein assoziatives Array mit Schlüsselinformationen zurück (u. a. fingerprint, keyid, alg, bits, creation, expiration, is_secret, is_primary, is_sub, is_valid, is_revoked). Im Fehlerfall wird false zurückgegeben.

Beispiele

Schlüsselinformationen ausgeben

<?php
// RNP-Kontext erstellen und Schlüsselbund laden
$ffi = rnp_ffi_create('GPG', 'GPG');
rnp_load_keys($ffi, 'GPG', file_get_contents('/pfad/zu/pubring.gpg'), RNP_LOAD_SAVE_PUBLIC_KEYS);

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

if ($key === false) {
    echo "Schlüssel nicht gefunden.\n";
    exit(1);
}

$info = rnp_key_get_info($key);

if ($info === false) {
    echo "Fehler beim Abrufen der Schlüsselinformationen.\n";
    exit(1);
}

echo "Key-ID:      " . $info['keyid'] . "\n";
echo "Fingerprint: " . $info['fingerprint'] . "\n";
echo "Algorithmus: " . $info['alg'] . "\n";
echo "Bits:        " . $info['bits'] . "\n";
echo "Erstellt:    " . date('Y-m-d', $info['creation']) . "\n";
echo "Läuft ab:    " . ($info['expiration'] ? date('Y-m-d', $info['expiration']) : 'nie') . "\n";
echo "Widerrufen:  " . ($info['is_revoked'] ? 'Ja' : 'Nein') . "\n";
echo "Gültig:      " . ($info['is_valid'] ? 'Ja' : 'Nein') . "\n";

rnp_ffi_destroy($ffi);
Key-ID: A1B2C3D4E5F60001 Fingerprint: A1B2C3D4E5F60001AABBCCDDEEFF00001234ABCD Algorithmus: RSA Bits: 4096 Erstellt: 2021-03-15 Läuft ab: nie Widerrufen: Nein Gültig: Ja

Ablaufende Schlüssel im Schlüsselbund ermitteln

<?php
$ffi = rnp_ffi_create('GPG', 'GPG');
rnp_load_keys($ffi, 'GPG', file_get_contents('/pfad/zu/pubring.gpg'), RNP_LOAD_SAVE_PUBLIC_KEYS);

$count = rnp_get_public_key_count($ffi);
$now   = time();
$bald  = $now + (30 * 24 * 3600); // 30 Tage in der Zukunft

for ($i = 0; $i < $count; $i++) {
    $key  = rnp_get_public_key_at($ffi, $i);
    $info = rnp_key_get_info($key);

    if ($info === false || !$info['is_primary']) {
        continue;
    }

    if ($info['expiration'] > 0 && $info['expiration'] <= $bald) {
        echo "WARNUNG: Schlüssel " . $info['keyid']
           . " läuft am " . date('Y-m-d', $info['expiration']) . " ab!\n";
    }
}

rnp_ffi_destroy($ffi);
WARNUNG: Schlüssel B3C4D5E6F7A80002 läuft am 2024-12-01 ab!

// Wichtig · Fallstricke

Sicherheitshinweis: Das Vorhandensein eines Schlüssels im Schlüsselbund bedeutet nicht automatisch, dass ihm vertraut werden darf. Prüfe stets is_valid und is_revoked, bevor du einen Schlüssel zur Verschlüsselung oder Signaturprüfung verwendest.

Die RNP-Erweiterung für PHP ist eine vergleichsweise neue Erweiterung (basierend auf der rnp-Bibliothek von Ribose). Sie muss separat installiert werden und ist nicht standardmäßig in PHP-Distributionen enthalten. Verfügbarkeit und genaue Array-Schlüssel können je nach Version der Erweiterung leicht abweichen – prüfe daher im Zweifelsfall mit isset(), ob ein bestimmter Schlüssel im Rückgabe-Array vorhanden ist.

Geheime Schlüsselanteile (is_secret = true) sollten niemals über unsichere Kanäle übertragen oder in Logs gespeichert werden.