Start · Sprachen · PHP · Referenz · radius_salt_encrypt_attr

radius_salt_encrypt_attr

Funktion

Verschlüsselt einen Attribut-Wert mit einem zufälligen Salt für die Verwendung in RADIUS-Paketen.

Kategorie: misc

Signatur

radius_salt_encrypt_attr(resource $radius_handle, string $data): string|false

Beschreibung

radius_salt_encrypt_attr() verschlüsselt einen Attribut-Wert mithilfe des RADIUS-Salt-Verschlüsselungsverfahrens (gemäß RFC 2868). Diese Methode wird typischerweise für Tunnel-Passwörter und ähnliche sensible Attribute verwendet, die über RADIUS übertragen werden sollen.

Im Unterschied zur einfachen radius_encrypt_attr()-Funktion wird hier zusätzlich ein zufälliger Salt-Wert in die Verschlüsselung einbezogen, was die Sicherheit gegenüber Replay-Angriffen erhöht. Das resultierende, verschlüsselte Attribut kann anschließend mit radius_put_attr() oder radius_put_vendor_attr() zum RADIUS-Paket hinzugefügt werden.

Die Funktion benötigt einen gültigen RADIUS-Handle, der zuvor mit radius_auth_open() oder radius_acct_open() erstellt wurde, da für die Verschlüsselung das gemeinsame Geheimnis (Shared Secret) des jeweiligen Servers aus dem Handle bezogen wird.

Diese Funktion ist Teil der PECL-Erweiterung radius und steht nur zur Verfügung, wenn diese Erweiterung installiert und aktiviert ist.

Parameter

Name Typ Default Beschreibung
$radius_handle Pflicht resource Ein gültiger RADIUS-Handle, erstellt mit radius_auth_open() oder radius_acct_open(). Er enthält das Shared Secret und weitere Verbindungsdaten, die für die Verschlüsselung benötigt werden.
$data Pflicht string Der Klartext-Attributwert, der mit Salt verschlüsselt werden soll, z. B. ein Tunnel-Passwort.

Rückgabewert

Typ
string|false
Beschreibung
Gibt den salt-verschlüsselten Attributwert als Binär-String zurück, der direkt als RADIUS-Attribut verwendet werden kann. Im Fehlerfall wird false zurückgegeben.

Beispiele

Tunnel-Passwort mit Salt verschlüsseln und als RADIUS-Attribut setzen

<?php
// RADIUS-Handle öffnen
$radius = radius_auth_open();

if (!radius_add_server($radius, '192.168.1.10', 1812, 'shared_secret', 3, 3)) {
    die('Fehler beim Hinzufügen des Servers: ' . radius_strerror($radius));
}

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

// Tunnel-Passwort mit Salt verschlüsseln
$tunnelPassword = 'mein_geheimes_passwort';
$encrypted = radius_salt_encrypt_attr($radius, $tunnelPassword);

if ($encrypted === false) {
    die('Verschlüsselung fehlgeschlagen: ' . radius_strerror($radius));
}

// Verschlüsseltes Attribut zum Paket hinzufügen (z. B. Tunnel-Password, Typ 69)
if (!radius_put_attr($radius, 69, $encrypted)) {
    die('Fehler beim Setzen des Attributs: ' . radius_strerror($radius));
}

echo 'Attribut erfolgreich verschlüsselt und gesetzt.' . PHP_EOL;
Attribut erfolgreich verschlüsselt und gesetzt.

Fehlerbehandlung bei misslungenem Verschlüsselungsversuch

<?php
$radius = radius_auth_open();

// Kein Server hinzugefügt – Verschlüsselung wird fehlschlagen
$result = radius_salt_encrypt_attr($radius, 'testwert');

if ($result === false) {
    echo 'Verschlüsselung fehlgeschlagen: ' . radius_strerror($radius) . PHP_EOL;
} else {
    echo 'Verschlüsselung erfolgreich.' . PHP_EOL;
}
Verschlüsselung fehlgeschlagen: ...

// Wichtig · Fallstricke

Sicherheitshinweis: Das Shared Secret zwischen RADIUS-Client und -Server sollte ausreichend lang und komplex sein, da es die Basis der Verschlüsselung bildet. Ein schwaches Shared Secret kann die Salt-Verschlüsselung aushebeln.

Die Funktion ist nur verfügbar, wenn die PECL-Erweiterung radius installiert ist. Unter modernen PHP-Versionen kann die Verfügbarkeit eingeschränkt sein. Alternativ sollten modernere RADIUS-Bibliotheken oder Implementierungen geprüft werden.

Da die Salt-Verschlüsselung einen Zufallswert verwendet, erzeugt jeder Aufruf mit denselben Eingaben einen anderen verschlüsselten Wert – dies ist beabsichtigt und erhöht die Sicherheit.