Signatur
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
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);
?>
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).