Bỏ qua để đến nội dung
getnextpdf.com

Thời gian tin cậy: cách một dấu thời gian chứng minh thời điểm

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

Một dấu thời gian trả lời một câu hỏi duy nhất, trơn tuột một cách đáng ngạc nhiên: dữ liệu này đã tồn tại chưa? Không phải ai tạo ra nó, không phải nó có đúng hay không — chỉ là, vào một khoảnh khắc được nêu tên, chính xác những byte này đã có mặt trong thế giới. Trang này dựng ý tưởng đó từ nền móng: một Time-Stamp Authority làm gì, một token thực sự chứa những gì, và vì sao một con số trên đồng hồ lại trở thành bằng chứng.

Đây là người bạn đồng hành theo nguyên lý đầu tiên cho trang tập trung vào engine Dấu thời gian và thời gian tin cậy. Hãy đọc trang này trước nếu “thời gian tin cậy” nghe như biệt ngữ.

Đồng hồ trên máy tính của bạn là một lời thú nhận, không phải bằng chứng. Bạn có thể đặt nó về bất kỳ giá trị nào bạn muốn, và bất kỳ ai khác cũng vậy. Khoảnh khắc một ngày tháng trở nên quan trọng với một bên thứ hai — một hợp đồng phải được ký trước hạn chót, một hồ sơ phải tồn tại trước một tranh chấp — đồng hồ của chính bạn trở nên vô giá trị như một bằng chứng, bởi vì bạn kiểm soát nó. Toàn bộ bài toán của thời gian tin cậy là tìm một chiếc đồng hồ mà bạn không thể chỉnh.

Đây không phải là một mối lo hiếm gặp. Mọi tệp PDF đã ký sống lâu đều dựa vào nó. Một chứng chỉ ký rồi sẽ hết hạn; nhiều năm sau, một bên xác minh cần biết rằng chữ ký được tạo ra khi chứng chỉ vẫn còn hiệu lực. Không có một bản ghi độc lập về “khi nào,” câu hỏi đó không có câu trả lời trung thực. Thời gian tin cậy là nền móng thầm lặng mà cả tòa nhà chữ ký bền vững đứng trên đó.

  • Một dấu thời gian chứng minh một mẩu dữ liệu đã tồn tại trước một khoảnh khắc được nêu. Đó là một cận trên về tuổi, không gì hơn.
  • Nó được tạo ra bởi một bên thứ ba, Time-Stamp Authority (TSA), mà đồng hồ của họ bạn tin tưởng chính vì nó không phải của bạn.
  • TSA không bao giờ thấy dữ liệu của bạn. Nó ký một hash của dữ liệu, gắn với một giá trị thời gian, và trả về một token nhỏ đã được ký.
  • Token chứng minh ba điều cùng lúc: dữ liệu đúng là dữ liệu (hash khớp), thời gian đúng là thời gian của TSA (chữ ký của nó), và phản hồi khớp với yêu cầu bạn đã gửi (nonce mà nó lặp lại, đề phòng một phản hồi cũ bị phát lại).
  • không chứng minh ai đã viết dữ liệu, rằng dữ liệu là đúng sự thật, hay thời điểm tạo ra chính xác. Chỉ: không muộn hơn thời điểm này.
  • Niềm tin chảy về phía TSA. Một TSA được tin cậy công khai là đủ tốt cho hầu hết hồ sơ; một TSA đủ điều kiện theo eIDAS mang theo một giả định pháp lý trong EU.

Hãy bắt đầu với mẹo nằm ở trung tâm của tất cả. Bạn muốn một người lạ làm chứng cho khi nào dữ liệu của bạn tồn tại, nhưng bạn không thể cho họ thấy dữ liệu — nó có thể là tài liệu mật, và dù sao đi nữa nó có thể khổng lồ. Nên bạn không làm vậy. Bạn tính một hash: một dấu vân tay ngắn, có độ dài cố định, thay đổi hoàn toàn nếu chỉ một byte của bản gốc thay đổi, và từ đó không thể khôi phục lại bản gốc. Bạn gửi dấu vân tay, không phải tệp.

TSA nhận lấy dấu vân tay đó, gắn thêm thời gian hiện tại của chính nó, ký cặp này bằng khóa riêng của nó, và trả lại một time-stamp token (Spec: RFC 3161, §2.1). Token là sự ràng buộc được làm cho vĩnh viễn: dấu vân tay này, tại thời điểm này, được tôi làm chứng cho. Vì token đã được ký, không ai — kể cả TSA về sau — có thể thay đổi thời gian mà không phá vỡ chữ ký. Vì nó mang theo dấu vân tay của bạn, nó vô dụng đối với bất kỳ tệp nào khác. Và vì yêu cầu bao gồm một nonce ngẫu nhiên mới mà TSA lặp lại nguyên vẹn, bạn có thể biết phản hồi tương ứng với yêu cầu cụ thể này và không phải là một phản hồi cũ được phát lại — nonce chứng thực tính tươi mới, không phải ai đã hỏi (Spec: RFC 3161, §2.4.2).

Hãy hình dung một con dấu sáp ép lên một lá thư gấp lại. Con dấu không đọc lá thư; nó chỉ chứng minh lá thư còn nguyên vẹn và có mặt khi con dấu được ép xuống. Một dấu thời gian là một con dấu được ép bởi một chiếc đồng hồ mà bạn không sở hữu, lên một dấu vân tay của dữ liệu bạn.

  1. Fingerprint the dataCompute a one-way hash of the file or the signature value. The data itself never leaves your hands.
  2. Ask the authoritySend the hash and a fresh random nonce to the Time-Stamp Authority.
  3. The TSA seals a timeIt signs the hash bound to its own clock and echoes your nonce, producing a small signed token.
  4. Store the tokenFor a PDF, the token is placed inside the file so the proof travels with the document.
  5. Verify laterAnyone who trusts the TSA can check the token: its signature against the TSA certificate, the matching hash, the echoed nonce, and the time — then concludes an upper bound on age.
How a trusted timestamp is obtained and what it proves: a hash plus a fresh nonce go to the TSA, the TSA signs that hash bound to its own time and echoes the nonce, and the verifier checks every link before treating the token as proof that the data existed before the stated time.

Trong một tệp PDF, chính cơ chế này đội hai chiếc mũ. Một dấu thời gian chữ ký niêm phong khi nào một chữ ký được áp dụng, bằng cách đóng dấu thời gian lên giá trị của chữ ký. Một dấu thời gian tài liệu niêm phong khi nào toàn bộ tệp đã tồn tại, bằng cách băm toàn bộ tệp PDF (loại trừ phần placeholder mà token sẽ chiếm) và lưu token trả về vào lại placeholder đó (Spec: ISO 32000-2, §12.8.5). Loại thứ hai chính là thứ mà một chữ ký lưu trữ sống lâu làm mới qua các năm để giữ cho niềm tin của nó luôn tươi mới.

Một chi tiết hiện đại đáng biết: một định dạng dấu thời gian cũ tự ghim mình vào một thuật toán hash duy nhất để đặt tên cho chính chứng chỉ của TSA. Profile được cập nhật cho phép một token đặt tên cho chứng chỉ của nó bằng một digest hiện hành (Spec: RFC 5816, §2.1), nên thời gian tin cậy không âm thầm thừa hưởng mật mã học của ngày hôm qua.

Bạn không tự lắp ráp một token bằng tay, và bạn cũng không nên muốn vậy. Điều đáng hiểu là đường nối của niềm tin: bạn đang chọn tin chiếc đồng hồ nào. Trong NextPDF, việc yêu cầu một mức chữ ký cần thời gian tin cậy làm cho lựa chọn đó trở nên tường minh thay vì ngầm định.

<?php
declare(strict_types=1);
use NextPDF\Security\Signature\SignatureLevel;
// A baseline signature trusts only the signer's own clock.
$baseline = SignatureLevel::PAdES_B_B;
$baseline->requiresTimestamp(); // false → no third party vouches for "when"
// Stepping up to B-T means a Time-Stamp Authority must be supplied:
// from here on, "when" is attested by a clock you do not control.
$timestamped = SignatureLevel::PAdES_B_T;
$timestamped->requiresTimestamp(); // true → a TSA is now part of your trust model
// The decision is now visible at the call site, not buried in a default.
// Choosing the TSA is choosing whose time becomes your evidence.

Điểm mấu chốt của ví dụ không phải là API. Đó là chuyện “tôi có thời gian tin cậy không?” là một dữ kiện đúng-hoặc-sai về tài liệu của bạn, được quyết định bởi việc có một TSA tham gia hay không — và engine từ chối để dữ kiện đó trở nên mơ hồ.

Cái bẫy là đọc một dấu thời gian như “thứ này được tạo ra lúc 14:32.” Nó không nói điều gì như vậy. Nó nói “thứ này đã tồn tại không muộn hơn 14:32.” Sự khác biệt chính là toàn bộ điểm mấu chốt. Một dấu thời gian là một cận trên, không bao giờ là một cận dưới và không bao giờ là một khoảnh khắc chính xác. Dữ liệu của bạn có thể đã tồn tại nhiều năm trước khi bạn kịp đóng dấu thời gian cho nó; token im lặng về điều đó. Nó kẻ một đường và nói: không phải sau đây.

Một hiểu lầm thứ hai, đắt giá hơn: rằng một dấu thời gian chứng minh tài liệu của bạn là thật hay đúng. Nó không làm cả hai. Nó thờ ơ với ý nghĩa. Một lời nói dối được đóng dấu thời gian hoàn hảo vẫn là một lời nói dối — giờ thì già một cách có thể chứng minh được. Tính xác thực đến từ chữ ký nói ai; sự thật đến từ thế giới. Dấu thời gian chỉ luôn nói về khi nào.

Phạm vi của một dấu thời gian dừng lại đúng nơi mô hình niềm tin của nó dừng lại. Nó chứng minh một cận trên về tuổi, và chỉ thế thôi, và chỉ khi bạn tin tổ chức đã niêm phong nó.

Có hai cấp tổ chức đáng phân biệt. Một TSA được tin cậy công khai chuỗi về một chứng chỉ mà phần mềm của bạn đã chấp nhận sẵn; các token của nó có thể xác minh rộng rãi và phù hợp cho hầu hết hồ sơ. Một TSA đủ điều kiện theo eIDAS là một nhà cung cấp được giám sát trên một danh sách tin cậy của EU, và một dấu thời gian điện tử đủ điều kiện mang theo một giả định pháp lý về sự chính xác của ngày tháng và tính toàn vẹn của dữ liệu — một giả định mà một dấu thời gian thông thường không có (Spec: eIDAS, Art. 41). Chọn giữa hai cấp là một câu hỏi về trọng lượng chứng cứ mà bạn cần, không phải về cách các byte hoạt động; mật mã học thì giống nhau.

Một dấu thời gian cũng thừa hưởng tuổi thọ của chính các neo tin cậy của nó. Chứng chỉ của TSA có thể hết hạn hoặc bị thu hồi, và thuật toán hash mà nó dùng có thể cũ đi. Đó chính là lý do các tài liệu sống lâu không đóng dấu thời gian một lần rồi bỏ đi — chúng làm mới, xếp một dấu thời gian tài liệu mới lên trên bằng chứng cũ trước khi bằng chứng cũ yếu đi. Vòng lặp làm mới đó là một chủ đề riêng; xem Xác thực dài hạn.

RFC 3161 trusted timestamping (signature and document timestamps) — edition availability
EditionAvailability
Core

Hỗ trợ PAdES B-BB-T. B-B là chữ ký cơ sở không có dấu thời gian; B-T yêu cầu và nhúng một dấu thời gian chữ ký RFC 3161 đã được xác minh, đối với một TSA do bên triển khai cung cấp mà bạn chọn đồng hồ của nó.

Pro

Bổ sung dữ liệu xác thực dài hạn được nhúng (chứng chỉ, OCSP, CRL) mà B-LT cần để giữ một chữ ký vẫn xác minh được sau khi các chứng chỉ của nó hết hạn.

Enterprise

Bổ sung vòng lặp làm mới B-LTA, niêm phong dữ liệu xác thực dưới một dấu thời gian tài liệu mới và đóng dấu lại trước khi mức bảo vệ yếu đi.

  • Time-Stamp Authority (TSA) — một dịch vụ độc lập phát hành các token dấu thời gian đã ký. Bạn tin đồng hồ của nó chính vì nó không phải của bạn.
  • Time-stamp token — đối tượng nhỏ đã ký mà một TSA trả về, gắn một hash của dữ liệu của bạn với một giá trị thời gian (Spec: RFC 3161, §2.1).
  • Hash (message imprint) — một dấu vân tay một chiều ngắn của dữ liệu. TSA ký cái này, không bao giờ ký chính dữ liệu, nên nội dung của bạn vẫn riêng tư.
  • Nonce — một số ngẫu nhiên mới được gửi cùng yêu cầu và được lặp lại nguyên vẹn trong phản hồi, cho thấy token tương ứng với yêu cầu cụ thể đó và không phải là một phản hồi cũ được phát lại (nó chứng thực tính tươi mới, không phải danh tính của bên yêu cầu).
  • Cận trên — điều mà một dấu thời gian thiết lập: dữ liệu đã tồn tại không muộn hơn khoảnh khắc được nêu. Không bao giờ là một thời điểm tạo ra chính xác.
  • Dấu thời gian đủ điều kiện theo eIDAS — một dấu thời gian từ một nhà cung cấp EU được giám sát, mang theo một giả định pháp lý về sự chính xác của ngày tháng và tính toàn vẹn của dữ liệu.
  • Dấu thời gian tài liệu — một dấu thời gian trên toàn bộ một tệp PDF, dùng để neo và làm mới bằng chứng xác thực dài hạn (Spec: ISO 32000-2, §12.8.5).