Start · Sprachen · PHP · Referenz · radius_demangle

radius_demangle

Funktion

Entschlüsselt (demangelt) verschlüsselte RADIUS-Attributdaten, die mit dem gemeinsamen RADIUS-Geheimnis verschlüsselt wurden.

Kategorie: misc

Signatur

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

Beschreibung

radius_demangle() wird verwendet, um Attributwerte zu entschlüsseln, die vom RADIUS-Server verschlüsselt ("gemangelt") übertragen wurden. Dies betrifft insbesondere Attribute wie MS-CHAP-MPPE-Keys oder ähnliche sicherheitsrelevante Felder, die mit dem gemeinsam geteilten RADIUS-Geheimnis (Shared Secret) und dem Authenticator des Requests ver- und entschlüsselt werden.

Die Funktion ist Teil der PECL-Erweiterung radius und setzt voraus, dass eine aktive RADIUS-Verbindung (Ressource) vorhanden ist und das Shared Secret korrekt konfiguriert wurde. Ohne korrektes Geheimnis liefert die Entschlüsselung sinnlose Daten.

Typischerweise wird radius_demangle() eingesetzt, nachdem ein RADIUS-Access-Accept-Paket empfangen wurde und verschlüsselte Attribute, z. B. Verschlüsselungsschlüssel für VPN-Sitzungen, decodiert werden müssen. Die entschlüsselten Daten können anschließend weiterverarbeitet werden.

Parameter

Name Typ Default Beschreibung
$radius_handle Pflicht resource Eine gültige RADIUS-Ressource, die zuvor mit radius_auth_open() oder radius_acct_open() erstellt wurde und das konfigurierte Shared Secret enthält.
$mangled Pflicht string Der verschlüsselte (gemangelte) Attributwert als binärer String, der typischerweise direkt aus einem RADIUS-Antwort-Attribut stammt.

Rückgabewert

Typ
string|false
Beschreibung
Gibt den entschlüsselten Attributwert als binären String zurück, oder false bei einem Fehler. Im Fehlerfall kann radius_strerror() für eine Fehlermeldung verwendet werden.

Beispiele

MS-CHAP-MPPE-Schlüssel nach RADIUS-Authentifizierung entschlüsseln

<?php
$radius = radius_auth_open();

if (!$radius) {
    die('Konnte RADIUS-Handle nicht öffnen.');
}

radius_add_server($radius, '192.168.1.1', 1812, 'mein_shared_secret', 3, 3);
radius_create_request($radius, RADIUS_ACCESS_REQUEST);
radius_put_attr($radius, RADIUS_USER_NAME, 'testuser');
radius_put_attr($radius, RADIUS_USER_PASSWORD, 'testpassword');

$result = radius_send_request($radius);

if ($result === RADIUS_ACCESS_ACCEPT) {
    while ($attr = radius_get_attr($radius)) {
        // Vendor-Attribut: MS-CHAP-MPPE-Send-Key o.ä.
        if ($attr['attr'] === 16) { // Beispiel-Attributnummer
            $demangled = radius_demangle($radius, $attr['data']);
            if ($demangled === false) {
                echo 'Fehler beim Entschlüsseln: ' . radius_strerror($radius);
            } else {
                echo 'Entschlüsselter Schlüssel (hex): ' . bin2hex($demangled) . PHP_EOL;
            }
        }
    }
} else {
    echo 'Authentifizierung fehlgeschlagen.';
}

radius_close($radius);
?>
Entschlüsselter Schlüssel (hex): 3a7f2d...

Fehlerbehandlung bei ungültigem Handle

<?php
// Simulierter Fehlerfall mit ungültigem Handle
$radius = radius_auth_open();
$mangledData = "\x00\x01\x02\x03\x04\x05\x06\x07";

$result = radius_demangle($radius, $mangledData);

if ($result === false) {
    echo 'Fehler: ' . radius_strerror($radius) . PHP_EOL;
} else {
    echo 'Entschlüsselt: ' . bin2hex($result) . PHP_EOL;
}
?>

// Wichtig · Fallstricke

Sicherheitshinweis: Das RADIUS-Shared-Secret muss geheim gehalten werden. Wer Zugang zu diesem Geheimnis und zu aufgezeichneten RADIUS-Paketen hat, kann alle gemangelten Attribute entschlüsseln. Verwenden Sie daher ausreichend lange und zufällige Shared Secrets.

Binäre Daten: Der Rückgabewert ist ein roher binärer String. Eine direkte Ausgabe in HTML oder Logs kann zu Problemen führen – verwenden Sie bin2hex() für eine lesbare Darstellung.

PECL-Erweiterung: radius_demangle() ist Teil der PECL-Erweiterung radius und ist nicht im PHP-Kern enthalten. Sie muss separat installiert werden (pecl install radius).