RSA - Chữ ký số

Chữ ký số (Digital Signature) là gì?
Một điều đáng ngạc nhiên là có rất nhiều người, kể cả bao gồm dân IT, cũng không hiểu chữ ký số - digital signature là gì. Họ đa số vẫn cho rằng đó là một tấm ảnh có hình chữ ký và dán vào dưới một document.
Thực ra, không phải vậy. Chữ ký số là một đoạn thông tin khoảng vài chục bytes được gắn vào cuối văn bản nhằm đảm bảo:
Xác thực tính toàn vẹn (Integrity): Thông tin không bị sửa đổi, giả mạo trong quá trình truyền hay lưu trữ
Tính xác thực (Authentication): Xác thực danh tính của người gửi hoặc nguồn gốc của thông tin
Tính không chối bỏ (Non-repudiation): Người tạo ra thông tin được ký là người duy nhất có thể tạo ra chữ ký tương ứng, người tạo ra thông tin không thể phủ nhận rằng họ đã tạo ra dữ liệu ấy
Cách hoạt động
Ở bài trước, chúng ta đã biết RSA tạo ra một cặp khóa:
Khóa bí mật - secret key: \((d, n)\)
Khóa công khai - public key: \((e,n)\)
Trong chữ ký số, khóa bí mật dùng để tạo chữ ký và khóa công khai được dùng để xác minh chữ ký.
Bước 1 - Tạo chữ ký
Giả sử bạn muốn tạo chữ ký cho một tài liệu \(m\):
Tính giá trị Hash cho \(m\): \(h=Hash(m)\) bước này nhằm đảm bảo thông tin được thu gọn nhưng vẫn giữ được tính toàn vẹn. Hàm hash được dùng có thể là SHA-256, Keccak, …
Tạo chữ ký bằng khóa bí mật: \(\text{signature} = h^d \mod n\)
Gắn chữ ký vào thông điệp để gửi đi, lúc này thông tin gửi đi sẽ bao gồm một cặp \((m,\text{signature})\)
Bước 2 - Xác minh chữ ký
Người nhận sẽ nhận được \((m,\text{signature})\), để xác minh, anh ta sẽ:
Tính lại giá trị Hash của \(m\): \(h' = Hash(m)\)
Giải mã chữ ký: \(h=\text{signature}^e \mod n\)
So sánh:
Nếu \(h=h'\) thì chữ ký hợp lệ
Nếu không, chữ ký không hợp lệ
Demo
Subscribe to my newsletter
Read articles from Legos Light directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
