Giải thuật ký số DSA (Digital Signature Algorithm) là chuẩn cho các chữ ký số của chính phủ Mỹ hay tiêu chuẩn xử lý thông tin liên bang. Giải thuật này được đề nghị bởi NIST vào tháng 8 năm 1991 để sử dụng trong chuẩn chữ ký số DSS (Digital Signature Standard) được chấp nhận năm 1993 (FIPS 186). Được chỉnh sửa năm 1996 (FIPS 186-1) và được mở rộng năm 2000 (FIPS 186-2) [3]. Đặc điểm của các giải thuật này là sử dụng chữ ký theo kiểu chọn lựa ngẫu nhiên. Tất cả các lược đồ DSA kèm thông điệp đều có thể cải biến thành các lược đồ ký khôi phục thông điệp. Để tìm hiểu về lược đồ DSA ta đi sâu tìm hiểu vào chuẩn chữ ký số DSS do khả năng cài đặt thực tế của nó.
Sơ đồ chữ ký DSS dựa trên giải thuật chữ ký số DSA. Chữ ký số DSS phải đi kèm thông điệp vì bản thân chữ ký không khôi phục được thông điệp gốc. Trước khi ký một thông điệp dài, phải tạo ra đại diện thông điệp nhờ hàm băm để tạo ra một dạng nén của dữ liệu (condensed version of data) gọi là đại diện thông điệp (message digest). Với sơ đồ chữ ký DSS, hàm băm là SHA (Security Hash Algorithm) được miêu tả trong FIPS 186. Hàm băm SHA tạo ra một giá trị số nguyên 160 bit đặc trưng cho một thông điệp.
Hình 2.7: Sơ đồ chữ ký DSA/DSS 2.4.2 Mô tả thuật toán
Tóm tắt lược đồ ký DSA/DSS
Giả sử plà số nguyên tố 512 bit sao cho bài toán logarit rời rạc trong
p
Z là khó giải. Có q là số nguyên tố 160 bit là ước của p1
Giả thiết Zp là căn bậc q của 1 modul p
Cho pZp và aZqZp và định nghĩa: Ap,q,,a,: amodp
Các số p,q,, là công khai và a là bí mật.
Với Kp,q,,a, và một số ngẫu nhiên (bí mật) k,1kq1, ta định nghĩa:
+ Quá trình ký số Sigk x,k , trong đó:
kmodpmodq
và xak1modq với xZp và ,Zq
+ Quá trình xác minh sẽ hoàn thành sau các tính toán:
q e q x e1 1 ; 2 1mod x true p q
2.4.2.1 Thuật toán sinh khóa
- Chọn số nguyên tố 512 bit p, sao cho bài toán logarit rời rạc trong
p Z là khó giải, 251164 251264 ; 0,8 t p t t .
- Chọn số nguyên tố 160 bit q là ước của 159 160 2 2 ; 1 q p . - Chọn số 1 ; mod 1 g q p p
(glà phần tử nguyên thủy trong Zp) - Chọn khóa bí mật a:1aq1. Tính khóa công khai amodp
- Công khai p,q,,
2.4.2.2 Thuật toán sinh chữ ký
- Chọn ngẫu nhiên số nguyên bí mật k:0kq1 - Chữ ký trên x là cặp , , trong đó:
akmodpmodq; k 1x amodq
. Trường hợp x lớn thì phải tạo đại diện zH x để ký trên đó.
2.4.2.3 Thuật toán xác minh chữ ký
- Xét khóa công khai p,q,,: Nếu điều kiện 0, q không thỏa mãn thì từ chối chữ ký.
- Tính e1wxmodq;e2 wmodq với w1modq
- Tính ve1e2modpmodq
- Chữ ký đúng nếu v
Ví dụ: Chữ ký trên thông điệp x=1234
* Sinh khóa:
- Chọn q101,p78q17879
- Chọn 378mod7879170;g3 là phần tử nguyên thủy trong Z7879
- Chọn khóa bí mật a75. Khóa công khai amod78794576
* Sinh chữ ký:
Chữ ký trên thông điệp x1234
- Chọn ngẫu nhiên k50, tính 1mod10199
- Tính 17030mod789mod10194; 123475.9499mod10197 - Chữ ký trên x1234 là 94,97 * Xác minh chữ ký: - Tính 1mod 971mod10125 q w
- Tính e1wxmodq25.1234mod10145;e2wmodq94.25mod10127
- Tính ve1e2 modpmodq17045.457627mod7879mod10194
Vậy chữ ký đúng vì v 94