DSS (Digital Signature Standard) là một chuẩn về chữ ký số, được chuẩn hóa năm 1991, sửa đổi năm 1993 và 1996, sau đó mở rộng vào năm 2000. DSS sử dụng hàm băm SHA và thuật toán tạo chữ ký DSA (Digital Signature Algorithm). DSS thuộc loại chữ ký ngẫu nhiên và không phục hồi được.
Hình 1.9 so sánh cấu trúc DSS so với phương thức xác thực thông tin sử dụng mật mã bất đối xứng RSA.
Trong thuật toán xác thực thông tin dùng mật mã RSA, thông tin gốc được đưa vào hàm băm SHA để tạo ra mã băm (tức message digest) có kích thước cố định. Mã băm này sau đó được mã hóa (bằng thuật toán RSA) dùng khóa riêng của thực thể tạo thông tin (phía gửi). Kết quả của phép mã hóa được gắn vào thông tin gốc và gửi đi. Phía thu nhận được thông tin, tách phần mã băm ra khỏi thông tin gốc và giải mã nó bằng khóa công khai của phía gửi. Chú ý rằng khóa công khai là thông tin được công bố rộng rãi cho bất kỳ thực thể nào có quan tâm. Đồng thời, thông tin gốc cũng được đưa vào hàm
băm để tính mã băm, sau đó đem so sánh với mã băm vừa nhận được. Nếu hai mã này giống nhau thì thông tin vừa nhận được chấp nhận như là thông tin hợp lệ.
Họat động của DSS cũng bao gồm việc đưa thông tin gốc vào hàm băm để tạo ra mã băm có kích thước cố định. Tuy nhiên, mã băm này sẽ không được mã hóa trực tiếp bằng một giải thuật mã hóa mà được sử dụng làm ngõ vào của một hàm tạo chữ ký S (Signature function). Các thông tin đưa vào hàm tạo chữ ký bao gồm:
• Mã băm của thông tin gốc
• Một số ngẫu nhiên k
• Khóa riêng của người ký (PRa)
• Khóa công khai của nhóm các thực thể liên quan đến giao dịch chữ ký (PUG)
M
H E
PRa M M
H
D
So sánh PUa
a- Xác thực thông tin dùng mật mã RSA
M
H S
PRaPUG
k
M
s r
M
s r
H
V PUGPUa
So sánh
a- Dùng chữ ký số DSS
Hình 1.9: Xác thực thông tin dùng mật mã RSA và dùng chữ ký số DSS
Kết quả của hàm sinh chữ ký gồm hai thành phần, đặt tên là r và s. Cả hai được gửi kèm với thông tin gốc.
Ở phía nhận thu, thông tin gốc được tách riêng để đưa vào hàm băm.
Sau đó, mã băm được đưa vào hàm kiểm chứng V (Verification function) cùng với khóa công khai của nhóm (PUG) và khóa công khai của phía gửi (PRA). Nếu kết quả của hàm kiểm chứng bằng với thành phần r của chữ ký thì thông tin được xem là xác thực.
Hình 1.10 mô tả quá trình tạo chữ ký và kiểm chứng chữ ký dùng DSS.
Chú ý rằng thành phần r của chữ ký không phụ thuộc vào thông tin gốc mà chỉ phụ thuộc vào số ngẫu nhiên k và 3 thành phần của khóa công khai của nhóm (PUG) là p, q và g. Do vậy, để giảm chi phí tính tóan mỗi khi tạo ra chữ ký, người sử dụng có thể tạo ra giá trị r một lần, và dùng giá trị đó cho nhiều chữ ký ứng với nhiều khối thông tin gốc khác nhau.
p q g
f2
f1
f3
f4 y q g
k x q
s r
q s’
M r’
H
H
So sánh v M
a- Tạo chữ ký b- Kiểm chứng chữ ký
Hình 1.10: Tạo và kiểm chứng chữ ký với DSS
1.4.3. Thuật toán tạo chữ ký DSA (Digital Signature Algorithm):
DSA là thành phần trọng tâm của chữ ký số DSS, có chức năng tạo ra chữ ký từ các thông tin như mã băm của thông tin gốc, khoá riêng của người ký, khoá công khai của nhóm và một số ngẫu nhiên k. DSA được xây dựng dựa trên phép toán logarit rời rạc, được tóm tắt như sau:
- Tạo các thành phần khoá công khai (public key components):
- p: một số nguyên tố thoả 2L-1 < p < 2L với 512 < L < 1024 và L là bội số của 64.
- q: một số nguyên tố chia hết (p – 1) thỏa điều kiện 2159 < q < 2160 (q dài 160 bit)
g: một số nguyên có giá trị = (h(p -1)/q mod p), trong đó h là một số nguyên thoả điều kiện 1 < h < p – 1 và (h(p-1)/q mod p) > 1
- Tạo khoá riêng của người dùng:
x: một số nguyên ngẫu nhiên lớn hơn 0 và nhỏ hơn q - Tạo khoá công khai của người dùng:
y: là một số nguyên có giá trị = (gx mod p) - Tạo số bí mật cho từng bản tin:
k: một số nguyên được chọn ngẫu nhiên lớn với 0 < k < q - Tạo chữ ký:
r = (gk mod p) mod q
s = [k-1 (H(M) + xr)] mod q -Kiểm chứng chữ ký:
w = (s’)-1 mod q u1 = [H(M')w] mod q u2 = (r')w mod q
v = [(gu1 yu2) mod p] mod q
Lưu ý: s’, r’, M’ tương ứng với các phần s, r và M tại phía thu.
Với độ phức tạp của phép tóan logarit rời rạc, rất khó có thể xác định được k khi biết r hoặc xác định được x khi biết s.