Hệ mật mã ElGamal là một thuật toán tương tự như hệ thống Diffie- Hellman trình bày ở mục sau, được xây dựng trên bài toán logarit rời rạc, dù rằng tác giả của hệ mật mã này (Taher Elgamal) không đăng ký xin cấp bản quyền cho sáng tạo của mình nhưng những người sở hữu bản quyền của hệ mật mã Diffie-Hellman vì lý do nào đó vẫn xem hệ này cũng thuộc phạm vi bảo vệ của giấy phép bản quyền của mình. Cũng không ai rõ lý do thực sự của việc đăng ký tên thuật toán là ElGamal (chữ G viết hoa) trong khi họ của tác giả là Elgamal (chữ g khơng viết hoa).
Có thể thấy ngay nhược điểm rõ ràng của hệ ElGamal là thông điệp sau khi mã hóa có kích thước rất lớn, xấp xỉ gấp hai lần thơng điệp gốc! Chính vì vậy hệ mật mã này thường khơng dùng để mã hóa các khối dữ liệu thơng tin lớn mà chủ yếu dùng cho các thông điệp ngắn chẳng hạn như để tạo các khóa chung.
Tạo khóa cơng khai ElGamal: Cũng như trong trường hợp của mã
Diffie-Hellman, hai đối tác A và B có chung (cơng khai) một số nguyên tố p và một số sinh g (generator). A chọn một số ngẫu nhiên a và tính A = g*a, B cũng chọn một số ngẫu nhiên b và tính B = g*b. Khóa cơng khai của A là A và khóa riêng là a; tương tự như vậy, khóa cơng khai của B là B cịn khóa riêng là b.
Mã hóa và giải mã thơng điệp: Nếu B muốn gửi một thông điệp m
cho A, B sẽ chọn ngẫu nhiên một số k bé hơn p rồi tính c1 = g*k mod p; c2 = A*k * m mod p tiếp đó gửi c1 và c2 cho A. A sử dụng c1 và c2 để tái hiện thơng điệp bằng cách tính:
c1 - a * c2 mod p = m bởi vì rằng:
c1 - a * c2 mod p = (gk)- a * Ak * m = g-a * k * Ak * m = (ga)-k * Ak * m = A-k * Ak * m = 1 * m = m