Signatur
Beschreibung
rnp_op_generate_key ist Teil der PHP-RNP-Erweiterung (OpenPGP) und initiiert eine Schlüsselerzeugungsoperation. Die Funktion erzeugt einen neuen OpenPGP-Primärschlüssel für die angegebene Benutzer-ID und optional einen zugehörigen Unterschlüssel (Subkey) mit einem eigenen Algorithmus.
Die Funktion gibt ein RnpOpGenerate-Operationsobjekt zurück, über das weitere Parameter wie Schlüsselgröße, Ablaufdatum, Passphrase oder Schutzmechanismus konfiguriert werden können, bevor die eigentliche Erzeugung durch Aufruf von rnp_op_generate_execute gestartet wird.
Typische Algorithmen für key_alg sind RSA, ECDSA oder EdDSA; für Unterschlüssel (sub_alg) kommen häufig RSA, ECDH oder X25519 zum Einsatz. Wird sub_alg weggelassen oder leer übergeben, wird kein Unterschlüssel erzeugt.
Diese Funktion ist sinnvoll, wenn Schlüssel programmgesteuert für OpenPGP-Verschlüsselung oder -Signierung erzeugt und im RNP-Keystore verwaltet werden sollen, etwa in Anwendungen mit E-Mail-Verschlüsselung, Datei-Signierung oder Schlüsselverwaltung.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $ffi Pflicht | RnpFFI | Eine gültige RNP-FFI-Instanz, die zuvor mit rnp_ffi_create erzeugt wurde und den Keystore repräsentiert. |
|
| $userid Pflicht | string | Die Benutzer-ID (UID) des neuen Schlüssels, üblicherweise im Format Name <email@example.com>. |
|
| $key_alg Pflicht | string | Der Algorithmus für den Primärschlüssel, z. B. RSA, ECDSA, EdDSA oder DSA. |
|
| $sub_alg | string | Der Algorithmus für den optionalen Unterschlüssel, z. B. RSA, ECDH oder X25519. Wird ein leerer String übergeben, wird kein Unterschlüssel erzeugt. |
Rückgabewert
RnpOpGenerate-Objekt zurück, mit dem die Schlüsselparameter weiter konfiguriert und die Erzeugung durch rnp_op_generate_execute gestartet werden kann. Bei einem Fehler wird false zurückgegeben.Beispiele
RSA-Schlüsselpaar mit Unterschlüssel erzeugen
<?php
// FFI-Instanz für OpenPGP-Keystore erstellen
$ffi = rnp_ffi_create('GPG', 'GPG');
if ($ffi === false) {
die('FFI konnte nicht erstellt werden.');
}
// Schlüsselerzeugungsoperation initiieren
$op = rnp_op_generate_key($ffi, 'Max Mustermann <max@example.com>', 'RSA', 'RSA');
if ($op === false) {
die('Schlüsselerzeugungsoperation fehlgeschlagen.');
}
// Schlüsselgröße konfigurieren
rnp_op_generate_set_bits($op, 4096);
// Passphrase zum Schutz des privaten Schlüssels setzen
rnp_op_generate_set_protection_password($op, 'geheimesPasswort123!');
// Schlüssel tatsächlich erzeugen
if (rnp_op_generate_execute($op) === false) {
die('Schlüsselerzeugung fehlgeschlagen.');
}
echo 'RSA-4096-Schlüsselpaar erfolgreich erzeugt.' . PHP_EOL;
// Ressourcen freigeben
rnp_op_generate_destroy($op);
rnp_ffi_destroy($ffi);
Ed25519-Schlüssel mit X25519-Unterschlüssel erzeugen und exportieren
<?php
$ffi = rnp_ffi_create('GPG', 'GPG');
if ($ffi === false) {
die('FFI-Erstellung fehlgeschlagen.');
}
// EdDSA-Primärschlüssel + X25519-Unterschlüssel
$op = rnp_op_generate_key($ffi, 'Erika Muster <erika@example.com>', 'EdDSA', 'ECDH');
if ($op === false) {
die('Operation konnte nicht initiiert werden.');
}
// Ablaufdatum: 1 Jahr
rnp_op_generate_set_expiration($op, 365 * 24 * 3600);
if (rnp_op_generate_execute($op) === false) {
die('Erzeugung fehlgeschlagen.');
}
// Öffentlichen Schlüssel exportieren
$key = rnp_op_generate_get_key($op);
$pubkey = '';
rnp_key_export($key, $pubkey, RNP_KEY_EXPORT_PUBLIC | RNP_KEY_EXPORT_ARMORED | RNP_KEY_EXPORT_SUBKEYS);
echo $pubkey;
rnp_op_generate_destroy($op);
rnp_ffi_destroy($ffi);
// Wichtig · Fallstricke
Sicherheitshinweis: Passwörter zum Schutz privater Schlüssel sollten niemals im Klartext im Quellcode gespeichert werden. Nutze sichere Methoden zur Passphrasen-Verwaltung (z. B. Umgebungsvariablen oder einen Secrets Manager).
Die erzeugte Schlüsselpaarstruktur verbleibt nach rnp_op_generate_execute im Speicher der RnpFFI-Instanz. Um den Schlüssel dauerhaft zu speichern, muss rnp_save_keys aufgerufen werden.
Die RNP-PHP-Erweiterung ist nicht standardmäßig in PHP enthalten und muss separat installiert werden (php-rnp bzw. via PECL). Verfügbare Algorithmusnamen sind von der installierten librnp-Version abhängig.