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.
![[fhe_schema_1.png]]
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*.
![[fhe_schema_2.png]]
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.