PAdES là chuẩn ký số cho file PDF, XMLDSig cho dữ liệu XML. So sánh phần được ký, cách nhiều người cùng ký, hình chữ ký và lỗi hay gặp khi kiểm tra.
Hợp đồng gửi đối tác thường là file PDF, còn hoá đơn điện tử hay tờ khai thuế là file XML. Cả hai đều có thể mang chữ ký số, nhưng theo hai chuẩn khác nhau: PAdES cho PDF và XMLDSig cho XML. Bài này so sánh hai chuẩn ở những điểm ảnh hưởng trực tiếp đến người ký và người kiểm tra.
Bảng so sánh PAdES và XMLDSig
| PAdES (file PDF) | XMLDSig (file XML) | |
|---|---|---|
| Tổ chức ban hành | ETSI (EN 319 142) | W3C (XML Signature 1.1) |
| Chữ ký nằm ở đâu | Khối PKCS#7 (CMS) nhúng trong file PDF | Phần tử Signature trong file XML, hoặc file riêng |
| Phần được ký | Các khoảng byte khai báo trong ByteRange: toàn bộ file trừ chỗ chứa chữ ký | Các phần dữ liệu được chỉ ra trong chữ ký: có thể là cả file hoặc chỉ một phần |
| Chuẩn hoá trước khi băm | Không cần: băm đúng từng byte | Cần chuẩn hoá (canonicalization) vì cùng một nội dung XML có thể viết theo nhiều cách |
| Hình chữ ký trên trang | Có thể có: ô chữ ký, con dấu, họ tên | Không có, vì XML không có trang |
| Nhiều người ký | Mỗi chữ ký sau được ghi nối vào cuối file | Mỗi người thêm một phần tử Signature; thường phải loại các chữ ký khác ra khỏi phần được ký |
| Mở và kiểm tra bằng | Adobe Acrobat Reader, Foxit và các công cụ kiểm tra chữ ký | Phần mềm của hệ thống nhận file, công cụ kiểm tra chữ ký XML |
| Thường gặp ở | Hợp đồng, công văn, quyết định, biên bản | Hoá đơn điện tử, tờ khai thuế, dữ liệu trao đổi giữa các phần mềm |
Hai chuẩn giống nhau ở đâu
- Cùng một cơ chế: tính giá trị băm của dữ liệu, ký giá trị băm bằng khoá bí mật, đính kèm chứng thư số để người nhận biết ai đã ký.
- Cùng phát hiện sửa đổi: sửa dù một ký tự trong phần được ký, giá trị băm tính lại không còn khớp và chữ ký báo không hợp lệ.
- Cùng có thể ký bằng USB Token: khoá bí mật nằm trong thiết bị, phần mềm chỉ gửi giá trị băm vào để ký.
- Cùng phải kiểm tra chứng thư: chữ ký chỉ đáng tin khi chứng thư còn hiệu lực tại thời điểm ký và do tổ chức được cấp phép phát hành.
Khác nhau 1: cách xác định phần được ký
Với PDF, chữ ký khai báo ByteRange: hai khoảng byte nằm hai bên chỗ chứa chữ ký. Phần được ký vì thế là gần như toàn bộ file tại thời điểm ký, và phần mềm đọc PDF có thể cho biết chữ ký có phủ đến cuối file hay có nội dung được thêm sau đó.
- 1
Khai báo khoảng byte
Toàn bộ nội dung file PDF, trừ đúng chỗ chừa sẵn để đặt chữ ký, được đưa vào phép tính.
- 2
Băm và ký
Giá trị băm của các khoảng byte đó được ký bằng khoá bí mật, rồi đặt vào chỗ đã chừa.
- 3
Xác thực về sau
Phần mềm kiểm tra tính lại giá trị băm trên cùng các khoảng byte. Chỉ cần một byte trong đó bị đổi, giá trị băm khác đi và chữ ký báo không hợp lệ.
Với XML, chữ ký liệt kê các tham chiếu (Reference) tới phần dữ liệu được ký, kèm các phép biến đổi áp dụng trước khi băm. Một tham chiếu có thể trỏ tới cả tài liệu hoặc chỉ một phần tử. Vì vậy, khi kiểm tra file XML, ngoài câu hỏi "chữ ký còn khớp không" còn phải hỏi "chữ ký bao phần nào của file".
Khác nhau 2: XML phải được chuẩn hoá trước khi băm
Cùng một nội dung XML có thể viết theo nhiều cách: thứ tự thuộc tính khác nhau, kiểu xuống dòng khác nhau (CRLF hay LF), cách khai báo không gian tên khác nhau. Để hai bên tính ra cùng một giá trị băm, XMLDSig chuẩn hoá dữ liệu theo quy tắc Canonical XML trước khi băm. PDF không cần bước này vì chữ ký băm thẳng từng byte của file.
Khác nhau 3: hình chữ ký
Chữ ký PAdES có thể kèm hình hiển thị trên trang: ô chữ ký, con dấu, họ tên và thời điểm ký. Hình này chỉ là phần trình bày; giá trị nằm ở khối chữ ký số bên trong file. File XML không có trang nên chữ ký XMLDSig không có hình. Người nhận biết file đã ký bằng cách kiểm tra chữ ký, không phải bằng cách nhìn.
Khác nhau 4: nhiều người cùng ký một file
PDF cho phép ghi nối (cập nhật gia tăng): chữ ký sau được thêm vào cuối file, không đụng vào phần chữ ký trước đã bảo vệ. Mỗi chữ ký bảo vệ đúng trạng thái file tại lúc ký.
Với XML, mỗi người thêm một phần tử Signature. Khó khăn là chữ ký của người sau làm thay đổi file mà chữ ký của người trước đang bảo vệ. Cách xử lý thường gặp là dùng phép biến đổi để loại các phần tử chữ ký ra khỏi phần được ký, để mỗi chữ ký chỉ bảo vệ dữ liệu gốc. Một số thư viện kiểm tra mặc định tắt các phép biến đổi này, nên cùng một file có thể được công cụ này báo hợp lệ và công cụ khác báo lỗi.
PAdES, XAdES, XMLDSig, PKCS#7: gỡ rối tên gọi
| Tên gọi | Dành cho | Vai trò |
|---|---|---|
| PKCS#7 / CMS | Dữ liệu nhị phân | Định dạng đóng gói chữ ký kèm chứng thư; là nền của PAdES |
| PAdES | File PDF | Cách nhúng chữ ký CMS vào PDF để lưu giữ và xác minh lâu dài |
| XMLDSig | Dữ liệu XML | Cú pháp chữ ký cơ bản cho XML |
| XAdES | Dữ liệu XML | Mở rộng XMLDSig thêm thông tin như thời điểm ký, dấu thời gian để xác minh lâu dài |
| CAdES | Dữ liệu bất kỳ | Mở rộng CMS theo cùng hướng với PAdES và XAdES |
Gặp thuật ngữ lạ? Tra từ điển 45 thuật ngữ chữ ký số.
Khi nào dùng PDF, khi nào dùng XML
- Người đọc là con người, cần in, cần hình chữ ký và con dấu: dùng PDF ký theo PAdES.
- Người đọc là phần mềm, dữ liệu cần được hệ thống khác xử lý tự động: dùng XML ký theo XMLDSig.
- Hoá đơn điện tử, tờ khai thuế, hồ sơ nộp cổng dịch vụ công: định dạng, vị trí chữ ký và kênh gửi do cơ quan nhận quy định, doanh nghiệp không tự chọn.
GoSign ký PDF và XML thế nào
- File PDF: ký số theo chuẩn PAdES/PKCS#7 bằng USB Token qua GoSign Desktop Signer, có hình chữ ký và con dấu trên trang.
- File Word, Excel, PowerPoint: tự chuyển sang PDF khi tải lên rồi ký như PDF; file gốc lưu kèm hồ sơ.
- File XML nội bộ: ký số theo chuẩn XMLDSig, thuật toán RSA-SHA256, chữ ký nằm trong file và bao toàn bộ nội dung. Mỗi bước Ký số thêm một chữ ký riêng, chữ ký trước vẫn hợp lệ.
Xem GoSign xử lý từng định dạng file khi trình ký.
Tải file PDF hoặc XML đã ký lên để xem từng chữ ký còn khớp dữ liệu không và chứng thư do ai cấp.
Căn cứ pháp lý & nguồn tham khảo