PHP 7.2 intégrera nativement la bibliothèque cryptographique Sodium

PHP 7.2 intégrera nativement la bibliothèque cryptographique Sodium

Des ellipses et des primitives

Avatar de l'auteur
Vincent Hermann

Publié dans

Logiciel

15/02/2017 3 minutes
31

PHP 7.2 intégrera nativement la bibliothèque cryptographique Sodium

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 :

Écrit par Vincent Hermann

Tiens, en parlant de ça :

Sommaire de l'article

Introduction

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

next n'a pas de brief le week-end

Le Brief ne travaille pas le week-end.
C'est dur, mais c'est comme ça.
Allez donc dans une forêt lointaine,
Éloignez-vous de ce clavier pour une fois !

Fermer

Commentaires (31)


Nice move!


Hi r11!



Trucy


“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…


Il y a du X25519 et du Chacha20 dans la librairie standard de Java ou C++ ?








wagaf a écrit :



Chacha20





Je ne m’y ferai jamais <img data-src=" />



Ça se marie parfaitement avec le Chienchienbière&nbsp;<img data-src=" />








wagaf a écrit :



Il y a du X25519 et du Chacha20 dans la librairie standard de Java ou C++ ?





Aucune idée, pourquoi cette question ?



J’ai rien compris à quoi ca sert c’est normal ?



sha1() ca suffit pas ?


&nbsp;Parce-que c’est le sujet de l’article, ce sont les algos fournis par Sodium (entre autre)








wagaf a écrit :



Il y a du X25519 et du Chacha20 dans la librairie standard de Java ou C++ ?







On ne peut pas comparer C/C++ et PHP.



C/C++ est un langage d’usage très large. Le concept de “bibliothèque standard” y est minimaliste. Quasiment rien n’est bibliothèque standard, mais absolument tout se trouve en C/C++. Et cela bien avant de le trouver pour PHP.



PHP est au contraire un langage spécialisé pour lequel tout est intégré, du moins en ce qui concerne sa fonction.



D’ailleurs, au passage, pour qu’il soit possible d’écrire une fonction pour PHP, il faut déjà qu’elles soit disponible en C. <img data-src=" />



Pas encore mort ce truc ?


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.


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 ?








wagaf a écrit :



Il y a du X25519 et du Chacha20 dans la librairie standard de Java ou C++ ?





Bouncycastle.org le gère si tu veux :https://bouncycastle.org/(mais depuis le 23 décembre 2016 :))



PHP 7 a vraiment révolutionné le langage.








revker a écrit :



PHP 7 a vraiment révolutionné le langage.







Et soulager de serveur… Perso, ça a diviser par deux la conso CPU, maintenant, j’ai l’impression que mon Gitlab consomme plus que tous mes sites PHP (300-400 visiteurs par jour).



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 !


Joli <img data-src=" />








Stel a écrit :



J’ai rien compris à quoi ca sert c’est normal ?



sha1() ca suffit pas ?





Sha1, ça fait 10 ans que c’est plus assez, un PC actuel peut trouver une collision en moins de 5 secondes.



EDIT : Encore je dis 5 secondes, mais selon la bécane, ça doit plutôt tenir de quelques milisecondes. ^^’



J’utilise password_hash depuis PHP 5.5, c’est bien mieux.


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.


bcrypt


Exact, bcrypt.


Je l’utilise d’ailleurs aussi en Java avec jBCrypt.


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).








Stel a écrit :



J’ai rien compris à quoi ca sert c’est normal ?



sha1() ca suffit pas ?





Crc8() pour les empreintes et Rot13() pour le chiffrement sont amplement suffisants pour faire de la cryptographie moderne. Je n’emploie que ça. Par sécurité, j’applique Rot13() deux fois de suite.

&nbsp;



Cgeek a écrit :



SHA1 et consorts (MD5, SHA256, …) sont des fonctions de hashage.&nbsp;





Je crois que c’était humoristique :-) sha1 est deprecated depuis un bon bout de temps.

&nbsp;









shadowfox a écrit :



Sha1, ça fait 10 ans que c’est plus assez, un PC actuel peut trouver une collision en moins de 5 secondes.



EDIT : Encore je dis 5 secondes, mais selon la bécane, ça doit plutôt tenir de quelques milisecondes. ^^’





N’exagères pas non plus. Selon ce papier “Practical Free-Start Collision Attacks on 76-step SHA-1”, c’est plutôt :

“We report that a single […] GTX&nbsp;970 is sufficient to find the collision in less than 5&nbsp;days.”



&nbsp;Et apparemment pas sur une version “complète” de SHA-1. Enfin je ne sais pas ce que c’est ces histoires de “XX-step reduced version” qu’on peut lire à droite à gauche. Si quelqu’un peut expliquer.









lecbee a écrit :



&nbsp;Et apparemment pas sur une version “complète” de SHA-1. Enfin je ne sais pas ce que c’est ces histoires de “XX-step reduced version” qu’on peut lire à droite à gauche. Si quelqu’un peut expliquer.





Un algorithme cryptographique répète N fois (32 par exemple) une même opération sur les données pour les “mélanger” le plus possible. Au plus ce nombre d’étapes est important, au plus la modification d’un unique bit va se “diffuser” dans l’ensemble des bits en sortie, rendant plus compliquée tentative de décryptage par des méthodes différentielles.



Exemple dans le cas d’un chiffrement, le réseau de Feistel &nbsp;:&nbsphttps://fr.wikipedia.org/wiki/R%C3%A9seau_de_Feistel



Une version “réduite à X étapes” ne répète que X (plus petit que N, évidemment…) fois le calcul au lieu de N. Moins de diffusion, plus de possibilités de trouver des collisions.









wagaf a écrit :



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 C/C++ n’est pas un langage pour la programmation “tout venant”.



Les programmeurs recherchent plus souvent à composer finement leur environnement plutôt que la facilité d’une bibliothèque standard intégrée.



D’ailleurs, C/C++ est certainement l’un des langage ou les programmeurs se servent le moins souvent de la bibliothèque standard, préférant souvent d’autres bibliothèques ou framework, voir l’utilisation directe de fonctions du système.



Même si ajouter des fonctionnalités a la bibliothèque standard ne nuit pas, cela fait souvent double emploi avec les fonctionnalités des framework et les “toolkit” personnelles des développeurs.



Ajoutons le fait qu’en C/C++, les bibliothèques sont écrites en langage C/C++, donc toute aussi performantes que celles de la bibliothèque standard. Ce n’est pas le cas en PHP ou des bibliothèques écrites en PHP sont moins performantes que les modules du langage écrits en C.



Dit autrement, en PHP il y a un grand intérêt à ajouter des fonctionnalités à la bibliothèque standard, mais c’est souvent tout l’inverse en C/C++.









33A20158-2813-4F0D-9D4A-FD05E2C42E48 a écrit :



&nbsp;

Je crois que c’était humoristique :-) sha1 est deprecated depuis un bon bout de temps.

&nbsp;





T’as raison, j’ai pas noté la subtilité.



Non pas assez subtile :)