Start · Sprachen · PHP · Referenz · radius_demangle_mppe_key

radius_demangle_mppe_key

Funktion

Leitet einen MPPE-Schlüssel (Microsoft Point-to-Point Encryption) aus gemangelten RADIUS-Attributdaten ab und gibt den Klartext-Schlüssel zurück.

Kategorie: misc

Signatur

radius_demangle_mppe_key(resource $radius_handle, string $mangled): string|false

Beschreibung

radius_demangle_mppe_key gehört zur PHP-RADIUS-Erweiterung und wird verwendet, um MPPE-Schlüssel zu entschlüsseln, die von einem RADIUS-Server in gemangelter (verschlüsselter) Form übertragen werden. MPPE ist ein Verschlüsselungsprotokoll, das hauptsächlich bei PPP-Verbindungen (z. B. VPN-Tunneln) eingesetzt wird.

RADIUS-Server senden MPPE-Schlüssel typischerweise in den Attributen MS-MPPE-Send-Key und MS-MPPE-Recv-Key verschlüsselt (gemangled) gemäß RFC 2548. Diese Funktion entfernt die Manglung und liefert den rohen Schlüssel im Klartext zurück, der dann für die eigentliche PPP/VPN-Verschlüsselung verwendet werden kann.

Die Funktion benötigt ein gültiges RADIUS-Handle, das mit radius_auth_open oder radius_acct_open erstellt wurde, da das gemeinsame RADIUS-Geheimnis (Shared Secret) für die Entschlüsselung herangezogen wird.

Diese Funktion ist vor allem für Netzwerk-Daemons und Authentifizierungsserver relevant, die in PHP implementiert sind und MPPE-fähige PPP-Verbindungen verwalten.

Parameter

Name Typ Default Beschreibung
$radius_handle Pflicht resource Ein gültiges RADIUS-Handle, das mit radius_auth_open() oder radius_acct_open() erstellt wurde. Das Handle enthält das Shared Secret, das für die Entschlüsselung des MPPE-Schlüssels benötigt wird.
$mangled Pflicht string Der gemangelte (verschlüsselte) MPPE-Schlüssel, wie er vom RADIUS-Server in den Attributen MS-MPPE-Send-Key oder MS-MPPE-Recv-Key empfangen wurde.

Rückgabewert

Typ
string|false
Beschreibung
Gibt den entmangelten MPPE-Schlüssel als binären String zurück. Im Fehlerfall wird false zurückgegeben. Einzelheiten zum Fehler können mit radius_strerror() abgefragt werden.

Beispiele

MPPE-Schlüssel aus RADIUS-Antwort entmangeln

<?php
// RADIUS-Handle öffnen
$radius = radius_auth_open();
if (!$radius) {
    die('Konnte RADIUS-Handle nicht öffnen');
}

// RADIUS-Server konfigurieren
if (!radius_add_server($radius, '192.168.1.10', 1812, 'geheimes_passwort', 5, 3)) {
    die('Fehler beim Hinzufügen des Servers: ' . radius_strerror($radius));
}

// Authentifizierungsanfrage aufbauen
if (!radius_create_request($radius, RADIUS_ACCESS_REQUEST)) {
    die('Fehler beim Erstellen der Anfrage: ' . radius_strerror($radius));
}

radius_put_attr($radius, RADIUS_USER_NAME, 'benutzer@example.com');
radius_put_attr($radius, RADIUS_USER_PASSWORD, 'benutzerPasswort');

// Anfrage senden und Antwort auswerten
$result = radius_send_request($radius);
if ($result === RADIUS_ACCESS_ACCEPT) {
    // Attribute aus der Antwort lesen
    while ($attr = radius_get_attr($radius)) {
        if ($attr['attr'] === RADIUS_VENDOR_SPECIFIC) {
            $vendor = radius_get_vendor_attr($attr['data']);
            // MS-MPPE-Send-Key (Vendor-Typ 16)
            if ($vendor && $vendor['vendor'] === RADIUS_VENDOR_MICROSOFT && $vendor['attr'] === 16) {
                $sendKey = radius_demangle_mppe_key($radius, $vendor['data']);
                if ($sendKey !== false) {
                    echo 'MPPE-Send-Key (hex): ' . bin2hex($sendKey) . PHP_EOL;
                } else {
                    echo 'Fehler beim Entmangeln: ' . radius_strerror($radius) . PHP_EOL;
                }
            }
            // MS-MPPE-Recv-Key (Vendor-Typ 17)
            if ($vendor && $vendor['vendor'] === RADIUS_VENDOR_MICROSOFT && $vendor['attr'] === 17) {
                $recvKey = radius_demangle_mppe_key($radius, $vendor['data']);
                if ($recvKey !== false) {
                    echo 'MPPE-Recv-Key (hex): ' . bin2hex($recvKey) . PHP_EOL;
                } else {
                    echo 'Fehler beim Entmangeln: ' . radius_strerror($radius) . PHP_EOL;
                }
            }
        }
    }
} else {
    echo 'Authentifizierung abgelehnt oder Fehler: ' . radius_strerror($radius) . PHP_EOL;
}

radius_close($radius);
?>
MPPE-Send-Key (hex): 3a7f2e... MPPE-Recv-Key (hex): 9c1b4f...

// Wichtig · Fallstricke

Sicherheitshinweis: Die entmangelten MPPE-Schlüssel sind hochsensible kryptografische Geheimnisse. Sie sollten niemals geloggt, in Datenbanken gespeichert oder über unsichere Kanäle übertragen werden. Der Speicherbereich sollte nach Verwendung möglichst schnell freigegeben werden.

RFC-Konformität: Die Manglung der MPPE-Schlüssel ist in RFC 2548 spezifiziert. Falsche Shared-Secret-Konfiguration führt zu fehlerhaften oder falschen Schlüsseln, ohne dass zwingend ein Fehler gemeldet wird.

Verfügbarkeit: Diese Funktion ist nur verfügbar, wenn PHP mit der RADIUS-Erweiterung (pecl/radius) kompiliert wurde. Überprüfen Sie die Verfügbarkeit mit function_exists('radius_demangle_mppe_key').