Mô tả
                                    
                                    
                                    Bước 1: Tạo khóa
-         Cho p là một số nguyên tố sao cho bài toán logarit rời rạc trong Zp là khó giải.
-         Chọn phần tử nguyên thủy α ∈ Zp*.
-         Chọn a ∈ {2, 3…, p-2} là khóa bí mật thứ nhất (Khóa người nhận, giải mã) 
-         Tính β = αa mod p.
-         Khi đó: Kpub = (p, α, β) gọi là khóa công khai, và Kpri = (a) là khóa bí mật.
Bước 2: Xây dựng hàm mã hóa dữ liệu
-         Chọn 1 số ngẫu nhiên bí mật k ∈ Zp-1, Ta xác định: k ∈ Zp-1 = {0, 1…, p-2}.
-         Định nghĩa: 𝑒𝐾𝑝(𝑥, 𝑘) = (𝑦1, 𝑦2) với 𝑦1 = 𝛼𝑘𝑚𝑜𝑑𝑝 và 𝑦2 = 𝑥𝛽𝑘𝑚𝑜𝑑𝑝.
Bước 3: Giải mã
-         Với y1, y2∈ Zp* ta xác định: 𝑑𝐾𝑝(𝑦1 , 𝑦2) = 𝑦2(𝑦1𝑎 ) −1𝑚𝑜𝑑 p.
A (gửi)  | B (nhận)  | 
Choose private key KpriA=αA   Compute KpubA=αaA mod p = bA bB<==B kAB = bBaA = αaA*aB   mod p y = x*kAB mod p  | Choose private key KpriB=αB KpubB= αaB mod p = bB A==> bA  kAB = bAaB = αaB*aA   mod p  A==>y  x = y*kAB-1 mod p  |