Les réseaux euclidiens

De Wiki du LAMA (UMR 5127)
Aller à la navigation Aller à la recherche

Un réseau euclidien est un objet mathématique qui a été utilisé premièrement pour la cryptanalyse. C'est Miklos Ajtai qui a démontré que les réseaux euclidiens peuvent servir de base solide pour la cryptologie. Certains caractéristiques remarquables des problèmes de réseaux sont qu'il n'y a pas d'instances faibles, ce qui ne va pas être le cas de RSA où avec certains nombres premiers la factorisation sera trop simple. De plus ces problèmes sont reconnu comme étant difficile. Il est donc pas possible de les résoudre efficacement. Et pour finir, on ne connaît pas d'attaque même avec un ordinateurs quantiques. Les cryptosystèmes qui se basent sur cet objet mathématique sont donc actuellement source de nombreuse études. En particularité pour la caractéristique homomorphe de ce chiffrement, c'est à dire qu'on peut effectuer des calculs directement sur le chiffré. Cela peut garantir la sécurité dans de nombreuses applications comme par exemple lors de calculs effectués sur les services cloud.

Introduction

Un ordinateur quantique, ou calculateur quantique, utilise les propriétés de la physique quantique comme l'intrication quantique et la superposition quantique. Cet ordinateur n'est pas basé sur des bits ayant soit un état 0 soit un état 1, mais est basé sur des qubit, l'unité de stockage d'information quantique, qui est composé d'une superposition de deux états de base : 0 et 1. Ainsi ce type d'ordinateur peut calculer 16 fois plus rapidement qu'un ordinateur à 4 bit, seulement avec 4 qubit et on double la puissance a chaque fois que l'on rajoute un qubit.

Ce type d'ordinateur peut aujourd'hui représenter une menace envers les chiffrements actuellement utilisés En effet, RSA se base sur des nombres premiers très grands pour sécuriser les données. Pour décoder RSA, il faut utiliser la décomposition en facteurs premier. Aujourd'hui, aucuns algorithmes "classique" permet de décoder dans un temps raisonnable (Polynomiale).

Mais l'algorithme de Shor, algorithme basé sur la physique quantique pourrait effectuer cette décomposition beaucoup plus rapidement et rendrait inefficace les cryptographie actuelle si ce dernier était implémenté sur un calculateur quantique.

Les principes de base du réseau euclidien

Réseau euclidien de dimension 2

Un réseau euclidien est "ensemble de points régulièrement répartis sur une dimension n" ou avec des termes plus mathématique il s'agit d'un sous-groupe discret d'un espace vectoriel euclidien.

Voici la représentation d'un réseau euclidien de dimension 2. Comme le nombre de points est infini il serait difficile de faire la liste de ces points. Ils sont donc représentés par une base, ici (O, u, v). Les points ont donc des coordonnées correspondant à la base de notre réseau euclidien.

Vecteur u :     Vecteur v :          Bonne base (clé privée) :  









Différentes bases d'un réseau euclidien

Base différentes Un réseau euclidien peut être représenté par plusieurs bases (image ci-contre). Les différence avec le système de coordonnées du plan (0,x,y) c'est que dans un réseau euclidien les coordonnées sont toujours des entiers et la base n'est pas nécessairement rectangulaire.

Bonne ou mauvaise base ? Certaines bases vont être plus qualitative que d'autres. Une bonne base (base bleue) est presque rectangulaire alors qu'une mauvaise base (base rouge) est de forme quelconque. Ces typologies s'expliquent par la différence que l'on peut observer au niveau que de la couverture de l'espace autour de chaque point du réseau. //images

Application en cryptologie

Les réseaux euclidiens sont depuis peu appliqués en cryptologie, remarqués par la difficulté de ces problèmes à être résolus efficacement. Nous allons utiliser une bonne base comme clé privée et une mauvaise base comme clé publique. Pour représenter un message sur le réseau euclidien, il suffit de coder notre message en ternaire, les valeurs possibles sont 0,1,-1. Dans une dimension 8 le message OK correspondrait à m = 0 -1 -1 1 -1 0 -1 1.

Caractère à coder Code ternaire Caractère à coder Code ternaire
0 0 0 0 G 1 -1 1 1
0 1 0 0 0 H -1 -1 1 1
1 -1 0 0 0 I 0 0 -1 1
2 0 1 0 0 K -1 0 -1 1
3 1 1 0 0 J 1 -0 -1 1
4 -1 1 0 0 L 0 1 -1 1
5 0 -1 0 0 M 1 1 -1 1
6 1 -1 0 0 N -1 1 -1 1
7 -1 -1 0 0 O 0 -1 -1 1
8 0 0 1 0 P 1 -1 -1 1
9 1 0 1 0 Q -1 -1 -1 1
Etc ... Etc ...

Le chiffrement

Pour le chiffrement nous utilisons la mauvaise base pour tirer un point aléatoire sur le réseau.

  def chiffre(Pub, m):
  d = tirage_reseau(Pub)
  m_chiffré = d + m
  return m_chiffré

Le déchiffrement

  def dechiffre(Secret, m_chiffré):
  d = Algorithme_de_Babai(Secret, m_chiffré)
  m = m_chiffré - d
  return m

Algorithme de Babai

C'est un mathématicien du nom de László Babai qui a inventé la meilleure solution pour retrouver le centre du pavé associé au message chiffré :

  Algorithme_de_Babai(B, m_chiffré){
     B_inv = inverse(B)
     v = m_chiffré * B_inv 
     w = vector([round(x) for x in v])
     d = B * w
     return d
  }

Dans cette exemple je partirai du principe que le message chiffré est sur 2 digits. De ce fait, les réseaux euclidiens seront de dimension 2, plus simple pour illustrer.

L'algorithme marche ainsi :

On renseigne la base sous forme de matrice où chaque colonne représente un vecteur de dimension. Cette base sera plus ou moins bonne en fonction de la clé (privée ou publique). On renseigne le message chiffré également sous forme de matrice à une colonne.

Bonne base (clé privée) :          Message chiffré :  

Ensuite il s'agit de calculer l'inverse de la matrice B en appliquant la formule classique :

Formule :          Résultat :  

Il faut alors effectuer une multiplication matricielle avec B_inv et le message chiffré m_chiffre que l'on va arrondir ensuite:

Opération :    *         Résultat arrondi :  

Enfin, on rééffectue une multiplication matricielle avec B et notre resultat w:

Opération :    *         Vecteur d:  

On obtient donc le vecteur d que l'on avait ajouté au message clair lors du chiffrement. Il suffit ensuite de le soustraire au message chiffré pour obtenir le message clair (voir partie déchiffrement).

Robustesse

Un jeu sur les reseaux euclidiens : Cryptris

Chiffrement homomorphe

Le chiffrement homomorphe permet d'effectuer une ou plusieurs opérations sans nécessité de d'accéder aux données sensibles en les déchiffrant. Pour toute opération Op et pour tout message m1 et m2, effectuer l'opération sur les messages cryptés par la méthode C et ensuite déchiffrer par D est équivalent au résultat de l'opération sur les deux messages clairs :



Prenons l'exemple d'Alice. Alice souhaite pouvoir effectuer des opérations sur deux données sensibles mais elle ne possède pas la puissance de calcul nécessaire pour l'effectuer. Elle souhaite donc demander à un organisme tiers de procéder aux calculs sur ses données. Cependant, les données à traiter sont sensibles et Alice ne fait pas confiance en cet organisme. Elle va donc une utiliser un chiffrement homomorphe et envoyer des données chiffrés à l'organisme qui pourra ainsi calculer et renvoyer le résultat, encore chiffré, à Alice. Alice pourra alors déchiffrer le message pour obtenir le résultat de l'opération sur ses données sensibles grâce aux propriétés du chiffrement homomorphe.

Chiffrement homomorphe et Cryptographie

Le chiffrement RSA, actuellement très utilisé, est considéré comme partiellement homomorphe. En effet, le chiffrement permet d'effectuer certaines opérations de manière homomorphe mais n'offre pas la possibilité d'effectuer l'ensemble des opérations existantes. Plus particulièrement, ce genre de chiffrement autorise soit la multiplication homomorphe soit l'addition homomorphe :

Multiplication homomorphe :

En revanche, le chiffrement par réseaux euclidiens est dit complètement homomorphe et permet donc d'effectuer l'ensemble des opérations de manière homomorphe. Pour qu'un chiffrement soit complètement homomorphe, il faut pouvoir appliquer les opérations d'addition et de multiplication sur les données chiffrées :

Multiplication homomorphe : Addition homomorphe :

On peut voir le XOR comme une addition modulo 2 et la propriété logique AND comme la multiplication modulo 2. Grace à ces deux portes logiques, il est possible d'exprimer tous les programmes et calculs existant. L'ensemble de ces deux opérations permettrai alors de pouvoir effectuer l'ensemble des opérations existantes avec un homomorphisme complet. C'st pourquoi le chiffrement par réseaux euclidiens est d'autant plus intéressant pour l'avenir de la cyber-sécurité.

Les attaques et inconvénients