Comment utiliser l’extension PHP Sodium dans ServBay
ServBay, en tant qu’environnement intégré de développement web local performant, inclut et active par défaut l’extension PHP Sodium. Sodium est une bibliothèque de chiffrement moderne et facile à utiliser, largement choisie pour la protection des données et la sécurisation des communications. Grâce à ServBay, les développeurs accèdent aisément aux fonctions de chiffrement et déchiffrement offertes par Sodium dans leurs applications PHP, sans compilation ou configuration supplémentaire, garantissant ainsi la sécurité des données de leurs projets.
Présentation de l’extension Sodium
Sodium (libsodium) est une bibliothèque de chiffrement moderne, conçue pour fournir des fonctions sécurisées, simples et efficaces. Elle prend en charge une gamme étendue d’algorithmes et d’opérations cryptographiques : chiffrement symétrique, asymétrique, signatures numériques, calculs de hachage, échange de clés, etc. Depuis PHP 7.2, la bibliothèque Sodium est intégrée en tant qu’extension principale, remplaçant progressivement la bibliothèque mcrypt, désormais obsolète et moins sécurisée.
Points forts
- Facilité d’utilisation : API simplifiée pour le chiffrement/déchiffrement, accessible à tous les développeurs.
- Grande sécurité : Implémentation d’algorithmes modernes et de pratiques cryptographiques robustes garantissant la protection des données.
- Polyvalence : Prise en charge du chiffrement symétrique et asymétrique, signatures numériques, hachage, échange de clés, etc.
- Compatibilité multiplateforme : Peut être utilisée sur divers systèmes d’exploitation et langages de programmation.
- Performance optimale : Opérations de chiffrement et déchiffrement rapides, adaptées aux applications exigeantes.
Sodium, remplaçant moderne de mcrypt
La bibliothèque mcrypt fut longtemps courante dans l’écosystème PHP. Cependant, faute de maintenance et face à des failles de sécurité potentielles, elle a été obsolète depuis PHP 7.1 et totalement supprimée en PHP 7.2. Sodium a donc été introduite pour offrir une alternative moderne et sûre. Sodium garantit une sécurité renforcée, une utilisation intuitive et des performances supérieures ; il est vivement recommandé de l’utiliser pour toutes les nouvelles applications, à la place de mcrypt, pour le chiffrement et le déchiffrement des données.
Disponibilité et activation de Sodium sous ServBay
ServBay fournit l’extension Sodium précompilée et activée par défaut sur PHP 7.2 et toutes les versions supérieures. En tant qu’utilisateur de ServBay, vous n’avez donc aucune installation ni configuration à faire – il suffit de lancer ServBay et d’utiliser la version PHP souhaitée pour disposer immédiatement des fonctions Sodium dans vos scripts.
Pour vérifier que Sodium est bien activée, utilisez la fonction phpinfo() directement accessible dans ServBay. Sélectionnez la version PHP utilisée dans l’interface, accédez à l’option phpinfo()
, puis cherchez « sodium » dans la page résultante pour afficher les informations relatives au module.
Utilisation de l’extension Sodium dans le code PHP
Une fois l’extension Sodium activée, vous pouvez faire appel à ses fonctions dans vos projets PHP. Placez vos fichiers PHP dans le sous-répertoire associé à votre site web, à l’intérieur du dossier racine ServBay (par défaut /Applications/ServBay/www
), puis lancez-les via votre navigateur. Voici quelques exemples d’utilisation :
Exemple de code (chiffrement symétrique)
Le chiffrement symétrique utilise une seule et même clé pour chiffrer et déchiffrer les données.
php
<?php
// Message à chiffrer
$message = "This is a secret message from servbay.demo";
// Générer une clé aléatoire (longueur fixe SODIUM_CRYPTO_SECRETBOX_KEYBYTES)
$key = sodium_crypto_secretbox_keygen();
// Générer un nonce aléatoire (numéro à usage unique), à utiliser aussi bien au chiffrement qu’au déchiffrement
$nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);
// Chiffrer le message avec la clé et le nonce
$ciphertext = sodium_crypto_secretbox($message, $nonce, $key);
echo "Message d’origine : " . $message . "\n";
echo "Nonce (Base64): " . base64_encode($nonce) . "\n"; // Le nonce doit généralement être stocké ou transmis avec le message chiffré
echo "Message chiffré (Base64): " . base64_encode($ciphertext) . "\n\n";
// --- Déchiffrement ---
// Supposons que l’on a le message chiffré, le nonce et la clé stockés/transmis
$retrieved_ciphertext = $ciphertext;
$retrieved_nonce = $nonce;
$retrieved_key = $key;
// Déchiffrer avec la clé et le nonce
$decrypted = sodium_crypto_secretbox_open($retrieved_ciphertext, $retrieved_nonce, $retrieved_key);
// Vérifier si le déchiffrement a réussi
if ($decrypted === false) {
echo "Échec du déchiffrement !\n";
} else {
echo "Message déchiffré : " . $decrypted . "\n";
}
// Effacer les données sensibles de la mémoire pour éviter toute fuite
sodium_memzero($key);
sodium_memzero($retrieved_key);
if ($decrypted !== false) {
sodium_memzero($decrypted);
}
?>
1
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
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
Exemple de code (chiffrement asymétrique)
Le chiffrement asymétrique repose sur une paire de clés : la clé publique (pour chiffrer), et la clé privée (pour déchiffrer).
php
<?php
// Message à chiffrer
$message = "This is another secret message for servbay-demo user";
// Générer une paire de clés (la publique pour le chiffrement, la privée pour le déchiffrement)
$keypair = sodium_crypto_box_keypair();
$publicKey = sodium_crypto_box_publickey($keypair); // À partager avec votre correspondant
$secretKey = sodium_crypto_box_secretkey($keypair); // À conserver en privé, ne jamais la divulguer
echo "Clé publique (Base64): " . base64_encode($publicKey) . "\n";
echo "Clé privée (Base64): [clé privée confidentielle, à ne pas afficher ni communiquer]\n\n";
// --- Chiffrement (avec la clé publique du destinataire) ---
// Supposons que l’expéditeur possède la $publicKey du destinataire
// Générer un nonce aléatoire, à retrouver à la décryption
$nonce = random_bytes(SODIUM_CRYPTO_BOX_NONCEBYTES);
// Utiliser la clé publique du destinataire et la clé privée de l’expéditeur
// Note : dans une vraie application, il s’agit de la clé privée de l’expéditeur et de la clé publique du destinataire
// Sodium utilise l’échange de clés Diffie-Hellman via Curve25519 ; il faut donc un couple clé privée / clé publique de chaque côté
// Pour simplifier, ici clé publique et privée appartiennent au même utilisateur
$ciphertext = sodium_crypto_box($message, $nonce, $keypair); // Dans cet exemple, keypair inclut les deux
echo "Message d’origine : " . $message . "\n";
echo "Nonce (Base64): " . base64_encode($nonce) . "\n"; // Le nonce doit être stocké ou transmis avec le message chiffré
echo "Message chiffré (Base64): " . base64_encode($ciphertext) . "\n\n";
// --- Déchiffrement (avec la clé privée du destinataire) ---
// Supposons que le destinataire dispose du message chiffré, du nonce, de sa clé privée ($secretKey) et de la clé publique de l’expéditeur ($publicKey)
// Ici, nous utilisons simplement $keypair pour la démo
$retrieved_ciphertext = $ciphertext;
$retrieved_nonce = $nonce;
$retrieved_keypair = $keypair;
// Déchiffrement avec la paire de clés
$decrypted = sodium_crypto_box_open($retrieved_ciphertext, $retrieved_nonce, $retrieved_keypair);
// Vérifier si le déchiffrement a réussi
if ($decrypted === false) {
echo "Échec du déchiffrement !\n";
} else {
echo "Message déchiffré : " . $decrypted . "\n";
}
// Effacer les données sensibles
sodium_memzero($secretKey); // Effacer la clé privée
sodium_memzero($keypair); // Effacer la paire de clés
if ($decrypted !== false) {
sodium_memzero($decrypted);
}
?>
1
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
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
Exemple de code (signature numérique)
La signature numérique permet de garantir l’intégrité du message et l’identité de l’expéditeur. La clé privée sert à signer, la clé publique à vérifier la signature.
php
<?php
// Message à signer
$message = "This message needs to be signed by servbay.demo";
// Générer la paire de clés pour la signature (clé privée pour signer, clé publique pour vérifier)
$keypair = sodium_crypto_sign_keypair();
$publicKey = sodium_crypto_sign_publickey($keypair); // À partager avec le vérificateur
$secretKey = sodium_crypto_sign_secretkey($keypair); // À conserver secret !
echo "Clé publique (Base64): " . base64_encode($publicKey) . "\n";
echo "Clé privée (Base64): [clé privée confidentielle, à ne pas afficher ni communiquer]\n\n";
// --- Signature (par l’émetteur via sa clé privée) ---
$signature = sodium_crypto_sign_detached($message, $secretKey);
echo "Message original : " . $message . "\n";
echo "Signature (Base64): " . base64_encode($signature) . "\n\n";
// --- Vérification (par le récepteur via la clé publique de l’émetteur) ---
// Supposons que le récepteur ait le message, la signature et la clé publique ($publicKey) de l’émetteur
$retrieved_message = $message;
$retrieved_signature = $signature;
$retrieved_publicKey = $publicKey;
// Vérifier la signature avec la clé publique
if (sodium_crypto_sign_verify_detached($retrieved_signature, $retrieved_message, $retrieved_publicKey)) {
echo "Signature valide ! Le message n’a pas été altéré et provient bien du détenteur de la clé privée.\n";
} else {
echo "Signature invalide ! Le message a pu être modifié ou la signature ne correspond pas à la clé privée attendue.\n";
}
// Effacer les données sensibles de la mémoire
sodium_memzero($secretKey); // Effacer la clé privée
sodium_memzero($keypair); // Effacer la paire de clés
?>
1
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
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
Conclusion
Avec ServBay, les développeurs bénéficient d’un accès instantané à l’extension PHP Sodium, préinstallée et activée par défaut. Cela supprime toute complexité d'installation ou de configuration locale et vous permet de vous focaliser sur le renforcement de la sécurité de vos applications grâce à la puissance de Sodium. Devenu le standard moderne en remplacement de mcrypt, Sodium est la clef pour bâtir des applications web fiables et sécurisées. ServBay simplifie toutes ces étapes et accompagne les développeurs dans la création d’environnements locaux performants et sûrs.