Dấu thời gian và thời gian tin cậy
Spec: RFC 3161RFC 3161Spec: RFC 5816RFC 5816Spec: ISO 32000-2, §12.8.5ISO 32000-2 §12.8.5
Tổng quan nhanh
Phần tiêu đề “Tổng quan nhanh”Dấu thời gian không ghi nhận “thời điểm tài liệu này được ký.” Nó chứng minh một điều hẹp hơn nhưng mạnh hơn: một phần dữ liệu cụ thể đã tồn tại trước một thời điểm cụ thể, được một bên không phải người ký chứng thực. Sự phân biệt đó chính là toàn bộ giá trị của thời gian tin cậy, nhưng lại thường bị hiểu sai.
Vì sao điều này quan trọng
Phần tiêu đề “Vì sao điều này quan trọng”Thời gian ký nằm trong chữ ký chỉ là giá trị mà máy tính của người ký khai báo. Đồng hồ có thể sai, dù vô tình hay cố ý. Nếu bằng chứng duy nhất về thời điểm là khẳng định của chính người ký, người ký có thể tùy ý ghi ngày sớm hơn hoặc muộn hơn cho một tài liệu. Một chứng chỉ bị thu hồi hôm qua có thể bị làm cho trông như đã được dùng để ký từ năm ngoái. “Khi nào” không phải là một chi tiết nhỏ. Nó quyết định liệu một chữ ký được tạo bằng chứng chỉ nay đã hết hạn hoặc đã bị thu hồi có còn giá trị hay không. Và nếu thời gian tin cậy sai, mọi lập luận về hiệu lực lâu dài được xây dựng dựa trên nó đều sụp đổ.
Bản tóm tắt ngắn gọn
Phần tiêu đề “Bản tóm tắt ngắn gọn”- Thời gian ký do chính người ký đưa ra là một lời khai, không phải bằng chứng. Nó có thể dễ dàng bị làm giả.
- Một dấu thời gian RFC 3161 là một token đã ký từ Time-Stamp Authority (TSA), gắn một giá trị hash của dữ liệu của bạn với thời gian của TSA.
- Điều nó chứng minh rất chính xác: dữ liệu đã tồn tại trước thời gian mà TSA nêu ra. Không phải thời điểm tạo chính xác — mà là một giới hạn trên.
- Token phản hồi nonce và message imprint của bạn, nên nó không thể là bản phát lại và không thể nói về dữ liệu khác.
- Một dấu thời gian tài liệu áp dụng cùng cơ chế đó cho toàn bộ PDF, neo giữ mọi thứ bên dưới nó — chữ ký và bằng chứng xác thực được nhúng kèm — vào một mốc thời gian tin cậy.
Cách NextPDF tiếp cận vấn đề này
Phần tiêu đề “Cách NextPDF tiếp cận vấn đề này”NextPDF xem dấu thời gian là thứ cần xác minh, chứ không chỉ đơn thuần là thứ cần lấy về. Yêu cầu một token chỉ là phần nhỏ của công việc. Quan điểm của engine là một token chưa được xác minh thì không phải là bằng chứng.
Khi engine gắn dấu thời gian cho một chữ ký, nó gửi cho TSA một giá trị hash của dữ liệu và một nonce ngẫu nhiên mới, chứ không bao giờ gửi chính dữ liệu đó. Token trả về sau đó được kiểm tra theo toàn bộ tập thuộc tính làm cho nó có ý nghĩa: trạng thái của authority là “granted”, nonce trong token khớp với nonce đã gửi, message imprint trong token khớp với hash đã gửi, chữ ký mã hóa của chính token được xác minh, content type của token là kiểu dấu thời gian, và thời gian được nêu nằm trong khoảng dung sai chấp nhận được. Bất kỳ sai lệch nào cũng là lỗi nghiêm trọng kèm một lý do có kiểu xác định. Không có hướng xử lý kiểu “trông cũng gần đúng rồi”. Dấu thời gian tài liệu tuân theo cùng quy tắc đó, nhưng áp dụng cho toàn bộ tệp thay vì cho giá trị của một chữ ký.
Hai phía này được thiết kế đối xứng một cách có chủ đích. Khi engine gắn dấu thời gian cho một chữ ký, imprint mà nó gửi tới TSA là hash của giá trị chữ ký của người ký; khi về sau xác minh dấu thời gian đó, nó tính lại đúng hash ấy và yêu cầu imprint của token phải khớp. NextPDF cung cấp nửa xác minh này dưới dạng một bước riêng verifySignatureTimestamp, nhận giá trị chữ ký làm đầu vào bắt buộc — nên một dấu thời gian chữ ký không bao giờ có thể được “xác minh” mà không thực sự kiểm tra thứ mà nó bao phủ. Bước đó thất bại đóng (fail-closed) trước một đầu vào rỗng, một thuật toán imprint không nhận dạng được hoặc yếu (SHA-1), một imprint dị dạng, hoặc một hash không ràng buộc với giá trị chữ ký. Do đó, một token do một phiên bản engine từng hash một đầu vào khác tạo ra sẽ không thể chứng minh được liên kết này, theo đúng thiết kế.
- Hash the dataOnly a digest of the signature value (or the whole PDF, for a document timestamp) is computed — never the data itself.
- Send hash + nonceThe digest and a fresh random nonce go to the Time-Stamp Authority.
- TSA returns a tokenA signed token binds the digest to the TSA’s genTime and echoes the nonce.
- Verify the tokenStatus granted, nonce matches, message imprint matches, token signature verifies, time within tolerance.
- Conclude an upper boundThe data provably existed before the TSA’s stated time — attested by a party that is not the signer.
Ví dụ thực tế
Phần tiêu đề “Ví dụ thực tế”Bạn không tự lắp ráp một token dấu thời gian bằng tay. Điều quan trọng là ranh giới tin cậy. TSA là thứ bạn cấu hình và bảo vệ, vì thời gian của nó sẽ trở thành bằng chứng của bạn.
<?php
declare(strict_types=1);
use NextPDF\Security\Signature\SignatureLevel;
// Asking for any level at or above B-T requires a TSA.$level = SignatureLevel::PAdES_B_T;$level->requiresTimestamp(); // true → a Time-Stamp Authority must be supplied
// The TSA endpoint, its transport security, and its trust anchor are// deployment-supplied. The engine sends a hash plus a fresh nonce — never the// document — and verifies the returned token before the signature is accepted.// A token that fails any check (status, nonce, imprint, signature, time)// is a hard error, not a warning.Ranh giới quan trọng là engine gửi một hash, không phải tài liệu, nên TSA không bao giờ thấy nội dung của bạn. Và engine xác minh phản hồi. Một TSA mà bạn không thể xác thực thì không phải là thời gian tin cậy. Nó chỉ là một chiếc đồng hồ khác mà thôi.
Hiểu lầm thường gặp
Phần tiêu đề “Hiểu lầm thường gặp”Cái bẫy là hiểu một dấu thời gian theo nghĩa “tài liệu này được ký vào đúng 14:32 ngày này.” Nó không phải là đồng hồ bấm giờ cho sự kiện ký. Nó chứng minh dữ liệu đã tồn tại không muộn hơn thời gian của TSA, tức là một giới hạn trên do bên thứ ba đặt ra. Việc tạo dữ liệu có thể đã diễn ra vào bất kỳ thời điểm nào trước đó. Cái bẫy thứ hai là cho rằng bất kỳ máy chủ dấu thời gian nào cũng mang lại thời gian tin cậy. Một token mà bạn không thể xác minh chữ ký, hoặc có authority mà bạn không tin tưởng, thì không chứng minh được điều gì. Nó là một chiếc đồng hồ mà bạn không có lý do gì để tin. Thời gian tin cậy đến từ một TSA mà bạn có thể xác thực và một token mà bạn đã xác minh, chứ không phải từ việc hỏi một máy chủ để lấy một con số.
Giới hạn và ranh giới
Phần tiêu đề “Giới hạn và ranh giới”NextPDF xây dựng yêu cầu, chỉ gửi một hash, và xác minh token trả về. Nó không bảo đảm cho authority đứng sau token đó. Độ chính xác của TSA, hiệu lực của chính chứng chỉ của nó, và độ tin cậy của nó là các thuộc tính của dịch vụ và của cấu hình triển khai của bạn, chứ không phải của engine. Một dấu thời gian gắn một hash với một thời gian. Nó không nói gì về ý nghĩa của dữ liệu, danh tính của người ký, hay liệu chứng chỉ của người ký có hợp lệ hay không. Đó là các bước kiểm tra riêng được trình bày trong Xác thực chữ ký đúng cách. Engine không thể biến một TSA không đáng tin thành đáng tin. Trang này cũng không khẳng định bất kỳ giá trị pháp lý cụ thể nào cho một dấu thời gian; điều đó phụ thuộc vào trạng thái của TSA và pháp quyền liên quan. Cách thời gian tin cậy được tái sử dụng để giữ cho một chữ ký vẫn xác minh được qua nhiều thập kỷ được trình bày trong Xác thực dài hạn.
Khả dụng theo bậc của tính năng dấu thời gian:
| Edition | Availability |
|---|---|
| Core | Not in this edition |
| Pro | PAdES B-T — một dấu thời gian RFC 3161 đã được xác minh trên giá trị chữ ký, dựa trên một TSA do bên triển khai cung cấp. |
| Enterprise | Bổ sung dấu thời gian tài liệu được B-LT và B-LTA sử dụng để neo giữ bằng chứng xác thực được nhúng kèm và để vận hành vòng lặp gia hạn lưu trữ. |
Tài liệu liên quan
Phần tiêu đề “Tài liệu liên quan”- Xác thực dài hạn — cách dấu thời gian tài liệu niêm phong bằng chứng được nhúng kèm và được gia hạn theo thời gian.
- Hồ sơ chuẩn của PAdES — vị trí của dấu thời gian chữ ký (B-T) và dấu thời gian tài liệu (B-LTA) trong tiến trình các cấp độ.
- Chữ ký đủ điều kiện, giải thích — vị trí của dấu thời gian đủ điều kiện trong bức tranh tin cậy của eIDAS.
Bảng thuật ngữ
Phần tiêu đề “Bảng thuật ngữ”- Dấu thời gian (RFC 3161) — một token đã ký từ một TSA, gắn một hash của dữ liệu với thời gian của TSA, chứng minh dữ liệu đã tồn tại trước thời gian đó.
- Time-Stamp Authority (TSA) — dịch vụ tin cậy phát hành các token dấu thời gian.
TSTInfo— cấu trúc nội dung của token: message imprint, thời gian tạo, số sê-ri, và nonce tùy chọn.- Message imprint — giá trị hash của dữ liệu đang được đóng dấu thời gian, được phản hồi lại trong token.
- Nonce — một giá trị ngẫu nhiên mới được gửi kèm yêu cầu và được phản hồi trong token, nên phản hồi không thể là bản phát lại.
- Dấu thời gian tài liệu — một dấu thời gian RFC 3161 trên toàn bộ PDF (đã được cập nhật bởi RFC 5816), neo giữ chữ ký và bằng chứng của nó vào một thời điểm tin cậy.