Signatur
Beschreibung
openssl_get_curve_names() liefert eine Liste aller elliptischen Kurven, die die auf dem System installierte OpenSSL-Bibliothek unterstützt. Diese Namen können anschließend bei der Erzeugung von ECC-Schlüsseln (z. B. mit openssl_pkey_new()) als Wert für den Parameter curve_name verwendet werden.
Elliptische-Kurven-Kryptografie (ECC) bietet im Vergleich zu RSA deutlich kürzere Schlüssel bei gleichem oder höherem Sicherheitsniveau. Die Auswahl der richtigen Kurve ist dabei entscheidend: Weit verbreitete Kurven wie prime256v1 (P-256), secp384r1 (P-384) oder secp521r1 (P-521) sind für die meisten Anwendungsfälle empfehlenswert.
Da die verfügbaren Kurven von der installierten OpenSSL-Version sowie der Compilierung der Bibliothek abhängen, ist es sinnvoll, diese Funktion einzusetzen, um die tatsächlich vorhandenen Möglichkeiten zu prüfen, bevor man einen Kurvennamen hartcodiert. So lässt sich Portabilität über unterschiedliche Server-Umgebungen hinweg sicherstellen.
Rückgabewert
prime256v1, secp384r1). Gibt false zurück, wenn die Funktion nicht ausgeführt werden konnte (z. B. wenn OpenSSL nicht verfügbar ist).Beispiele
Alle verfügbaren ECC-Kurven ausgeben
<?php
$curves = openssl_get_curve_names();
if ($curves === false) {
echo 'OpenSSL-Kurven konnten nicht abgerufen werden.';
} else {
echo 'Anzahl verfügbarer Kurven: ' . count($curves) . PHP_EOL;
foreach ($curves as $curve) {
echo $curve . PHP_EOL;
}
}
Prüfen ob eine bestimmte Kurve verfügbar ist und Schlüsselpaar erzeugen
<?php
$wantedCurve = 'prime256v1';
$curves = openssl_get_curve_names();
if ($curves !== false && in_array($wantedCurve, $curves, true)) {
$config = [
'curve_name' => $wantedCurve,
'private_key_type' => OPENSSL_KEYTYPE_EC,
];
$keyPair = openssl_pkey_new($config);
if ($keyPair !== false) {
$details = openssl_pkey_get_details($keyPair);
echo 'Kurve: ' . $details['ec']['curve_name'] . PHP_EOL;
echo 'Öffentlicher Schlüssel:' . PHP_EOL;
echo $details['key'];
} else {
echo 'Schlüsselerzeugung fehlgeschlagen.';
}
} else {
echo "Die Kurve '{$wantedCurve}' ist auf diesem System nicht verfügbar.";
}
// Wichtig · Fallstricke
Sicherheitshinweis: Nicht alle zurückgegebenen Kurven gelten als kryptografisch sicher. Ältere oder weniger verbreitete Kurven (z. B. solche über binäre Felder) sollten für neue Anwendungen vermieden werden. Empfohlen werden die NIST-Kurven prime256v1, secp384r1 und secp521r1 sowie moderne Kurven wie X25519 (sofern verfügbar).