Trong quy trình mật mã ElGamal (Taher Elgamal, 1984) một bản nguồn cĩ thể mã hố thành nhiều bản mã khác nhau:
TẠO KHỐ:
Ngƣời sử dụng tạo cặp khĩa cơng khai/cá nhân:
Chọn số nguyên tố lớn p, và cơ số là phần tử sinh (primitive root) theo modulo p (tức là với k = [1..p-1], k
mod p sẽ cho các giá trị [1..p-1]).
Các giá trị này sẽ đƣợc cơng bố cơng khai.
Ngƣời dùng A chọn ngẫu nhiên số nguyên XA với 0 < XA < p-1
Tính: YA = mod p
Khố cá nhân và khố cơng khai của A là XA và {p, , YA}
MÃ HỐ:
Giả sử B cĩ khĩa cơng khai của A và B cĩ thể mã hố thơng điệp để gửi cho A nhƣ sau:
- Giả sử thơng điệp M là một số nguyên: 0 M p -1
- B chọn số nguyên ngẫu nhiên k với 1 k p -1
- B tính khố một lần: K = (YA )k mod p
- Sau đĩ B tạo bản mã gồm cặp hai giá trị {C1, C2} với C1 = k
mod p; C2 = (K M) mod p
Vậy B đã mã hĩa bản nguồn M thành bản mã {C1, C2} và gửi bản mã cho A
Số k chỉ dùng đúng một lần để tính {C1, C2}.
GIẢI MÃ:
A giải mã {C1, C2} bằng khĩa cá nhân của mình XA nhƣ sau:
- A tính: K = mod p
( mod p = mod p = mod p = K )
- A khơi phục lại bản nguồn M = (C2 K-1) mod p
An tồn của thuật tốn ElGamal phụ thuộc vào độ khĩ của bài tốn tính logarit rời rạc trên các số lớn. Ví dụ nhƣ tính từ YA trong cơng thức:
YA = mod p phải dùng phép tính logarit rời rạc. Hoặc để tính K trong
cơng thức K = (YA )k mod p ngƣời thám mã phải tính đƣợc k từ cơng thức C1
= k
Chọn số nguyên tố: p = 97, và giá trị sinh của nĩ: = 5,
- A chọn khố cá nhân XA = 58
- A tính: YA = mod p = 558 mod 97 = 44
Khĩa cơng khai của A là {p, , YA} = {97, 5, 44} đƣợc gửi cho B B muốn gửi thơng điệp M = 3 cho A
- B chọn k = 36, tính K = (YA )k mod p = 4436 mod 97 = 75
- B tính C1= k
mod p = 536 mod 97 = 50
C2 = (K M) mod p = (75 3) mod 97= 31 Nhận đƣợc thơng điệp: {C1, C2} = (50, 31), A giải mã:
K = mod p = 5058 mod 97 = 75
M = (C2 K-1) mod p = (31 K-1) mod 97 = (31 22) mod 97 = 3