Verwendung der Sodium PHP-Erweiterung in ServBay
ServBay ist eine leistungsstarke lokale Web-Entwicklungsumgebung, die die Sodium PHP-Erweiterung vorkonfiguriert und standardmäßig aktiviert. Sodium ist eine moderne, einfach zu bedienende Kryptobibliothek, die weit verbreitet für Datenverschlüsselung und sichere Kommunikation eingesetzt wird. Dank ServBay können Entwickler die Sodium-Erweiterung ohne zusätzliche Kompilierung oder Konfiguration problemlos in ihren PHP-Anwendungen für Datenverschlüsselung und -entschlüsselung nutzen und somit die Sicherheit ihrer Anwendungen gewährleisten.
Einführung in die Sodium-Erweiterung
Sodium (libsodium) ist eine moderne Kryptographiebibliothek, die darauf ausgelegt ist, einfache, benutzerfreundliche und sichere Verschlüsselungsfunktionen bereitzustellen. Sie unterstützt zahlreiche kryptographische Algorithmen und Operationen, wie symmetrische und asymmetrische Verschlüsselung, digitale Signaturen, Hash-Berechnung, Schlüsselaustausch und mehr. Ab PHP 7.2 ist die Sodium-Bibliothek als Kernerweiterung in PHP integriert und stellt die moderne und sicherere Alternative zur veralteten mcrypt-Bibliothek dar.
Wichtige Merkmale
- Einfache Bedienung: Eine übersichtliche API erleichtert Entwicklern Verschlüsselungs- und Entschlüsselungsoperationen.
- Hohe Sicherheit: Moderne kryptographische Algorithmen und Best Practices sorgen für maximale Datensicherheit.
- Vielfältige Einsatzmöglichkeiten: Unterstützt symmetrische und asymmetrische Verschlüsselung, digitale Signaturen, Hash-Erstellung, Schlüsselaustausch u.v.m.
- Plattformübergreifend: Einsetzbar unter verschiedenen Betriebssystemen und Programmiersprachen.
- Hochperformant: Sehr schnelle Verschlüsselungs- und Entschlüsselungsvorgänge, ideal für performanzkritische Anwendungen.
Sodium als Ersatz für mcrypt
Die mcrypt-Bibliothek war einst ein weit verbreitetes Kryptomodul in PHP, wurde jedoch aus Wartungsgründen und wegen potenzieller Sicherheitslücken in PHP 7.1 abgeschafft und ab PHP 7.2 entfernt. Sodium wurde als moderner und sicherer Ersatz eingeführt. Die Sodium-Bibliothek bietet bessere Sicherheit, eine höhere Benutzerfreundlichkeit und bessere Performance und sollte daher in neuen Projekten anstelle von mcrypt für die Datenverschlüsselung und -entschlüsselung verwendet werden.
Verfügbarkeit und Aktivierung von Sodium in ServBay
ServBay liefert die PHP-Versionen ab 7.2 mit vorinstallierter und standardmäßig aktivierter Sodium-Erweiterung aus. Das bedeutet, als ServBay-Nutzer müssen Sie Sodium nicht manuell installieren oder konfigurieren. Starten Sie einfach ServBay, wählen Sie die gewünschte PHP-Version und nutzen Sie die Sodium-Funktionen direkt in Ihrem Code.
Um zu überprüfen, ob Sodium aktiviert ist, nutzen Sie die phpinfo()-Funktion in ServBay. Wählen Sie in der ServBay-Oberfläche Ihre PHP-Version, rufen Sie die Option phpinfo()
auf und suchen Sie auf der Ausgabeseite nach „sodium“. Die Informationen zum Sodium-Modul sollten sichtbar sein.
Einsatz der Sodium-Erweiterung im PHP-Code
Nachdem Sie sichergestellt haben, dass die Sodium-Erweiterung aktiviert ist, können Sie deren Funktionen in Ihrem PHP-Projekt verwenden. Speichern Sie Ihre PHP-Dateien im jeweiligen Unterordner des Web-Root-Verzeichnisses von ServBay (Standardmäßig /Applications/ServBay/www
) und greifen Sie über den Browser darauf zu. Nachfolgend finden Sie einige grundlegende Anwendungsbeispiele:
Beispielcode (Symmetrische Verschlüsselung)
Bei symmetrischer Verschlüsselung wird zum Ver- und Entschlüsseln derselbe Schlüssel verwendet.
<?php
// Zu verschlüsselnde Nachricht
$message = "This is a secret message from servbay.demo";
// Generiere einen zufälligen Schlüssel (Schlüssellänge muss SODIUM_CRYPTO_SECRETBOX_KEYBYTES entsprechen)
$key = sodium_crypto_secretbox_keygen();
// Generiere einen zufälligen Nonce (Number used once), der beim Ver- und Entschlüsseln identisch sein muss
$nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);
// Verschlüsselung mit Schlüssel und Nonce
$ciphertext = sodium_crypto_secretbox($message, $nonce, $key);
echo "Originale Nachricht: " . $message . "\n";
echo "Nonce (Base64): " . base64_encode($nonce) . "\n"; // Der Nonce muss zusammen mit dem Ciphertext gespeichert oder übertragen werden
echo "Ciphertext (Base64): " . base64_encode($ciphertext) . "\n\n";
// --- Entschlüsselung ---
// Wir nehmen an, dass wir Ciphertext, Nonce und Schlüssel bereits vorliegen haben
$retrieved_ciphertext = $ciphertext; // Verschlüsselter Text aus Speicherung oder Übertragung
$retrieved_nonce = $nonce; // Nonce aus Speicherung oder Übertragung
$retrieved_key = $key; // Schlüssel aus Speicherung oder Übertragung
// Entschlüsseln mit Schlüssel und Nonce
$decrypted = sodium_crypto_secretbox_open($retrieved_ciphertext, $retrieved_nonce, $retrieved_key);
// Prüfen, ob Entschlüsselung erfolgreich war
if ($decrypted === false) {
echo "Entschlüsselung fehlgeschlagen!\n";
} else {
echo "Entschlüsselte Nachricht: " . $decrypted . "\n";
}
// Sensible Daten aus dem Speicher entfernen
sodium_memzero($key);
sodium_memzero($retrieved_key);
if ($decrypted !== false) {
sodium_memzero($decrypted);
}
?>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
Beispielcode (Asymmetrische Verschlüsselung)
Bei asymmetrischer Verschlüsselung kommen ein Schlüsselpaar aus privatem und öffentlichem Schlüssel zum Einsatz. Der öffentliche Schlüssel dient zur Verschlüsselung, der private zur Entschlüsselung.
<?php
// Zu verschlüsselnde Nachricht
$message = "This is another secret message for servbay-demo user";
// Schlüsselpaar generieren (öffentlicher Schlüssel zum Verschlüsseln, privater zum Entschlüsseln)
$keypair = sodium_crypto_box_keypair();
$publicKey = sodium_crypto_box_publickey($keypair); // An die Gegenstelle weitergeben
$secretKey = sodium_crypto_box_secretkey($keypair); // Sicher aufbewahren, niemals weitergeben
echo "Öffentlicher Schlüssel (Base64): " . base64_encode($publicKey) . "\n";
echo "Privater Schlüssel (Base64): [Privater Schlüssel ist vertraulich und sollte nicht angezeigt oder weitergegeben werden]\n\n";
// --- Verschlüsselung (mit dem öffentlichen Schlüssel des Empfängers) ---
// Es wird angenommen, dass der Sender den $publicKey des Empfängers hat
// Generiere einen zufälligen Nonce, beim Ver- und Entschlüsseln identisch zu verwenden
$nonce = random_bytes(SODIUM_CRYPTO_BOX_NONCEBYTES);
// Normalerweise werden für die Verschlüsselung der öffentliche Schlüssel des Empfängers und der private Schlüssel des Absenders verwendet (hier vereinfacht).
// Hinweis: In der Praxis werden Sender-Privatschlüssel + Empfänger-Öffentlicher Schlüssel verwendet.
// Sodiums crypto_box verwendet intern Curve25519 für Diffie-Hellman-Schlüsselaustausch, benötigt deshalb beide Seiten-Schlüsselpaar.
// Im Beispiel wird zum Vereinfachen ein und dasselbe Schlüsselpaar genutzt (Verschlüsselung und Entschlüsselung erfolgen beim selben Nutzer).
$ciphertext = sodium_crypto_box($message, $nonce, $keypair); // Das keypair enthält beide Schlüssel
echo "Originale Nachricht: " . $message . "\n";
echo "Nonce (Base64): " . base64_encode($nonce) . "\n"; // Der Nonce muss zusammen mit dem Ciphertext gespeichert oder übertragen werden
echo "Ciphertext (Base64): " . base64_encode($ciphertext) . "\n\n";
// --- Entschlüsselung (mit dem privaten Schlüssel des Empfängers) ---
// Empfänger hat Ciphertext, Nonce und den eigenen $secretKey sowie den $publicKey des Senders
// Im Beispiel: Verwendung des gleichen keypair
$retrieved_ciphertext = $ciphertext;
$retrieved_nonce = $nonce;
$retrieved_keypair = $keypair; // Entschlüsselung mit dem Schlüsselpaar
// Entschlüsselung
$decrypted = sodium_crypto_box_open($retrieved_ciphertext, $retrieved_nonce, $retrieved_keypair);
// Prüfen, ob Entschlüsselung erfolgreich war
if ($decrypted === false) {
echo "Entschlüsselung fehlgeschlagen!\n";
} else {
echo "Entschlüsselte Nachricht: " . $decrypted . "\n";
}
// Sensible Daten aus dem Speicher entfernen
sodium_memzero($secretKey); // Privatschlüssel löschen
sodium_memzero($keypair); // Schlüsselpaar löschen
if ($decrypted !== false) {
sodium_memzero($decrypted);
}
?>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
Beispielcode (Digitale Signatur)
Mit digitalen Signaturen lässt sich die Integrität einer Nachricht sowie die Identität des Absenders überprüfen. Die Signatur wird mit dem privaten Schlüssel erstellt und mit dem öffentlichen geprüft.
<?php
// Zu signierende Nachricht
$message = "This message needs to be signed by servbay.demo";
// Signaturschlüsselpaar generieren (Privatschlüssel zum Signieren, öffentlicher Schlüssel zur Verifikation)
$keypair = sodium_crypto_sign_keypair();
$publicKey = sodium_crypto_sign_publickey($keypair); // An Verifizierer weitergeben
$secretKey = sodium_crypto_sign_secretkey($keypair); // Sicher aufbewahren, niemals weitergeben
echo "Öffentlicher Schlüssel (Base64): " . base64_encode($publicKey) . "\n";
echo "Privater Schlüssel (Base64): [Privater Schlüssel ist vertraulich und sollte nicht angezeigt oder weitergegeben werden]\n\n";
// --- Signieren (mit Sender-Privatschlüssel) ---
$signature = sodium_crypto_sign_detached($message, $secretKey);
echo "Originale Nachricht: " . $message . "\n";
echo "Signatur (Base64): " . base64_encode($signature) . "\n\n";
// --- Verifikation (mit Sender-öffentlichem Schlüssel) ---
// Verifizierer hat Nachricht, Signatur und den $publicKey des Absenders
$retrieved_message = $message;
$retrieved_signature = $signature;
$retrieved_publicKey = $publicKey;
// Überprüfung der Signatur mit dem öffentlichen Schlüssel
if (sodium_crypto_sign_verify_detached($retrieved_signature, $retrieved_message, $retrieved_publicKey)) {
echo "Signatur gültig! Die Nachricht wurde nicht manipuliert und stammt vom Besitzer des privaten Schlüssels.\n";
} else {
echo "Ungültige Signatur! Die Nachricht wurde womöglich verändert oder die Signatur stammt nicht vom zugehörigen privaten Schlüssel.\n";
}
// Sensible Daten aus dem Speicher entfernen
sodium_memzero($secretKey); // Privatschlüssel löschen
sodium_memzero($keypair); // Schlüsselpaar löschen
?>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
Fazit
Dank ServBay können Entwickler unkompliziert und ohne zusätzlichen Installationsaufwand die standardmäßig aktivierte Sodium PHP-Erweiterung verwenden. Das beseitigt die Komplexität bei Installation und Konfiguration von Sodium in lokalen Entwicklungsumgebungen und ermöglicht, sich ganz auf die Absicherung eigener Anwendungen zu konzentrieren. Sodium ist der moderne Ersatz für mcrypt und ein Schlüsselelement beim Aufbau sicherer und zuverlässiger Webanwendungen. ServBay vereinfacht den Prozess und unterstützt Entwickler beim Einrichten einer effizienten und sicheren lokalen Entwicklungsumgebung.