Le cryptosystème de Paillier a été créé en 1999 par Pascal Paillier. Il s'agit également d'un chiffrement asymétrique. Il est homomorphe pour l'addition, c'est pourquoi il peut être utilisé dans le cadre du vote électronique.
$$pgdc(pq, (p-1)(q-1)) = 1$$
$$\lambda = ppcm(p-1,q-1) = (p-1)(q-1)$$
$$g = 1 + N$$
$$\mu = \lambda^{(-1)} \mod N$$
Paillier est homomorphe pour l'addition. Pour additionner deux messages chiffrés, il faut ici multiplier ces deux chiffrés. Lors du déchiffrement, nous obtenons bien la somme de nos messages d'origine.
$$c_1 * c_2 = (g)^{m_1} r_1^N * g^{m_2} * r_2^N \mod N^2\\ \Leftrightarrow c_1 * c_2 = (g)^{m_1 + m_2} * (r_1 * r_2)^N \mod N^2$$ $$ \Leftrightarrow D(c_1 * c_2) = L(g^{m_1 + m_2} * (r_1 * r_2)^N \mod N^2) * \mu \mod N \\ \Leftrightarrow D(c_1 * c_2) = m_1+m_2$$Résultats attendus
Génération de deux grands nombres premiers différents.
Calcul de \( N = p*q \) et \( \lambda = (p-1) * (q-1) \)
Calcul de \( \mu = \lambda^{-1} \mod N \) et \(g = n+1\).
Chiffrement avec la clef publique avant l'envoi sur le cloud.
Récupération des données du cloud et déchiffrement avec la clé privée.
Une implémentation du chiffrement de Paillier en Python:
https://github.com/mikeivanov/paillier.