Start · Sprachen · PHP · Referenz · openssl_get_curve_names

openssl_get_curve_names

Funktion

Gibt ein Array mit den Namen aller verfügbaren elliptischen Kurven (ECC) der installierten OpenSSL-Bibliothek zurück.

seit PHP 7.1.0 Kategorie: crypto

Signatur

openssl_get_curve_names(): array|false

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

Typ
array|false
Beschreibung
Gibt im Erfolgsfall ein indiziertes Array mit Strings zurück, wobei jeder String den Namen einer unterstützten elliptischen Kurve enthält (z. B. 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;
    }
}
Anzahl verfügbarer Kurven: 80 prime256v1 secp384r1 secp521r1 ...

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.";
}
Kurve: prime256v1 Öffentlicher Schlüssel: -----BEGIN PUBLIC KEY----- ...

// 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).

p>Die Funktion steht erst ab PHP 7.1.0 zur Verfügung und setzt eine OpenSSL-Erweiterung voraus. Auf Systemen mit sehr alten OpenSSL-Versionen kann die Auswahl der verfügbaren Kurven stark eingeschränkt sein.