Signatur
Beschreibung
rnp_key_export_autocrypt gehört zur RNP-Kryptografie-Erweiterung für PHP und exportiert einen OpenPGP-Schlüssel in einer abgespeckten, für Autocrypt optimierten Form. Das Autocrypt-Protokoll definiert, wie E-Mail-Clients öffentliche Schlüssel automatisch über spezielle Header austauschen können – dabei wird ein möglichst kompakter Schlüsselexport benötigt, der nur die unverzichtbaren Bestandteile enthält.
Die Funktion erzeugt einen binären (oder base64-codierten) Schlüssel-Blob, der direkt in den Autocrypt:-Header einer E-Mail eingebettet werden kann. Im Gegensatz zu einem vollständigen Schlüsselexport werden dabei nur der primäre Schlüssel, ein einzelner Subkey sowie eine einzelne User-ID exportiert, um die Größe des Headers minimal zu halten.
Typischerweise wird diese Funktion in SMTP-Pipelines oder Mail-Composition-Bibliotheken eingesetzt, die Autocrypt-kompatible E-Mails versenden wollen. Mit dem Parameter uid lässt sich steuern, welche User-ID (also welche E-Mail-Adresse) in den Export aufgenommen wird, was bei Schlüsseln mit mehreren UIDs besonders relevant ist.
Über den flags-Parameter können erweiterte Optionen gesetzt werden, z. B. ob der Export im Rohformat oder base64-kodiert erfolgen soll. Bei Fehler gibt die Funktion false zurück.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $ffi Pflicht | RnpFFI | Ein gültiges RNP-FFI-Handle, das zuvor mit rnp_ffi_create() erzeugt wurde und den Schlüsselspeicher repräsentiert. |
|
| $key Pflicht | string | Handle des primären Schlüssels (als Ressourcen-String), der exportiert werden soll. Kann z. B. über rnp_locate_key() ermittelt werden. |
|
| $subkey Pflicht | string | Handle des Subkeys, der in den Autocrypt-Export aufgenommen werden soll. Autocrypt erwartet genau einen Verschlüsselungssubkey. | |
| $uid Pflicht | string | Handle der User-ID (UID), die in den Export eingebettet wird. Bei Schlüsseln mit mehreren UIDs sollte hier die zur Absenderadresse passende UID gewählt werden. | |
| $flags Pflicht | int | 0 | Bitmaske mit Exportoptionen. Aktuell ist 0 der Standardwert; mögliche Flags sind in den RNP-Konstanten definiert (z. B. für Base64-Ausgabe). |
Rückgabewert
Autocrypt:-Header eingebettet werden kann. Bei einem Fehler (ungültige Handles, fehlende Schlüsselbestandteile etc.) wird false zurückgegeben.Beispiele
Autocrypt-Header für ausgehende E-Mail erzeugen
<?php
// RNP-FFI initialisieren
$ffi = rnp_ffi_create('GPG', 'GPG');
// Schlüsselring aus Datei laden
rnp_load_keys($ffi, 'GPG', file_get_contents('/pfad/zum/pubring.gpg'), RNP_LOAD_SAVE_PUBLIC_KEYS);
// Primären Schlüssel anhand der E-Mail-Adresse suchen
$key = rnp_locate_key($ffi, 'userid', 'alice@example.com');
if ($key === false) {
die('Schlüssel nicht gefunden.');
}
// Ersten Subkey ermitteln
$subkeyCount = rnp_key_get_subkey_count($key);
if ($subkeyCount === 0) {
die('Kein Subkey vorhanden.');
}
$subkey = rnp_key_get_subkey_at($key, 0);
// User-ID ermitteln
$uid = rnp_key_get_uid_handle_at($key, 0);
// Autocrypt-Export erzeugen
$autocryptData = rnp_key_export_autocrypt($ffi, $key, $subkey, $uid, 0);
if ($autocryptData === false) {
die('Autocrypt-Export fehlgeschlagen.');
}
// Base64-kodiert für den Autocrypt-Header aufbereiten
$autocryptHeader = 'addr=alice@example.com; keydata=' . base64_encode($autocryptData);
echo "Autocrypt: $autocryptHeader\n";
rnp_ffi_destroy($ffi);
Autocrypt-Export mit Fehlerbehandlung
<?php
$ffi = rnp_ffi_create('GPG', 'GPG');
rnp_load_keys($ffi, 'GPG', file_get_contents('pubring.gpg'), RNP_LOAD_SAVE_PUBLIC_KEYS);
$key = rnp_locate_key($ffi, 'fingerprint', 'AABBCCDDEEFF00112233445566778899AABBCCDD');
if ($key !== false && rnp_key_get_subkey_count($key) > 0) {
$subkey = rnp_key_get_subkey_at($key, 0);
$uid = rnp_key_get_uid_handle_at($key, 0);
$result = rnp_key_export_autocrypt($ffi, $key, $subkey, $uid, 0);
if ($result !== false) {
// Direkt als Autocrypt-Header-Wert verwendbar
$headerValue = 'addr=bob@example.org; prefer-encrypt=mutual; keydata=' . base64_encode($result);
echo $headerValue . "\n";
} else {
echo 'Fehler beim Autocrypt-Export.' . "\n";
}
} else {
echo 'Schlüssel nicht gefunden oder kein Subkey vorhanden.' . "\n";
}
rnp_ffi_destroy($ffi);
// Wichtig · Fallstricke
Sicherheitshinweis: Beim Autocrypt-Export werden gezielt nur minimale Schlüsselinformationen exportiert. Achte darauf, niemals private Schlüsseldaten in den Autocrypt-Header einzubetten – rnp_key_export_autocrypt exportiert ausschließlich öffentliche Schlüsselanteile.
Abhängigkeit: Die Funktion setzt die PHP-Erweiterung rnp voraus, die auf der librnp-Bibliothek basiert. Sie ist nicht im Standard-PHP-Lieferumfang enthalten und muss separat installiert werden.
Autocrypt-Kompatibilität: Der erzeugte Schlüssel-Blob sollte anschließend Base64-kodiert werden, bevor er in den Autocrypt:-Header eingebettet wird. Die Spezifikation (Autocrypt Level 1) schreibt Base64 ohne Zeilenumbrüche vor.