Imaginons que vous utilisez une calculatrice sur votre téléphone portable et que celle-ci, pour réaliser les opérations, appelle un serveur sur lequel le calcul sera réalisé.

Aujourd’hui, avec les technologies actuelles, vous n’avez pas le choix : 

  • Vous allez saisir les deux nombres.
  • L’application va chiffrer ces deux nombres et les envoyer au serveur.
  • Le serveur va déchiffrer les deux nombres, les ajouter et encrypter le résultat avant de le retourner à l’application.
  • L’application va déchiffrer le résultat et vous l’afficher.

Pour réaliser cette opération, le serveur a dû avoir connaissance à la fois des valeurs que vous avez entrées et du résultat qu’il a généré. En plus des problèmes de sécurité que cela pose, le propriétaire du serveur et toutes les personnes qui y ont accès voient vos données.

C’est à ce problème que le chiffrement totalement homomorphe ou Fully Homomorphic Encryption répond car ces algorithmes permettent de faire des opérations sur des données sans avoir à les décrypter.

Dans notre scénario, le serveur est obligé de décrypter les valeurs pour vouloir réaliser l’opération valeur1 + valeur2 = résultat. Avec le FHE, on peut obtenir la même chose en faisant encode(valeur1) + encode(valeur2) = decode(résultat).

On peut donc réaliser des opérations sur des valeurs encodées et cela donnera le même résultat (une fois décodé) que si l’on avait fait l’opération sur les valeurs initiales! 

Si l’on reprend notre exemple précédent, nous faisons cela : 

  • CLIENT] - La première valeur 12365 va être encodée en dkenufz3.
  • CLIENT - La deuxième valeur 53220 va être encodée en lfnri2u2.
  • CLIENT - Les valeurs dkenufz3 & lfnri2u2 sont envoyées au serveur.
  • SERVEUR - dkenufz3 est décodé en 12365.
  • SERVEUR - lfnri2u2 est décodé en 53220.
  • SERVEUR - Calcule de 12365 + 53220 soit 65585
  • SERVEUR - Encode 65585 en ledazsd.
  • SERVEUR - ledazsd est envoyé au client.
  • CLIENT - ledazsd est décodé en 65585.

Avec le chiffrement totalement homomorphe, on passe à cela : 

  • CLIENT - La première valeur 12365 va être encodée en dkenufz3.
  • CLIENT - La deuxième valeur 53220 va être encodée en lfnri2u2.
  • CLIENT - Les valeurs dkenufz3 & lfnri2u2 sont envoyées au serveur.
  • SERVEUR - Calcule de dkenufz3 + lfnri2u2 soit ledazsd.
  • SERVEUR - ledazsd est envoyé au client.
  • CLIENT - ledazsd est décodé en 65585.

Pour résumer, la, Fully Homomorphic Encryption (FHE) est une technique de chiffrement qui permet de réaliser des calculs sur des données chiffrées sans avoir besoin de les déchiffrer au préalable.