ข้ามไปยังเนื้อหา
getnextpdf.com

ไทม์สแตมป์และเวลาที่เชื่อถือได้

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

ไทม์สแตมป์ไม่ได้บันทึกว่า “สิ่งนี้ถูกลงนามเมื่อใด” แต่พิสูจน์เรื่องที่แคบกว่าและหนักแน่นกว่า นั่นคือข้อมูลชิ้นหนึ่งๆ มีอยู่ก่อน ช่วงเวลาหนึ่งๆที่ระบุไว้ โดยมีฝ่ายที่ไม่ใช่ผู้ลงนามเป็นผู้รับรอง ความแตกต่างนี้คือคุณค่าทั้งหมดของเวลาที่เชื่อถือได้ และเป็นจุดที่มักถูกเข้าใจผิด

เวลาลงนามที่อยู่ภายในลายเซ็นเป็นเพียงสิ่งที่คอมพิวเตอร์ของผู้ลงนามกล่าวอ้าง นาฬิกาอาจคลาดเคลื่อนได้ทั้งโดยไม่ตั้งใจหรือจงใจ หากหลักฐานเดียวของ เมื่อใด คือคำยืนยันจากผู้ลงนามเอง ผู้ลงนามย่อมระบุวันที่ของเอกสารให้เร็วหรือช้ากว่าความจริงได้ตามใจ ใบรับรองที่ถูกเพิกถอนไปเมื่อวานนี้อาจถูกทำให้ดูเหมือนลงนามไว้ตั้งแต่ปีที่แล้ว “เมื่อใด” จึงไม่ใช่รายละเอียดปลีกย่อย เพราะเป็นตัวตัดสินว่าลายเซ็นที่สร้างด้วยใบรับรองซึ่งตอนนี้หมดอายุหรือถูกเพิกถอนไปแล้ว ยังควรถือว่ามีผลอยู่หรือไม่ และหากเวลาที่เชื่อถือได้ผิดพลาด ข้อโต้แย้งเรื่องความสมบูรณ์ระยะยาวทั้งหมดที่วางอยู่บนรากฐานนั้นก็จะพังลง

  • เวลาลงนามที่ผู้ลงนามระบุเองเป็น คำกล่าวอ้าง ไม่ใช่หลักฐาน และปลอมแปลงได้ง่ายอย่างยิ่ง
  • ส่วน ไทม์สแตมป์ RFC 3161 คือโทเค็นที่ลงนามแล้วจากผู้ออกไทม์สแตมป์ (Time-Stamp Authority, TSA) ซึ่งผูก แฮชของข้อมูลของคุณ เข้ากับ เวลาของ TSA
  • สิ่งที่พิสูจน์ได้นั้นเจาะจง คือ ข้อมูลมีอยู่ก่อนเวลาที่ TSA ระบุไว้ ไม่ใช่เวลาที่ข้อมูลถูกสร้างขึ้นอย่างแม่นยำ แต่เป็นขอบเขตบน
  • โทเค็นสะท้อน nonce และ message imprint ของคุณกลับมา จึงไม่อาจเป็นโทเค็นที่เล่นซ้ำหรือเป็นของข้อมูลอื่นได้
  • ส่วน ไทม์สแตมป์ของเอกสาร ใช้กลไกเดียวกันกับ ทั้งไฟล์ PDF โดยยึดทุกสิ่งที่อยู่ภายใต้ไทม์สแตมป์นั้น ทั้งลายเซ็นและหลักฐานการตรวจสอบความถูกต้องที่ฝังอยู่ เข้ากับช่วงเวลาที่เชื่อถือได้

NextPDF ถือว่าไทม์สแตมป์เป็นสิ่งที่ต้อง ตรวจสอบยืนยัน ไม่ใช่เพียงสิ่งที่ต้องได้มา การร้องขอโทเค็นเป็นเพียงส่วนเล็กของงานทั้งหมด จุดยืนของเอนจินคือโทเค็นที่ยังไม่ได้ตรวจสอบยืนยันไม่ถือเป็นหลักฐาน

เมื่อเอนจินประทับไทม์สแตมป์บนลายเซ็น เอนจินจะส่งแฮชของข้อมูลและ nonce แบบสุ่มที่สร้างขึ้นใหม่ไปยัง TSA โดยไม่ส่งตัวข้อมูลเองเลย จากนั้นจะตรวจสอบโทเค็นที่ส่งกลับมาเทียบกับคุณสมบัติครบชุดที่ทำให้โทเค็นนั้นมีความหมาย ได้แก่ สถานะของผู้ออกเป็น “granted” ค่า nonce ในโทเค็นตรงกับค่าที่ส่งไป ค่า message imprint ในโทเค็นตรงกับแฮชที่ส่งไป ลายเซ็นเชิงเข้ารหัสลับของโทเค็นตรวจสอบผ่าน ชนิดเนื้อหาของโทเค็นเป็นชนิดไทม์สแตมป์ และเวลาที่ระบุอยู่ภายในค่าความคลาดเคลื่อนที่ยอมรับได้ ความคลาดเคลื่อนใดๆถือเป็นความล้มเหลวขั้นเด็ดขาด พร้อมเหตุผลที่ระบุชนิดไว้ ไม่มีเส้นทางแบบ “ดูใกล้เคียงพอแล้ว” ไทม์สแตมป์ของเอกสารใช้กฎเดียวกัน แต่ใช้กับทั้งไฟล์แทนค่าของลายเซ็นเพียงรายการเดียว

ทั้งสองด้านสมมาตรกันโดยตั้งใจ เมื่อเอนจินประทับไทม์สแตมป์บน ลายเซ็น ค่า imprint ที่ส่งไปยัง TSA คือแฮชของค่าลายเซ็นของผู้ลงนาม และเมื่อเอนจินตรวจสอบยืนยันไทม์สแตมป์นั้นในภายหลัง เอนจินจะคำนวณแฮชเดียวกันนั้นใหม่และกำหนดให้ค่า imprint ในโทเค็นต้องตรงกัน NextPDF เปิดให้ใช้ครึ่งฝั่งการตรวจสอบยืนยันผ่านขั้นตอนเฉพาะที่ชื่อ verifySignatureTimestamp ซึ่งรับค่าลายเซ็นเป็นอินพุตที่จำเป็น ดังนั้นไทม์สแตมป์ของลายเซ็นจึงไม่มีทางถูก “ตรวจสอบยืนยัน” ได้โดยไม่ได้ตรวจสอบสิ่งที่มันครอบคลุมจริงๆ ขั้นตอนนี้จะล้มเหลวแบบปิดตาย (fail closed) เมื่อได้รับอินพุตว่างเปล่า อัลกอริทึม imprint ที่ไม่รู้จักหรืออ่อนแอ (SHA-1) ค่า imprint ที่มีรูปแบบผิดพลาด หรือแฮชที่ไม่ผูกกับค่าลายเซ็น ด้วยเหตุนี้ โทเค็นที่สร้างโดยเอนจินเวอร์ชันที่แฮชอินพุตต่างออกไปจึงไม่สามารถพิสูจน์การผูกได้ ตามที่ออกแบบไว้

  1. Hash the dataOnly a digest of the signature value (or the whole PDF, for a document timestamp) is computed — never the data itself.
  2. Send hash + nonceThe digest and a fresh random nonce go to the Time-Stamp Authority.
  3. TSA returns a tokenA signed token binds the digest to the TSA’s genTime and echoes the nonce.
  4. Verify the tokenStatus granted, nonce matches, message imprint matches, token signature verifies, time within tolerance.
  5. Conclude an upper boundThe data provably existed before the TSA’s stated time — attested by a party that is not the signer.
การได้มาซึ่งไทม์สแตมป์ที่เชื่อถือได้และสิ่งที่ไทม์สแตมป์พิสูจน์ได้ คือ มีการส่งแฮชพร้อมกับ nonce ไปยัง TSA จากนั้น TSA จะส่งโทเค็นที่ลงนามแล้วซึ่งผูกแฮชนั้นเข้ากับเวลาของตนกลับมา และผู้ตรวจสอบจะยืนยันการผูกนั้นก่อนถือว่าเป็นหลักฐานว่าข้อมูลมีอยู่ก่อนเวลานั้น

คุณไม่ต้องประกอบโทเค็นไทม์สแตมป์ด้วยตนเอง สิ่งสำคัญคือขอบเขตความเชื่อถือ TSA เป็นสิ่งที่คุณต้อง กำหนดค่าและปกป้อง เพราะเวลาของ TSA จะกลายเป็นหลักฐานของคุณ

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

ขอบเขตสำคัญคือเอนจินส่ง แฮช ไม่ใช่ตัวเอกสาร TSA จึงไม่เคยเห็นเนื้อหาของคุณ และเอนจินจะตรวจสอบยืนยันการตอบกลับนั้น TSA ที่คุณไม่สามารถพิสูจน์ตัวตนได้ไม่ใช่เวลาที่เชื่อถือได้ เป็นเพียงนาฬิกาอีกเรือนหนึ่งเท่านั้น

กับดักคือการตีความไทม์สแตมป์ว่า “สิ่งนี้ถูกลงนามเมื่อเวลา 14:32 น. พอดีในวันที่นี้” ไทม์สแตมป์ไม่ใช่นาฬิกาจับเวลาของเหตุการณ์การลงนาม แต่พิสูจน์ว่าข้อมูลมีอยู่ ไม่ช้ากว่า เวลาของ TSA ซึ่งเป็นขอบเขตบนที่บุคคลที่สามกำหนด ข้อมูลอาจถูกสร้างขึ้นเมื่อใดก็ได้ก่อนหน้านั้น กับดักที่สองคือการสมมติว่าเซิร์ฟเวอร์ไทม์สแตมป์ใดๆก็ให้เวลาที่เชื่อถือได้แก่คุณ โทเค็นที่คุณตรวจสอบลายเซ็นไม่ได้ หรือคุณไม่เชื่อถือผู้ออก ไม่ได้พิสูจน์สิ่งใดเลย เป็นเพียงนาฬิกาที่คุณไม่มีเหตุผลให้เชื่อถือ เวลาที่เชื่อถือได้มาจาก TSA ที่คุณพิสูจน์ตัวตนได้ และ โทเค็นที่คุณตรวจสอบยืนยันแล้ว ไม่ใช่จากการขอตัวเลขจากเซิร์ฟเวอร์

NextPDF สร้างคำขอ ส่งเฉพาะแฮช และตรวจสอบยืนยันโทเค็นที่ส่งกลับมา แต่ไม่ได้รับประกันผู้ออกที่อยู่เบื้องหลัง ความแม่นยำของ TSA ความสมบูรณ์ของใบรับรองของ TSA เอง และความน่าเชื่อถือของ TSA เป็นคุณสมบัติของบริการและการกำหนดค่าในการนำไปใช้งานของคุณ ไม่ใช่ของเอนจิน ไทม์สแตมป์ผูก แฮช เข้ากับ เวลา แต่ไม่ได้บอกอะไรเกี่ยวกับความหมายของข้อมูล ตัวตนของผู้ลงนาม หรือว่าใบรับรองของผู้ลงนามสมบูรณ์หรือไม่ สิ่งเหล่านั้นเป็นการตรวจสอบแยกต่างหากซึ่งกล่าวถึงใน การตรวจสอบลายเซ็นอย่างถูกต้อง เอนจินไม่สามารถทำให้ TSA ที่ไม่น่าเชื่อถือกลายเป็นน่าเชื่อถือได้ หน้านี้ยังไม่ได้รับรองน้ำหนักทางกฎหมายเฉพาะใดๆสำหรับไทม์สแตมป์ เรื่องนั้นขึ้นอยู่กับสถานะของ TSA และเขตอำนาจศาล วิธีนำเวลาที่เชื่อถือได้กลับมาใช้ซ้ำเพื่อให้ลายเซ็นตรวจสอบยืนยันได้ตลอดหลายทศวรรษนั้นกล่าวถึงใน การตรวจสอบความถูกต้องระยะยาว ด้วย

ความพร้อมใช้งานของการประทับไทม์สแตมป์ตามระดับชั้น:

การประทับไทม์สแตมป์ RFC 3161 (ไทม์สแตมป์ของลายเซ็นและไทม์สแตมป์ของเอกสาร) — edition availability
EditionAvailability
CoreNot in this edition
Pro

PAdES B-T — ไทม์สแตมป์ RFC 3161 ที่ตรวจสอบยืนยันแล้วบนค่าลายเซ็น โดยตรวจสอบกับ TSA ที่การนำไปใช้งานจัดหาให้

Enterprise

เพิ่มไทม์สแตมป์ของเอกสารที่ B-LT และ B-LTA ใช้ เพื่อยึดหลักฐานการตรวจสอบ ความถูกต้องที่ฝังอยู่ และขับเคลื่อนรอบการต่ออายุสำหรับการจัดเก็บถาวร

  • ไทม์สแตมป์ (RFC 3161) — โทเค็นที่ลงนามแล้วจาก TSA ซึ่งผูกแฮชของข้อมูลเข้ากับเวลาของ TSA และพิสูจน์ว่าข้อมูลมีอยู่ก่อนเวลานั้น
  • ผู้ออกไทม์สแตมป์ (Time-Stamp Authority, TSA) — บริการที่เชื่อถือได้ซึ่งออกโทเค็นไทม์สแตมป์
  • TSTInfo — โครงสร้างเนื้อหาของโทเค็น ประกอบด้วย message imprint เวลาที่สร้าง หมายเลขลำดับ และ nonce ที่เป็นทางเลือก
  • Message imprint — แฮชของข้อมูลที่ถูกประทับไทม์สแตมป์ ซึ่งสะท้อนกลับมาในโทเค็น
  • Nonce — ค่าสุ่มที่สร้างขึ้นใหม่ซึ่งส่งไปพร้อมกับคำขอและสะท้อนกลับมาในโทเค็น เพื่อให้การตอบกลับไม่อาจเป็นการเล่นซ้ำได้
  • ไทม์สแตมป์ของเอกสาร — ไทม์สแตมป์ RFC 3161 ที่ครอบคลุมทั้งไฟล์ PDF (ตามที่ปรับปรุงโดย RFC 5816) โดยยึดลายเซ็นและหลักฐานประกอบลายเซ็นเข้ากับช่วงเวลาที่เชื่อถือได้