La cryptographie à clé publique est réputée pour le surcoût important engendré tant au niveau de l'implémentation (calculs sur les grands nombres, manipulation de points dans une courbe elliptique, etc.) qu'au niveau calculatoire. Un des principaux usages de la cryptographie à clé publique est l'échange de clés lors de la mise en place d'une communication sécurisée (par exemple pour une connexion TLS). Cette opération, gourmande en temps de calcul, permet au mieux (en utilisant ECDH avec un Core i7-4770) de gérer de l'ordre de vingt mille connexions entrantes par seconde à 128 bits de sécurité ou six mille connexions à 256 bits de sécurité.
La cryptographie basée sur les réseaux est entrée en scène en force depuis quelques années, en particulier grâce aux fonctionnalités avancées, de type chi rement complètement homomorphe, qu'elle permet d'atteindre. Notre bibliothèque, NFLlib, permet d'implémenter simplement des algorithmes cryptographiques basés sur les réseaux euclidiens, le tout avec des performances supérieures à l'état de l'art connu. Pour illustrer cela, nous implémentons, en une dizaine de lignes de code, un système de chi rement standard avec une estimation conservatrice du niveau de sécurité. Cette implémentation permet de gérer quatre millions d'échanges de clés de type TLS par seconde à 128 bits de sécurité et deux millions à 256 bits de sécurité.
Si nous partons sur un proxy web utilisé pour du partage de charge et pouvant gérer les connexions TLS, il est possible de traiter jusqu'à 70 000 requêtes par seconde 1 sur un unique serveur. L'utilisation de ECDH demandera trois Core i7-4770 à 100% rien que pour les échanges de clés, alors que notre bibliothèque permet d'utiliser uniquement 2% d'un unique CPU libérant ainsi les processeurs pour traiter les requêtes.
Depuis le début des années 90, une branche de la complexité est entrée avec force dans le monde de la cryptographie : la complexité des problèmes algorithmiques dans les réseaux euclidiens. Cette branche a donné naissance à ce qu'on appelle de nos jours la cryptographie basée sur les réseaux (lattice-based cryptography en anglais).
Ce domaine est de plus en plus présent dans les conférences en cryptographie pour plusieurs raisons :
Dans cet article nous nous intéressons aux performances pratiques de la cryptographie basée sur les réseaux.
Un comportement asymptotique, aussi excellent soit-il, n'est pas garant d'une supériorité lors d'une utilisation pratique. Un bon exemple est la multiplication basée sur la transformée de Fourrier qui a un coût quasi linéaire en la taille n d'un nombre (proportionnel à nlog n) mais dont le coût de base est important de telle façon que cet algorithme n'est intéressant que quand les nombres sont très grands (milliers ou dizaines de milliers de bits).
Dans cet article nous présentons NFLlib, une bibliothèque permettant de développer facilement des algorithmes de cryptographie basée sur les réseaux euclidiens, le tout avec d'excellents résultats au niveau des performances. Cette bibliothèque permet de faire abstraction des objets sous-jacents dans les réseaux (des polynômes) et de juste décrire les opérations à réaliser (par exemple générer un élément aléatoire, multiplier celui-ci par un autre élément, etc.). Nous présentons également une étude de performances comparative dans le cadre des échanges de clés.
Une version primitive de NFLlib est présente dans le projet XPIRe [1] (comme un sous-module). XPIRe est une bibliothèque C++ disponible 2 sur GitHub, permettant de réaliser du téléchargement privé (i.e. de télécharger un élément d'une base de données sans que le serveur contenant la base sache quel élément a été téléchargé) à haute vitesse. La comparaison à ce module initial est donnée en section 1.2.
Il existe di érentes bibliothèques génériques permettant de dé