crypto-snippets/elgamal

Elgamal Encryption

#encryption #instantiation

$\gdef\system{\mathsf{Enc}}$ $\gdef\systemprefix{}$ $\gdef\keygen{\mathsf{\systemprefix{}KGen}}$ $\gdef\msgspace{\mathcal{M}}$

$\gdef\enc{\mathsf{\systemprefix{}Enc}}$ $\gdef\dec{\mathsf{\systemprefix{}Dec}}$ $\gdef\msgspace{\mathcal{M}}$ $\gdef\group{\mathbb{G}}$ $\gdef\generator{g}$ $\gdef\modulo{q}$ \(\gdef\rgets{\stackrel{\$}{\gets} }\)

For a group $\group$ with generator $g$ and modulo $\modulo$, Elgamal encryption scheme for message space $\msgspace{} = \group$ is the tuple $(\keygen, \enc, \dec)$ defined as follows:

$\keygen(1^n) \to (pk, sk)$


  • $x \rgets \mathbb{Z}_q$
  • $X = g^x$
  • return $(pk := X, sk = x)$

$\enc(pk, m) \to c$


  • $y \rgets \mathbb{Z}_q$
  • $c_1 := g^y$
  • $c_2 := X^y \cdot m$
  • return $c := (c_1, c_2)$

$\dec(sk, c) \to m$


  • $x := sk$
  • $(c_1, c_2) := c$
  • $m := c_2 \cdot c_1^{-x}$
  • return $m$

Last modified June 22, 2025, 11:14 a.m.