PHP 7.2 intégrera nativement la bibliothèque cryptographique Sodium
Des ellipses et des primitives
Le 15 février 2017 à 15h45
3 min
Logiciel
Logiciel
La semaine dernière, il a été décidé que la prochaine version importante pour PHP, la 7.2, embarquerait la bibliothèque cryptographique Sodium. Un ajout de taille, puisque le langage va proposer en standard une sécurité « moderne ».
C’est par un vote unanime qu’il a été décidé d’inclure dans PHP 7.2 la bibliothèque libsodium. Cette dernière – un fork de NaCl – est conçue pour fournir une solution de cryptographie qui se veut moderne, à savoir clé en main et multiplateforme. Elle peut être utilisée dans des applications fixes ou mobiles, mais elle est aussi portable, compilable à l’envie et installable.
Sodium devient une extension Core de PHP
L’objectif de Sodium est avant tout de fournir au sein d’un package unique toutes les fonctionnalités liées aux chiffrement, déchiffrement, signature, hachage de mots de passe, dérivations de clés et autres. Elle s’appuie sur des primitives (algorithmes cryptographiques de bas niveau) modernes comme X25519, Ed25519, Xsalsa20poly1305, BLAKE2, Argon2, SipHash-2-4 et ChaCha20-Poly1305. On n’y trouve en fait aucune primitive passée entre les mains du NIST (National Institute of Standards and Technology), lié à la NSA.
C’est cette trousse à outils qui va donc se retrouver dans PHP 7.2, dont la version finale est attendue pour la fin de l’année. Mais en plus de la sécurité que cela implique éventuellement pour les développeurs qui veulent y faire appel, on trouve une API de haut niveau qui permet d’utiliser la bibliothèque assez facilement. En outre, on parle bien d’une inclusion dans PHP Core, ce qui annule tout besoin d’une extension spécifique.
De la sécurité moderne, dès l'ouverture
L’idée derrière ce vote est de faire de PHP un langage permettant d’inclure directement des mesures de sécurité, sans passer par des extensions et en évitant le classique RSA. Pour Scott Arciszewski, spécialiste du PHP et auteur de la proposition d’inclusion, l’ajout fait tout simplement du langage le premier à proposer une cryptographie moderne dans sa bibliothèque standard.
Dans son billet de blog, il explique ainsi que nombreux ont été les développeurs à lui répondre que d’autres langages proposaient des fonctionnalités aussi poussées pour la cryptographie. Il rétorque que ces fonctionnalités sont toujours présentes dans des bibliothèques optionnelles dès que l’on souhaite se servir de TLS.
Vrai coup d'envoi pour la fin de l'année
Cela étant, on précisera que rien n’empêche les autres langages d’inclure à leur tour la bibliothèque Sodium ou même de travailler à l’inclusion d’autres bibliothèques, éventuellement développées en interne. À condition de fournir les API qui permettent de l’exploiter facilement.
En outre, même si Sodium est intégré à PHP Core, certains développeurs seront moins frileux devant l’usage de modules externes. Alors que PHP 7.2 doit arriver à la fin de l'année, il n'est pas dit non plus que le changement se diffuse rapidement, les services devant déployer eux-mêmes cette nouvelle version.
Pour en savoir plus :
- Description complète de Sodium
- Dépôt GitHub de libsodium
- RFC de l’intégration de libsodium dans PHP Core
- Billet de Scott Arciszewski
PHP 7.2 intégrera nativement la bibliothèque cryptographique Sodium
-
Sodium devient une extension Core de PHP
-
De la sécurité moderne, dès l'ouverture
-
Vrai coup d'envoi pour la fin de l'année
Commentaires (31)
Vous devez être abonné pour pouvoir commenter.
Déjà abonné ? Se connecter
Abonnez-vousLe 15/02/2017 à 15h56
Nice move!
Le 15/02/2017 à 16h21
Hi r11!
–
Trucy
Le 15/02/2017 à 16h24
“Il rétorque que ces fonctionnalités sont toujours présentes dans des bibliothèques optionnelles dès que l’on souhaite se servir de TLS.”
Il a pas du chercher bien loin alors, j’ai tapé le nom de ma plateforme de dev actuelle (qui doit être dans le top des plus utilisés) + TLS, et le premier lien est vers la doc officiel, qui décrit la classe de base gérant entre autre le TLS.
Non, je crois que quasi toutes les techno web le gère déjà depuis des années, PHP a comme d’hab 10 ans de retard. Après c’est aussi une de ses forces, donc pas besoin de mentir pour la cacher…
Le 15/02/2017 à 16h34
Il y a du X25519 et du Chacha20 dans la librairie standard de Java ou C++ ?
Le 15/02/2017 à 16h43
Le 15/02/2017 à 16h56
Ça se marie parfaitement avec le Chienchienbière " />
Le 15/02/2017 à 17h09
Le 15/02/2017 à 17h36
J’ai rien compris à quoi ca sert c’est normal ?
sha1() ca suffit pas ?
Le 15/02/2017 à 17h43
Parce-que c’est le sujet de l’article, ce sont les algos fournis par Sodium (entre autre)
Le 15/02/2017 à 17h46
Le 15/02/2017 à 18h51
Pas encore mort ce truc ?
Le 15/02/2017 à 18h51
C’est cool pour PHP, mais c’est vraiment important juste parce qu’ils sont sur un créneau assez particulier, celui des langages en environnement mutualisé où les utilisateurs ont peu de marge de manœuvre sur les extensions C type PECL.
Même en restant sur les langages type Python ou Ruby, il existe déjà des bibliothèques pour manier des algorithmes modernes autres que ECDSA ou AES, voir des wrappers pour NaCl/Sodium et les utilisateurs de ces langages seront typiquement plus dans un contexte d’OS dédié, même si c’est juste une VM. Et auront donc beaucoup moins de problème à installer de bibliothèques supplémentaires.
De plus, le support pour Chacha20, Poly1305, Ed25519 et autres délicatesses bersteiniennes a été rajouté dans OpenSSL 1.1. Le temps que cette version redescende dans les distributions populaires et l’avantage deviendra assez rhétorique.
Le 15/02/2017 à 19h30
Bah depuis C++11 la tendance est l’intégration de nombreuses fonctionnalités de base qui manquaient cruellement : threads, expressions régulières, système de fichier etc. donc pourquoi pas HTTP et crypto ?
Le 15/02/2017 à 19h55
Le 15/02/2017 à 19h57
PHP 7 a vraiment révolutionné le langage.
Le 15/02/2017 à 22h40
Le 16/02/2017 à 01h30
Y’a une erreur dans l’article : “Il rétorque que ces fonctionnalités sont toujours présentes dans des bibliothèques optionnelles dès que l’on souhaite se servir de TLS.”
Scott dit “Go 1.8 will use X25519 and ChaCha20-Poly1305 in its TLS stack, but it doesn’t offer modern application-layer cryptography in its standard library. Which means if you want to use modern TLS, you can, but if you want to encrypt data at rest, you have to either go outside the standard library or use 90’s era public-key cryptography.”
Il dit que y’a bien de la crypto pour faire du TLS, et notamment de la crypto moderne dans la couche TLS de Go 1.8, mais qu’il n’y a pas de crypto moderne utilisable par le développeur dans la librairie standard d’un langage (sauf PHP maintenant) pour chiffer, hasher, signer, authentifier etc. et que donc est limité aux vieux trucs d’OpenSSL type RSA (bof) en général.
Donc le commentaire de @Bejarid n’est pas valide. Le sujet ici c’est libsodium qui permet de faire de la crypto niveau développeur, pas TLS, ça n’a rien à voir. Encore heureux que la plupart des langages permettent de faire du TLS de nos jours !
Le 16/02/2017 à 07h40
Joli " />
Le 16/02/2017 à 08h28
Le 16/02/2017 à 08h32
J’utilise password_hash depuis PHP 5.5, c’est bien mieux.
Le 16/02/2017 à 08h44
C’est quel algo derrière le nom de cette fonction ?
Pour le sha, sha256 est un strict minimum aujourd’hui en tout cas et un salt en plus est le bienvenue.
Le 16/02/2017 à 09h02
bcrypt
Le 16/02/2017 à 09h17
Exact, bcrypt.
Le 16/02/2017 à 09h17
Je l’utilise d’ailleurs aussi en Java avec jBCrypt.
Le 16/02/2017 à 10h15
SHA1 et consorts (MD5, SHA256, …) sont des fonctions de hashage.
Sodium peut aller plus loin et propose des fonctions de chiffrement et signature cryptographique (par exemple, Ed25519 dans Sodium permet la signature).
Le 16/02/2017 à 11h22
Le 16/02/2017 à 13h08
Le 16/02/2017 à 14h29
Le 16/02/2017 à 15h15
Le 16/02/2017 à 18h01
Le 17/02/2017 à 12h42
Non pas assez subtile :)