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