Sinh khoá:
● Chọn ngẫu nhiên hai số nguyên tố lớn p và q, với p # q
● Tính n = pq
● Ta có (n) = (p-1)(q-1) là hàm Euler của n
● Chọn một số tự nhiên e sao cho 1 < e < (n) và e nguyên tố cùng nhau với(n)
● Ta tìm được duy nhất d = e-1mod (n)
Khoá công khai là <n, e>, khóa bí mật là <n, d>
Mã hóa:
Để gửi dữ liệu cần mã hóa thì người gửi thực hiện :
● Thu nhận khóa công khai của người nhận < n,e>
● Biến đổi thông điệp muốn gửi M thành những số nguyên m < n theo một hàm có thể đảo ngược (Từ m có thể xác định được M) được thỏa thuận trước.
● Tính c = memod n
Giải mã:
Để khôi phục lại thông điệp M ban đầu, người nhận thực hiện các bước sau :
● Tính m = cd mod n với 0 ≤ m ≤ n
● Thực hiện phép biến đổi ngược từ số m thành chuỗi ký tự tương ứng chưa thông tin M ban đầu.
Ví dụ Sinh khoá: ● Chọn 2 số nguyên tố: p = 61, q = 53 ● Tính n = 61.53 = 3233 ● Ta có (n) = (p-1)(q-1) = 60.52 = 3120 ● Chọn e = 17
●Tính d = e-1mod 3120 bằng giải thuật Euclide mở rộng ta có d = 2753 Khoá công khai <n, e> = <3233, 17>; khoá bí mật <n, d> = <3233, 2753>
Mã hoá:
Để mã hóa văn bản có giá trị m = 123, ta thực hiện phép tính : c = memod n = 12317mod 3233 = 855
Giải mã:
Để giải mã văn bản có giá trị 855, ta thực hiện phép tính : cd = 8552753 mod 3233 = 123
Cả hai phép tính trên đều có thể được thực hiện hiệu quả thuật toán bình phương liên tiếp.