Ðặc điểm của các sơ đồ chữ ký này là mức độ tính toán phụ thuộc vào độ lớn của giải thuật giải quyết các bài toán nhân số nguyên – bài toán lũy thừa. Sơ đồ chữ ký bao gồm cả hai loại kèm thông điệp và khôi phục thông điệp. Sơ đồ chữ ký RSA được phát minh bởi 3 nhà nghiên cứu Rivest, Shamir, Adleman, đây là sơ đồ có ứng dụng thực tế rộng rãi. Các phương pháp tấn công RSA đầu tiên (multicative property) và các vấn đề khác liên quan tới chữ ký RSA được đưa ra bởi Davia và Jonge và Chaum.
Sơ đồ chữ ký RSA được cho bởi bộ năm S = (, , , , ),
trong đó = =Zn , với n =p.q là tích của hai số nguyên tố lớn p,q, là tập các cặp khoá K =(K’,K''), với K’ = a và K'' = (n,b), a và b là hai số thuộc Zn thoả mãn a.b 1(mod(n)). Các hàm sigK' và verK"được xác định như sau:
'
sigK (x) = x a modn ,
verK(x,y ) = đúng x yb (modn ).
Dễ chứng minh được rằng sơ đồ được định nghĩa như vậy là hợp thức, tức là với mọi x và mọi chữ ký y:
verK"(x, y) = đúng y =sigK'(x ).
Chú ý rằng tuy hai vấn đề xác nhận và bảo mật theo sơ đồ RSA là có bề ngoài giống nhau, nhưng nội dung của chúng là hoàn toàn khác nhau: Khi A gửi
thông báo x cho B, để B có căn cứ xác nhận đó đúng thực là thông báo do A gửi, A phải gửi kèm theo chữ ký sigK'(x), tức là A gửi cho B (x, sigK'(x)), trong các thông tin gửi đi đó, thông báo x hoàn toàn không được giữ bí mật. Cũng tương tự như vậy, nếu dùng sơ đồ mật mã RSA, khi một chủ thể A nhận được một bản mật mã eK(x) từ B thì A chỉ biết rằng thông báo x được bảo mật, chứ không có gì để xác nhận x là của B.
Nếu ta muốn hệ truyền tin của ta vừa có tính bảo mật vừa có tính xác nhận, thì ta phải sử dụng đồng thời cả hai hệ mật mã và xác nhận (bằng chữ ký). Giả sử trên mạng truyền tin công cộng, ta có cả hai hệ mật mã khoá công khai S1 và hệ xác nhận bằng chữ ký S 2. Giả sử B có bộ khoá mật mã K = (K', K'') với K' = (n, e) và K'' = d trong hệ S1, và A có bộ khoá chữ ký Ks (K Ks, s) với Ks a và
( , )
Ks n b trong hệ S 2. A có thể gửi đến B một thông báo vừa bảo mật vừa có chữ ký để xác nhận như sau: A ký trên thông báo x trước, rồi thay cho việc gửi đến B văn bản cùng chữ ký (x,
Ks
sig (x)) thì A sẽ gửi cho B bản mật mã của văn bản đó được lập theo khoá công khai của B, tức là gửi cho B eK((x,
Ks
sig (x)). Nhận được văn bản mật mã đó B sẽ dùng thuật toán giải mã dKcủa mình để thu được (x,sigKs(x)), sau đó dùng thuật toán kiểm thử chữ ký công khai
Ks
ver của A để xác nhận chữ ký sigKs(x) đúng là của A trên x.
a. Thuật toán sinh khoá
Thực thể A tạo khoá công khai và khoá riêng tương ứng theo phương thức sau:
Sinh ra hai số nguyên tố lớn ngẫu nhiên p và q cùng kích thuớc bit
Tính n = pq và = (p - 1)(q - 1 )
Chọn một số tự nhiên ngẫu nhiên a thoả mãn Điều kiện sau: 1< a < và USCLN(a, ) = 1 hay a Z*p .
Sử dụng giải thuật mở rộng Euclidean để tính toán số tự nhiên duy nhất b sao cho 1< b < và ab 1 (mod )
Khoá công khai của A là K‟ = (n, a), khoá riêng của A là K” = b b. Thuật toán sinh chữ ký và xác nhận chữ ký
Thực thể A ký trên thông điệp m. Thực thể B có thể xác định được chữ ký
Sinh chữ ký: Thực thể A làm theo các buớc sau:
Tính m' = H(m), là một số nguyên trong khoảng [0, n-1]
Tính s = m'a mod n
Chữ ký của A cho m là s
Xác nhận chữ ký: Thực thể B làm theo các buớc sau:
Nhận khoá công khai của A là (n, b)
Tính m' = sb mod n
Kiểm tra m' MR nếu không sẽ không chấp nhận chữ ký
Lấy lại thông điệp m từ m = H-1 (m') c. Tóm tắt luợc đồ ký theo RSA
Cho n = pq với p và q là các số nguyên tố.
Cho P = A = Zn và định nghĩa
o p = {(n, p, q, a, b) || n = pq, p và q là nguyên tố, ab 1 mod
(n) } Các giá trị n, b là công khai. Ðịnh nghĩa
Sigk(x) = xa mod n và
Verk(x,y) = true x yb (mod n) với x, y Zn
Nếu độ dài thông điệp x lớn, ta sử dụng hàm băm.
Ví dụ:
Sinh khoá:
Thực thể A chọn số nguyên tố p = 7927 và q = 6997. Tính n = pq = 5546521 và
= 7926 x 6996 = 55450296.
A chọn a = 5 và giải ab = 5b 1 (mod 55450296) được b = 44360237.
Khoá công khai là (n = 55465219, a = 5) và khoá riêng là b = 44360237.
Sinh chữ ký:
Ðể ký thông điệp m = 31229978, A tính m'1 = H(m) = 31229978. Chữ ký s = m1'b mod n = 312299784430237 mod 55465219 = 30729435.
Xác nhận chữ ký:
B tính m'2 = sa mod n = 307294355 mod 55465219 = 31229978.
B chấp nhận chữ ký vì m‟2 = m‟1.