2. Goldwasser and Micali Algorithm¶
Whatever can be computable from the ciphertext about plaintext is also computable without ciphertext.
2.1. “bit-by-bit” encryption¶
Plaintext bit “0” is encrypted to a ciphertext in \(QR_n\),
Plaintext bit “1” is encrypted to a ciphertext in \(QNR_n\) such that \(C=yx^2\) and \(y\) is a random integer satisfying
and \(x\) is uniformly chosen from \(\mathbb{Z}_N^*\).
Note that
So plaintext 1 is encrypted to a ciphertext in Pseudo Square mod \(N\).
But \(yx^2\) is \(QNR_n\).
Public key \((y, N)\) Private key \((p, q)\)
2.2. Decryption¶
If \(C\) is \(QR_n\), then \(b=0\), or it’s \(1\).
The method is to check \((\frac{C}{p})\) (\(p\) not \(n\)) see whether it’s \(\pm1\).
2.3. Security of GM¶
GM algorithm distributes plaintext bit 0 uniformly over \(QR_N\) and bit 1 over pseudo square mod \(N\).
2.4. How to choose \(y\)¶
If \(n\) is a Blum integer s.t. \(p\equiv 3~mod~4\) and \(q\equiv 3~mod~4\), then \((-1)\) is a pseudo square mod \(n\).
More general,
find \(a \in QNR_p\) and \(b \in QNR_q\)
apply Chinese Reminder Theory to \(a\) and \(b\) or Gauss’s Algorithm to compute the integer \(y \in [0, n-1]\) satisfying
So \(y \in QNR_p\) and \(y \in QNR_q\), i.e. \((\frac{y}{p})=(\frac{y}{q}) = -1\). We find \(y\), which is a pseudo square mod \(n\).
2.5. Performance of GM¶
The expansion rate of GM (ciphertext / plaintext) is \(\log_2 (n/2)\), it’s not small comparatively.