Start · Sprachen · PHP · Referenz · gnupg_import

gnupg_import

Funktion

Importiert einen PGP-Schlüssel in den GnuPG-Schlüsselbund und gibt Importstatistiken zurück.

seit PHP 1.3.0 Kategorie: crypto

Signatur

gnupg_import(resource $identifier, string $keydata): array|false

Beschreibung

gnupg_import() nimmt einen PGP-Schlüssel im ASCII-Armor- oder Binärformat entgegen und importiert ihn in den Schlüsselbund, der mit der übergebenen GnuPG-Ressource verknüpft ist. Typischerweise wird diese Funktion verwendet, um öffentliche Schlüssel von Kommunikationspartnern zu hinterlegen, damit anschließend Nachrichten verschlüsselt oder Signaturen verifiziert werden können.

Im Erfolgsfall liefert die Funktion ein assoziatives Array mit Statistiken über den Import, z. B. wie viele Schlüssel neu importiert oder bereits vorhanden waren. Bei einem Fehler wird false zurückgegeben. Die Schlüsseldaten können direkt aus einer Datei, einer Datenbank oder aus einem Schlüsselserver stammen, solange sie als String vorliegen.

Es ist wichtig, den Vertrauensstatus (trust level) importierter Schlüssel im Blick zu behalten: Ein importierter Schlüssel wird standardmäßig als nicht vertrauenswürdig eingestuft. Für eine vollständige Verschlüsselungs-Pipeline sollte nach dem Import das Vertrauen explizit gesetzt werden.

Parameter

Name Typ Default Beschreibung
$identifier Pflicht resource Eine gültige GnuPG-Ressource, die zuvor mit gnupg_init() erzeugt wurde und den Kontext (Schlüsselbund, Heimatverzeichnis) definiert.
$keydata Pflicht string Der zu importierende Schlüssel als String, typischerweise im ASCII-Armor-Format (beginnt mit -----BEGIN PGP PUBLIC KEY BLOCK-----). Binäre Schlüsseldaten sind ebenfalls möglich.

Rückgabewert

Typ
array|false
Beschreibung
Bei Erfolg ein assoziatives Array mit Import-Statistiken, z. B.:
  • imported – Anzahl der neu importierten Schlüssel
  • unchanged – Anzahl der bereits vorhandenen, unveränderten Schlüssel
  • importedkeys – Array mit den Fingerabdrücken der importierten Schlüssel
  • considered – Gesamtzahl der verarbeiteten Schlüssel
Bei einem Fehler (ungültige Schlüsseldaten, gesperrte Ressource o. Ä.) wird false zurückgegeben.

Beispiele

Öffentlichen Schlüssel aus Datei importieren

<?php
// GnuPG-Ressource initialisieren
$gpg = gnupg_init();

// Schlüsseldaten aus einer Datei laden (ASCII-Armor-Format)
$keydata = file_get_contents('/path/to/public_key.asc');

if ($keydata === false) {
    die('Schlüsseldatei konnte nicht gelesen werden.');
}

// Schlüssel importieren
$result = gnupg_import($gpg, $keydata);

if ($result === false) {
    echo 'Import fehlgeschlagen: ' . gnupg_geterror($gpg);
} else {
    echo 'Importierte Schlüssel: ' . $result['imported'] . PHP_EOL;
    echo 'Unveränderte Schlüssel: ' . $result['unchanged'] . PHP_EOL;
    if (!empty($result['importedkeys'])) {
        foreach ($result['importedkeys'] as $fingerprint) {
            echo 'Fingerabdruck: ' . $fingerprint . PHP_EOL;
        }
    }
}
Importierte Schlüssel: 1 Unveränderte Schlüssel: 0 Fingerabdruck: ABCDEF1234567890ABCDEF1234567890ABCDEF12

Schlüssel von einem Schlüsselserver importieren

<?php
// Schlüsseldaten von einem Keyserver abrufen (Beispiel mit cURL)
$fingerprint = '0xABCDEF1234567890';
$url = 'https://keyserver.ubuntu.com/pks/lookup?op=get&search=' . urlencode($fingerprint);

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
$keydata = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

if ($keydata === false || $httpCode !== 200) {
    die('Schlüssel konnte nicht vom Keyserver abgerufen werden.');
}

// GnuPG initialisieren und Schlüssel importieren
$gpg = gnupg_init();
$result = gnupg_import($gpg, $keydata);

if ($result === false) {
    echo 'Import fehlgeschlagen: ' . gnupg_geterror($gpg);
} else {
    echo 'Ergebnis: ' . $result['imported'] . ' Schlüssel importiert, '
         . $result['unchanged'] . ' unverändert.' . PHP_EOL;
}
Ergebnis: 1 Schlüssel importiert, 0 unverändert.

// Wichtig · Fallstricke

Sicherheitshinweis: Importierte Schlüssel sollten stets auf ihre Authentizität geprüft werden, bevor ihnen vertraut wird. Ein importierter Schlüssel allein garantiert nicht, dass er wirklich zur erwarteten Person gehört — der Fingerabdruck sollte auf einem sicheren Weg verifiziert werden (z. B. persönlicher Austausch oder Web of Trust).

Die Funktion gehört zur prozeduralen GnuPG-API. Für eine objektorientierte Nutzung steht die Klasse gnupg mit der Methode gnupg::import() zur Verfügung, die identisch funktioniert.

Werden Schlüsseldaten aus nicht vertrauenswürdigen Quellen (z. B. Benutzereingaben, externe APIs) importiert, sollte die Eingabe auf Plausibilität geprüft werden, um unerwartetes Verhalten zu vermeiden.