Un cryptage homomorphe préserve l'addition et la multiplication : une addition sur des nombres cryptés est égale au résultat crypté de l'addition sur les nombres non cryptées. Craig Gentry a proposé un tel cryptage dans son article Fully Homomorphic Encryption over the Integers. Le système de cryptage encrypte et décrypte des bits (0 ou 1). Correction.
from jyquickhelper import add_notebook_menu
add_notebook_menu()
$KeyGen(\lambda)$
$Encrypt(pk, m\in \{0,1\})$
Choisir un ensemble aléatoire $S \subset \{1, ..., \tau\}$ et un entier aléatoire $r$ dans l'intervalle $]-2^{\rho'}, 2^{\rho'}[$. Calculer $c = (m + 2r + 2\sum_{i \in S} x_i) \mod x_0$.
$Evaluate(pk, C, c_1, ..., c_t)$
La fonction $C$ effectue des opérations sur $t$ bits. Le résultat est $c$.
$Decrypt(sk, c)$
Le résultat cherché est $(c \mod p) \mod 2$.
Avec : (valeurs suggérées par l'article mais d'autres sont possibles