Bỏ qua để đến nội dung

Dấu thời gian và thời gian tin cậy

Spec: RFC 3161 Spec: RFC 5816 Spec: ISO 32000-2, §12.8.5 Evidence: Standard-backed

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.

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 đổ.

  • 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 noncemessage 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.

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ý.

  1. Hash the data Only a digest of the signature value (or the whole PDF, for a document timestamp) is computed — never the data itself.
  2. Send hash + nonce The digest and a fresh random nonce go to the Time-Stamp Authority.
  3. TSA returns a token A signed token binds the digest to the TSA’s genTime and echoes the nonce.
  4. Verify the token Status granted, nonce matches, message imprint matches, token signature verifies, time within tolerance.
  5. Conclude an upper bound The data provably existed before the TSA’s stated time — attested by a party that is not the signer.
Cách lấy một dấu thời gian tin cậy và điều nó chứng minh: một hash kèm một nonce được gửi tới TSA, TSA trả về một token đã ký gắn hash đó với thời gian của mình, và bên xác minh xác nhận liên kết này trước khi xem nó là bằng chứng rằng dữ liệu đã tồn tại trước thời gian đó.

Evidence: Standard-backed Định nghĩa ở đây rất chính xác. Spec: ISO/IEC 18014-2, §3 định nghĩa một dịch vụ dấu thời gian là dịch vụ cung cấp bằng chứng rằng một mục dữ liệu đã tồn tại trước một thời điểm nhất định — một giới hạn trên, không phải thời điểm tạo. Spec: ISO/IEC 18014-2, §7 định nghĩa nội dung TSTInfo của token: một message imprint (giá trị hash của dữ liệu của bạn), một thời gian tạo, một số sê-ri, và một nonce tùy chọn. Spec: ISO/IEC 18014-2, §6 nêu rõ kết luận mà bên xác minh có thể rút ra khi thành công: rằng mục dữ liệu đã tồn tại trước thời gian ghi trong token — không hơn và không kém.

Đối với PDF, Spec: ISO 32000-2, §12.8.5 quy định dấu thời gian tài liệu: phạm vi byte bao trùm toàn bộ tệp ngoại trừ giá trị Contents, hash đó được gửi tới một timestamp authority, và token RFC 3161 trả về — đã được cập nhật bởi Spec: RFC 5816 — được đặt vào Contents. Cùng nguyên tắc về phạm vi byte như với một chữ ký, nhưng áp dụng cho thời gian thay vì danh tính. Spec: RFC 6960, §4.4.4 là lý do vì sao điều này quan trọng đối với độ bền lâu dài: thời gian tin cậy là thứ cho phép một bộ xác thực chứng minh rằng một chữ ký vốn đáng tin vào ngày nó được tạo ra, ngay cả sau khi chứng chỉ đã hết hạn.

Engine của NextPDF gửi một hash và một nonce, không bao giờ gửi dữ liệu, và xác minh token trả về theo trạng thái, nonce, message imprint, chữ ký của token, content type và dung sai thời gian trước khi xem nó là bằng chứng.

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.

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 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ố.

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:

RFC 3161 timestamping (signature timestamp and document timestamp) — edition availability
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-LTB-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ữ.

  • 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.