# Blum–Goldwasser cryptosystem

The Blum–Goldwasser (BG) cryptosystem is an asymmetric key encryption algorithm proposed by Manuel Blum and Shafi Goldwasser in 1984. Blum–Goldwasser is a probabilistic, semantically secure cryptosystem with a constant-size ciphertext expansion. The encryption algorithm implements an XOR-based stream cipher using the Blum-Blum-Shub (BBS) pseudo-random number generator to generate the keystream. Decryption is accomplished by manipulating the final state of the BBS generator using the private key, in order to find the initial seed and reconstruct the keystream.

The BG cryptosystem is semantically secure based on the assumed intractability of integer factorization; specifically, factoring a composite value ${\displaystyle N=pq}$ where ${\displaystyle p,q}$ are large primes. BG has multiple advantages over earlier probabilistic encryption schemes such as the Goldwasser–Micali cryptosystem. First, its semantic security reduces solely to integer factorization, without requiring any additional assumptions (e.g., hardness of the quadratic residuosity problem or the RSA problem). Secondly, BG is efficient in terms of storage, inducing a constant-size ciphertext expansion regardless of message length. BG is also relatively efficient in terms of computation, and fares well even in comparison with cryptosystems such as RSA (depending on message length and exponent choices). However, BG is highly vulnerable to adaptive chosen ciphertext attacks (see below).

Because encryption is performed using a probabilistic algorithm, a given plaintext may produce very different ciphertexts each time it is encrypted. This has significant advantages, as it prevents an adversary from recognizing intercepted messages by comparing them to a dictionary of known ciphertexts.

## Operation

The Blum–Goldwasser cryptosystem consists of three algorithms: a probabilistic key generation algorithm which produces a public and a private key, a probabilistic encryption algorithm, and a deterministic decryption algorithm.

### Key generation

The public and private keys are generated as follows:

1. Choose two large distinct prime numbers ${\displaystyle p}$ and ${\displaystyle q}$ such that ${\displaystyle p\equiv 3{\bmod {4}}}$ and ${\displaystyle q\equiv 3{\bmod {4}}}$.
2. Compute ${\displaystyle n=pq}$.[1]

Then ${\displaystyle n}$ is the public key and the pair ${\displaystyle (p,q)}$ is the private key.

### Encryption

A message ${\displaystyle M}$ is encrypted with the public key ${\displaystyle n}$ as follows:

1. Compute the block size in bits, ${\displaystyle h=\lfloor log_{2}(log_{2}(n))\rfloor }$.
2. Convert ${\displaystyle M}$ to a sequence of ${\displaystyle t}$ blocks ${\displaystyle m_{1},m_{2},\dots ,m_{t}}$, where each block is ${\displaystyle h}$ bits in length.
3. Select a random integer ${\displaystyle r.
4. Compute ${\displaystyle x_{0}=r^{2}{\bmod {n}}}$.
5. For ${\displaystyle i}$ from 1 to ${\displaystyle t}$
1. Compute ${\displaystyle x_{i}=x_{i-1}^{2}{\bmod {n}}}$.
2. Compute ${\displaystyle p_{i}=}$ the least significant ${\displaystyle h}$ bits of ${\displaystyle x_{i}}$.
3. Compute ${\displaystyle c_{i}=m_{i}\oplus p_{i}}$.
6. Finally, compute ${\displaystyle x_{t+1}=x_{t}^{2}{\bmod {n}}}$.

The encryption of the message ${\displaystyle M}$ is then all the ${\displaystyle c_{i}}$ values plus the final ${\displaystyle x_{t+1}}$ value: ${\displaystyle (c_{1},c_{2},\dots ,c_{t},x_{t+1})}$.

### Decryption

An encrypted message ${\displaystyle (c_{1},c_{2},\dots ,c_{t},x)}$ can be decrypted with the private key ${\displaystyle (p,q)}$ as follows:

1. Compute ${\displaystyle d_{p}=((p+1)/4)^{t+1}{\bmod {(p-1)}}}$.
2. Compute ${\displaystyle d_{q}=((q+1)/4)^{t+1}{\bmod {(q-1)}}}$.
3. Compute ${\displaystyle u_{p}=x^{d_{p}}{\bmod {p}}}$.
4. Compute ${\displaystyle u_{q}=x^{d_{q}}{\bmod {q}}}$.
5. Using the Extended Euclidean Algorithm, compute ${\displaystyle r_{p}}$ and ${\displaystyle r_{q}}$ such that ${\displaystyle r_{p}p+r_{q}q=1}$.
6. Compute ${\displaystyle x_{0}=u_{q}r_{p}p+u_{p}r_{q}q{\bmod {n}}}$. This will be the same value which was used in encryption (see proof below). ${\displaystyle x_{0}}$ can then used to compute the same sequence of ${\displaystyle x_{i}}$ values as were used in encryption to decrypt the message, as follows.
7. For ${\displaystyle i}$ from 1 to ${\displaystyle t}$
1. Compute ${\displaystyle x_{i}=x_{i-1}^{2}{\bmod {n}}}$.
2. Compute ${\displaystyle p_{i}=}$ the least significant ${\displaystyle h}$ bits of ${\displaystyle x_{i}}$.
3. Compute ${\displaystyle m_{i}=c_{i}\oplus p_{i}}$.
8. Finally, reassemble the values ${\displaystyle (m_{1},m_{2},\dots ,m_{t})}$ into the message ${\displaystyle M}$.

## Example

Let ${\displaystyle p=19}$ and ${\displaystyle q=7}$. Then ${\displaystyle n=133}$ and ${\displaystyle h=\lfloor log_{2}(log_{2}(133))\rfloor =3}$. To encrypt the six-bit message ${\displaystyle 101001_{2}}$, we break it into two 3-bit blocks ${\displaystyle m_{1}=101_{2},m_{2}=001_{2}}$, so ${\displaystyle t=2}$. We select a random ${\displaystyle r=36}$ and compute ${\displaystyle x_{0}=36^{2}{\bmod {1}}33=99}$. Now we compute the ${\displaystyle c_{i}}$ values as follows:

{\displaystyle {\begin{aligned}x_{1}&=99^{2}{\bmod {1}}33=92=1011100_{2};\quad p_{1}=100_{2};\quad c_{1}=101_{2}\oplus 100_{2}=001_{2}\\x_{2}&=92^{2}{\bmod {1}}33=85=1010101_{2};\quad p_{2}=101_{2};\quad c_{2}=001_{2}\oplus 101_{2}=100_{2}\\x_{3}&=85^{2}{\bmod {1}}33=43\end{aligned}}}

So the encryption is ${\displaystyle (c_{1}=001_{2},c_{2}=100_{2},x_{3}=43)}$.

To decrypt, we compute

{\displaystyle {\begin{aligned}d_{p}&=5^{3}{\bmod {1}}8=17\\d_{q}&=2^{3}{\bmod {6}}=2\\u_{p}&=43^{17}{\bmod {1}}9=4\\u_{q}&=43^{2}{\bmod {7}}=1\\(r_{p},r_{q})&=(3,-8){\text{ since }}3\cdot 19+(-8)\cdot 7=1\\x_{0}&=1\cdot 3\cdot 19+4\cdot (-8)\cdot 7{\bmod {1}}33=99\\\end{aligned}}}

It can be seen that ${\displaystyle x_{0}}$ has the same value as in the encryption algorithm. Decryption therefore proceeds the same as encryption:

{\displaystyle {\begin{aligned}x_{1}&=99^{2}{\bmod {1}}33=92=1011100_{2};\quad p_{1}=100_{2};\quad m_{1}=001_{2}\oplus 100_{2}=101_{2}\\x_{2}&=92^{2}{\bmod {1}}33=85=1010101_{2};\quad p_{2}=101_{2};\quad m_{2}=100_{2}\oplus 101_{2}=001_{2}\end{aligned}}}

## Proof of correctness

We must show that the value ${\displaystyle x_{0}}$ computed in step 6 of the decryption algorithm is equal to the value computed in step 4 of the encryption algorithm.

In the encryption algorithm, by construction ${\displaystyle x_{0}}$ is a quadratic residue modulo ${\displaystyle n}$. It is therefore also a quadratic residue modulo ${\displaystyle p}$, as are all the other ${\displaystyle x_{i}}$ values obtained from it by squaring. Therefore by Euler's criterion, ${\displaystyle x_{i}^{(p-1)/2}\equiv 1\mod {p}}$. Then

${\displaystyle x_{t+1}^{(p+1)/4}\equiv (x_{t}^{2})^{(p+1)/4)}\equiv x_{t}^{(p+1)/2}\equiv x_{t}(x_{t}^{(p-1)/2})\equiv x_{t}\mod {p}}$

Similarly,

${\displaystyle x_{t}^{(p+1)/4}\equiv x_{t-1}\mod {p}}$

Raising the first equation to the power ${\displaystyle (p+1)/4}$ we get

${\displaystyle x_{t+1}^{((p+1)/4)^{2}}\equiv x_{t}^{(p+1)/4}\equiv x_{t-1}\mod {p}}$

Repeating this ${\displaystyle t}$ times, we have

${\displaystyle x_{t+1}^{(p+1)/4)^{t+1}}\equiv x_{0}\mod {p}}$
${\displaystyle x_{t+1}^{d_{p}}\equiv u_{p}\equiv x_{0}\mod {p}}$

And by a similar argument we can show that ${\displaystyle x_{t+1}^{d_{q}}\equiv u_{q}\equiv x_{0}\mod {q}}$.

Finally, since ${\displaystyle r_{p}p+r_{q}q=1}$, we can multiply by ${\displaystyle x_{0}}$ and get

${\displaystyle x_{0}r_{p}p+x_{0}r_{q}q=x_{0}}$

from which ${\displaystyle u_{q}r_{p}p+u_{p}r_{q}q\equiv x_{0}}$, modulo both ${\displaystyle p}$ and ${\displaystyle q}$, and therefore ${\displaystyle u_{q}r_{p}p+u_{p}r_{q}q\equiv x_{0}\mod {n}}$.

## Security and efficiency

The Blum–Goldwasser scheme is semantically-secure based on the hardness of predicting the keystream bits given only the final BBS state ${\displaystyle y}$ and the public key ${\displaystyle N}$. However, ciphertexts of the form ${\displaystyle {\vec {c}},y}$ are vulnerable to an adaptive chosen ciphertext attack in which the adversary requests the decryption ${\displaystyle m^{\prime }}$ of a chosen ciphertext ${\displaystyle {\vec {a}},y}$. The decryption ${\displaystyle m}$ of the original ciphertext can be computed as ${\displaystyle {\vec {a}}\oplus m^{\prime }\oplus {\vec {c}}}$.

Depending on plaintext size, BG may be more or less computationally expensive than RSA. Because most RSA deployments use a fixed encryption exponent optimized to minimize encryption time, RSA encryption will typically outperform BG for all but the shortest messages. However, as the RSA decryption exponent is randomly distributed, modular exponentiation may require a comparable number of squarings/multiplications to BG decryption for a ciphertext of the same length. BG has the advantage of scaling more efficiently to longer ciphertexts, where RSA requires multiple separate encryptions. In these cases, BG may be significantly more efficient.

## References

1. ^ RFC 4086 section "6.2.2. The Blum Blum Shub Sequence Generator"
1. M. Blum, S. Goldwasser, "An Efficient Probabilistic Public Key Encryption Scheme which Hides All Partial Information", Proceedings of Advances in Cryptology - CRYPTO '84, pp. 289–299, Springer Verlag, 1985.
2. Menezes, Alfred; van Oorschot, Paul C.; and Vanstone, Scott A. Handbook of Applied Cryptography. CRC Press, October 1996. ISBN 0-8493-8523-7