Start · Sprachen · PHP · Referenz · rnp_op_generate_key

rnp_op_generate_key

Funktion

Erzeugt ein neues Schlüsselpaar (Primärschlüssel und optionalen Unterschlüssel) mit dem angegebenen Algorithmus über die RNP-Bibliothek.

Kategorie: crypto

Signatur

rnp_op_generate_key(RnpFFI $ffi, string $userid, string $key_alg, string $sub_alg = ''): RnpOpGenerate|false

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

Typ
RnpOpGenerate|false
Beschreibung
Gibt ein 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);
RSA-4096-Schlüsselpaar erfolgreich erzeugt.

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.