Signatur
Beschreibung
rnp_key_export ist Teil der PHP-RNP-Erweiterung (rnp), die OpenPGP-Kryptographie über die librnp-Bibliothek bereitstellt. Die Funktion erlaubt es, einen Schlüssel anhand seiner ID oder seines Fingerabdrucks aus dem internen Schlüsselbund zu exportieren – wahlweise als binäres OpenPGP-Paket oder als ASCII-Armor-String.
Typische Anwendungsfälle sind das Speichern von Schlüsseln in Dateien, das Übertragen an andere Systeme oder das Einbetten in Nachrichten. Über den Parameter flags lässt sich steuern, ob der öffentliche Schlüssel, der private Schlüssel oder beides exportiert werden soll und ob die Ausgabe Base64-kodiert (ASCII-Armor) erfolgen soll.
Die verfügbaren Flags umfassen unter anderem:
RNP_KEY_EXPORT_PUBLIC– exportiert den öffentlichen Teil des Schlüssels.RNP_KEY_EXPORT_SECRET– exportiert den privaten/geheimen Teil des Schlüssels.RNP_KEY_EXPORT_ARMORED– erzeugt eine ASCII-Armor-Ausgabe anstelle von rohen Binärdaten.RNP_KEY_EXPORT_SUBKEYS– schließt alle Unterschlüssel (Subkeys) in den Export ein.
Der Export privater Schlüssel sollte mit äußerster Sorgfalt behandelt werden. Die exportierten Daten sollten niemals unverschlüsselt übertragen oder gespeichert werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $ffi Pflicht | RnpFFI | Eine gültige RNP-FFI-Instanz, die zuvor mit rnp_ffi_create() erstellt und mit Schlüsseln befüllt wurde. |
|
| $key_id Pflicht | string | Die hexadezimale Schlüssel-ID oder der Fingerabdruck des zu exportierenden Schlüssels (z. B. '1A2B3C4D5E6F7890'). |
|
| $flags Pflicht | int | Bitmaske aus RNP_KEY_EXPORT_*-Konstanten, die bestimmt, welcher Teil des Schlüssels exportiert wird und in welchem Format (binär oder ASCII-Armor). |
Rückgabewert
flags. Gibt false zurück, wenn der Schlüssel nicht gefunden wurde oder ein Fehler aufgetreten ist.Beispiele
Öffentlichen Schlüssel als ASCII-Armor exportieren
<?php
// RNP-FFI-Instanz erstellen
$ffi = rnp_ffi_create('GPG', 'GPG');
// Schlüssel aus einer Datei laden
rnp_load_keys($ffi, 'GPG', file_get_contents('/pfad/zum/pubring.gpg'), RNP_LOAD_SAVE_PUBLIC_KEYS);
// Öffentlichen Schlüssel als ASCII-Armor exportieren
$keyId = '1A2B3C4D5E6F7890';
$flags = RNP_KEY_EXPORT_PUBLIC | RNP_KEY_EXPORT_ARMORED | RNP_KEY_EXPORT_SUBKEYS;
$exportedKey = rnp_key_export($ffi, $keyId, $flags);
if ($exportedKey === false) {
echo "Fehler: Schlüssel konnte nicht exportiert werden.\n";
} else {
echo "Exportierter öffentlicher Schlüssel:\n";
echo $exportedKey;
// z. B. in Datei speichern
file_put_contents('/pfad/zum/export_pub.asc', $exportedKey);
}
rnp_ffi_destroy($ffi);
Privaten Schlüssel als Binärdaten exportieren und verschlüsselt speichern
<?php
$ffi = rnp_ffi_create('GPG', 'GPG');
// Privaten Schlüsselring laden
rnp_load_keys(
$ffi,
'GPG',
file_get_contents('/pfad/zum/secring.gpg'),
RNP_LOAD_SAVE_SECRET_KEYS
);
$keyId = 'ABCDEF1234567890';
$flags = RNP_KEY_EXPORT_SECRET | RNP_KEY_EXPORT_SUBKEYS;
$secretKeyData = rnp_key_export($ffi, $keyId, $flags);
if ($secretKeyData === false) {
die("Fehler beim Exportieren des privaten Schlüssels.\n");
}
// WICHTIG: Private Schlüssel niemals im Klartext speichern!
// Hier: verschlüsselt ablegen (z. B. mit sodium_crypto_secretbox)
$encryptionKey = sodium_crypto_secretbox_keygen();
$nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);
$encrypted = sodium_crypto_secretbox($secretKeyData, $nonce, $encryptionKey);
file_put_contents('/sicherer/pfad/secret_key.enc', $nonce . $encrypted);
echo "Privater Schlüssel sicher gespeichert.\n";
rnp_ffi_destroy($ffi);
// Wichtig · Fallstricke
Sicherheitshinweis: Der Export privater Schlüssel (RNP_KEY_EXPORT_SECRET) ist eine hochsensible Operation. Exportierte private Schlüsseldaten dürfen niemals unverschlüsselt auf Datenträgern gespeichert, über unsichere Kanäle übertragen oder in Logs geschrieben werden. Stellen Sie sicher, dass nur autorisierte Prozesse Zugriff auf diese Daten erhalten.
Verfügbarkeit: Die Funktion ist nur verfügbar, wenn die PHP-RNP-Erweiterung (php-rnp) installiert und aktiviert ist. Prüfen Sie die Verfügbarkeit mit extension_loaded('rnp'). Die genaue Signatur und der Funktionsname können je nach Erweiterungsversion leicht abweichen.
Flags kombinieren: Die RNP_KEY_EXPORT_*-Konstanten werden per bitweisem ODER (|) kombiniert. Das gleichzeitige Angeben von RNP_KEY_EXPORT_PUBLIC und RNP_KEY_EXPORT_SECRET kann je nach Implementierung zu einem Fehler führen – exportieren Sie public und private Schlüssel in separaten Aufrufen.