Dựa vào ưu điểm của hệ mã RSA, nếu thiết lập được sơ đồ chữ ký dựa trên bài toán phân tích ra thừa số nguyên tố thì độ an toàn của chữ ký sẽ rất cao.
* Ký (Mã hóa).
Phần này đã được cắt bỏ, hãy liên hệ chủ đề tài để nhận được bản chi tiết hơn.
Hàm trên có thể tính dễ dàng sử dụng phương pháp tính hàm mũ (theo môđun) bằng (thuật toán bình phương và nhân). Cuối cùng ta có bản ký c hay bản chữ ký điện tử và gửi cho đối tác.
Sau khi nhận được bản chữ ký điện tử, người nhận cần phải xác nhận chữ ký trên văn bản là đúng người ký bằng cách xác nhận bản ký với khóa công khai của người ký với công thức sau.
VerK(m,c) = TRUE m ≡ ce (mod n)với x, y € Zn.
Quá trình giải mã hoạt động vì ta có
Ce ≡ (md)e ≡ mde (mod n);
Do: ed ≡ 1 (mod p-1) và ed ≡ 1 (mod q-1), (theo Định lý Fermat nhỏ) nên:
Mde ≡ m (mod p);
và
mde ≡ m (mod q);
Do p và q là hai số nguyên tố cùng nhau, áp dụng định lý số dư Trung Quốc, ta có:
Mde ≡ m (mod pq);
hay:
Ce ≡ m (mod n);
Thông thường, chữ ký được kết hợp với hàm mã hoá công khai. Giả sử A muốn gửi một bức điện đã được mã hoá và đã được ký đến cho B. Với bản rõ x cho trước, A sẽ tính toán chữ ký của mình y = SigA(m) và sau đó mã hoá cả x và y sử dụng khoá công khai eB của B, kết quả nhận được là z = eB(m, c). Bản mã z sẽ được gửi tới B, khi B nhận được z, đầu tiên anh ta giải mã với hàm giải mã dB của mình để nhận được (m, c). Sau đó anh ta dùng hàm xác minh công khai của A để kiểm tra xem VerA(m,c) = TRUE hay không [1].
Song nếu đầu tiên A mã hoá m, rồi sau đó mới ký lên bản mã nhận được thì sao? Khi đó, A sẽ tính:
c = SigA(eB(m))
ký c trên m nhờ dùng VerA. Một vấn đề nảy sinh nếu A truyền (m, c) kiểu này thì một người thứ ba C có thể thay chữ ký c của A bằng chữ ký của chính mình.
c’ = SigC(eB(m))
Chú ý rằng, C có thể ký lên bản mã eB(m) ngay cả khi anh ta không biết bản rõ m. Khi đó nếu C truyền (z, c’) đến B, chữ ký của C được B xác minh bằng VerC và do đó, B cho rằng bản rõ x xuất phát từ C. Do khó khăn này, hầu hết người sử dụng được khuyến nghị “ký trước khi mã” [1 – tr103].