Algoritma ElGamal menggunakan logaritma diskrit untuk mengenkripsi pesan. Ia memiliki kunci publik (y, g, p) dan kunci privat (x, p) yang dihasilkan secara acak. Pesan dipecah menjadi blok dan dienkripsi menjadi pasangan (a, b) menggunakan bilangan acak k. Dekripsi menggunakan kunci privat untuk mendapatkan kembali pesan m.