신뢰된 시간: 타임스탬프는 어떻게 '언제'를 증명하는가
Spec: RFC 3161RFC 3161Spec: RFC 5816RFC 5816Spec: ISO 32000-2, §12.8.5ISO 32000-2 §12.8.5
한눈에 보기
섹션 제목: “한눈에 보기”타임스탬프는 하나의, 의외로 미끄러운 질문에 답합니다: 이 데이터가 이미 존재했는가? 누가 만들었는지도 아니고, 그것이 올바른지도 아니라 — 오직, 어떤 명명된 순간에, 바로 이 정확한 바이트들이 이미 세상에 있었다는 것뿐입니다. 이 페이지는 그 개념을 바닥부터 쌓아 올립니다: 타임스탬프 기관이 하는 일, 토큰이 실제로 담고 있는 것, 그리고 왜 시계 위의 숫자 하나가 증거가 되는지.
이것은 엔진 중심의 Timestamps and trusted time에 대한 제일 원리 짝꿍입니다. “신뢰된 시간”이 전문 용어처럼 들린다면 이 글을 먼저 읽으십시오.
이것이 중요한 이유
섹션 제목: “이것이 중요한 이유”여러분 컴퓨터의 시계는 증거가 아니라 자백입니다. 여러분은 그것을 원하는 어떤 값으로든 설정할 수 있으며, 다른 누구라도 그렇게 할 수 있습니다. 어떤 날짜가 제이자에게 중요해지는 순간 — 마감 전에 서명되어야 했던 계약, 분쟁 전에 존재했어야 했던 기록 — 여러분 자신의 시계는 증거로서 가치가 없습니다. 여러분이 그것을 통제하기 때문입니다. 신뢰된 시간이라는 문제 전체는 여러분이 움직일 수 없는 시계를 찾는 것입니다.
이것은 틈새의 관심사가 아닙니다. 오래 사는 모든 서명된 PDF 가 그것에 기댑니다. 서명 인증서는 결국 만료됩니다; 몇 년 뒤, 검증자는 인증서가 여전히 유효한 동안 서명이 이루어졌는지를 알아야 합니다. “언제”에 대한 독립적인 기록이 없으면, 그 질문에는 정직한 답이 없습니다. 신뢰된 시간은 지속되는 서명이라는 건축물 전체가 의존하는 조용한 토대입니다.
짧은 요약
섹션 제목: “짧은 요약”- 타임스탬프는 한 조각의 데이터가 명시된 순간 이전에 존재했음을 증명합니다. 그것은 나이에 대한 상한이며, 그 이상은 아닙니다.
- 그것은 제삼자, 즉 **타임스탬프 기관(TSA)**이 생성하며, 여러분이 그 시계를 신뢰하는 것은 바로 그것이 여러분 것이 아니기 때문입니다.
- TSA 는 여러분의 데이터를 결코 보지 않습니다. 그것은 데이터의 해시를 시간 값에 묶어 서명하고, 작은 서명된 토큰을 반환합니다.
- 토큰은 세 가지를 함께 증명합니다: 데이터가 그 데이터라는 것(해시가 일치함), 시간이 TSA 의 시간이라는 것(그 서명), 그리고 응답이 여러분이 보낸 요청과 일치한다는 것(그것이 되돌려 보내는 논스로, 재생된 더 오래된 응답을 막아 줍니다).
- 그것은 누가 데이터를 썼는지, 데이터가 참인지, 또는 생성의 정확한 순간을 증명하지 않습니다. 오직: 이 시점보다 늦지 않았다는 것뿐입니다.
- 신뢰는 TSA 로 흘러갑니다. 공개적으로 신뢰되는 TSA 는 대부분의 기록에 충분합니다; eIDAS 적격 TSA 는 EU 에서 법적 추정을 동반합니다.
NextPDF 의 접근 방식
섹션 제목: “NextPDF 의 접근 방식”이 모든 것의 중심에 있는 묘책에서 시작합시다. 여러분은 낯선 사람이 언제 여러분의 데이터가 존재했는지를 보증해 주길 원하지만, 그에게 데이터를 보여 줄 수는 없습니다 — 그것은 기밀일 수 있고, 어쨌든 엄청나게 클 수 있습니다. 그래서 보여 주지 않습니다. 대신 해시를 계산합니다: 원본의 단 한 바이트만 바뀌어도 완전히 달라지고, 그것으로부터 원본을 복원할 수 없는, 짧고 고정 길이인 지문입니다. 파일이 아니라 그 지문을 보냅니다.
TSA 는 그 지문을 받아, 자신의 현재 시간을 붙이고, 자신의 개인 키로 그 쌍에 서명하여, 타임스탬프 토큰을 돌려줍니다 (Spec: RFC 3161, §2.1RFC 3161 §2.1). 토큰은 영구화된 묶음입니다: 이 지문이, 이 시간에, 내가 보증함. 토큰이 서명되어 있기 때문에, 누구도 — 나중에 TSA 자신조차도 — 서명을 깨뜨리지 않고는 시간을 바꿀 수 없습니다. 그것이 여러분의 지문을 담고 있기 때문에, 다른 어떤 파일에도 쓸모가 없습니다. 그리고 요청이 TSA 가 바꾸지 않고 되돌려 보내는 신선한 무작위 논스를 포함하기 때문에, 여러분은 응답이 바로 이 특정 요청에 대응하며 더 오래된 응답의 재생이 아님을 알 수 있습니다 — 논스는 누가 요청했는지가 아니라 신선함을 입증합니다 (Spec: RFC 3161, §2.4.2RFC 3161 §2.4.2).
접힌 편지 위에 눌러 찍은 봉랍 인장을 생각해 보십시오. 그 인장은 편지를 읽지 않습니다; 그저 인장이 찍힐 때 편지가 온전했고 그 자리에 있었음을 증명할 뿐입니다. 타임스탬프는 여러분이 소유하지 않은 시계가 여러분 데이터의 지문 위에 찍은 인장입니다.
- Fingerprint the dataCompute a one-way hash of the file or the signature value. The data itself never leaves your hands.
- Ask the authoritySend the hash and a fresh random nonce to the Time-Stamp Authority.
- The TSA seals a timeIt signs the hash bound to its own clock and echoes your nonce, producing a small signed token.
- Store the tokenFor a PDF, the token is placed inside the file so the proof travels with the document.
- 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.
PDF 안에서, 이 동일한 메커니즘은 두 개의 모자를 씁니다. 서명 타임스탬프는 서명의 값에 타임스탬프를 찍음으로써 서명이 적용된 시점을 봉인합니다. 문서 타임스탬프는 전체 PDF 를 해싱하여(토큰이 차지할 자리 표시자는 제외) 반환된 토큰을 그 자리 표시자에 되돌려 저장함으로써 파일 전체가 존재했던 시점을 봉인합니다 (Spec: ISO 32000-2, §12.8.5ISO 32000-2 §12.8.5). 두 번째 종류가 오래 사는 보존용 서명이 그 신뢰를 신선하게 유지하기 위해 수년에 걸쳐 갱신하는 것입니다.
알아 둘 만한 하나의 현대적 세부 사항: 더 오래된 타임스탬프 형식은 TSA 자신의 인증서를 명명하기 위해 하나의 해시 알고리즘에 자신을 고정시켰습니다. 갱신된 프로파일은 토큰이 대신 현재의 다이제스트로 자기 인증서를 명명하도록 허용하므로 (Spec: RFC 5816, §2.1RFC 5816 §2.1), 신뢰된 시간은 어제의 암호 기법을 조용히 물려받지 않습니다.
실전 예제
섹션 제목: “실전 예제”여러분은 토큰을 손으로 조립하지 않으며, 그러길 원해서도 안 됩니다. 이해할 가치가 있는 것은 신뢰의 이음매입니다: 여러분이 믿기로 선택하는 시계가 어느 것인지입니다. NextPDF 에서는, 신뢰된 시간을 필요로 하는 서명 레벨을 요청하는 것이 그 선택을 암묵적이 아니라 명시적으로 만듭니다.
<?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.이 예제의 요점은 API 가 아닙니다. 요점은 “나에게 신뢰된 시간이 있는가?”가 여러분 문서에 대한 예/아니오 사실이며, TSA 가 그 고리 안에 있었는지에 따라 결정된다는 것 — 그리고 엔진은 그 사실이 모호해지도록 내버려 두기를 거부한다는 것입니다.
흔한 오해
섹션 제목: “흔한 오해”함정은 타임스탬프를 *“이것은 14:32 에 생성되었다”*로 읽는 것입니다. 그것은 그런 말을 결코 하지 않습니다. 그것은 *“이것은 14:32 보다 늦지 않게 존재했다”*고 말합니다. 그 차이가 핵심 전체입니다. 타임스탬프는 상한이지, 결코 하한이 아니며 결코 정확한 순간이 아닙니다. 여러분의 데이터는 타임스탬프를 찍기까지 수년 동안 이미 존재했을 수도 있습니다; 토큰은 그에 대해 침묵합니다. 그것은 하나의 선을 긋고 말합니다: 여기보다 뒤는 아니다.
두 번째, 더 비싼 오해: 타임스탬프가 여러분 문서가 진본이거나 올바르다는 것을 증명한다는 것입니다. 그것은 둘 다 하지 않습니다. 그것은 의미에 무관심합니다. 완벽하게 타임스탬프된 거짓말은 여전히 거짓말입니다 — 다만 이제 증명 가능하게 오래된 것일 뿐입니다. 진정성은 누구인지를 말하는 서명에서 나옵니다; 진실은 세상에서 나옵니다. 타임스탬프는 언제나 오직 언제에 대해서만 말합니다.
한계와 경계
섹션 제목: “한계와 경계”타임스탬프의 범위는 정확히 그 신뢰 모델이 멈추는 곳에서 멈춥니다. 그것은 나이에 대한 상한을, 오직 그것만을, 그리고 오직 그것을 봉인한 기관을 여러분이 신뢰하는 경우에만 증명합니다.
구분할 가치가 있는 두 등급의 기관이 있습니다. 공개적으로 신뢰되는 TSA 는 여러분 소프트웨어가 이미 받아들이는 인증서로 이어집니다; 그 토큰은 널리 검증 가능하며 대부분의 기록에 적합합니다. eIDAS 적격 TSA 는 EU 신뢰 목록에 있는 감독 대상 제공자이며, 적격 전자 타임스탬프는 그 날짜의 정확성과 데이터의 무결성에 대한 법적 추정을 동반합니다 — 일반 타임스탬프에는 없는 추정입니다 (Spec: eIDAS, Art. 41eIDAS Art. 41). 그 둘 중에서 선택하는 것은 바이트가 어떻게 작동하는지가 아니라 여러분에게 필요한 증거적 무게에 대한 질문입니다; 암호 기법은 동일합니다.
타임스탬프는 또한 자기 자신의 신뢰 앵커의 수명을 물려받습니다. TSA 의 인증서는 만료되거나 폐기될 수 있고, 그것이 사용한 해시 알고리즘은 노후할 수 있습니다. 바로 그렇기 때문에 오래 사는 문서는 한 번 타임스탬프를 찍고 떠나 버리지 않습니다 — 그것들은 갱신하며, 오래된 증거가 약해지기 전에 새로운 문서 타임스탬프를 오래된 증거 위에 겹쳐 쌓습니다. 그 갱신 루프는 그 자체로 별개의 주제입니다; Long-term validation을 참고하십시오.
| Edition | Availability |
|---|---|
| Core | PAdES B-B 와 B-T 를 지원합니다. B-B 는 타임스탬프가 없는 기준선 서명입니다; B-T 는 여러분이 그 시계를 고르는, 배포가 제공한 TSA 에 대해 검증된 RFC 3161 서명 타임스탬프를 요청하고 임베드합니다. |
| Pro | B-LT 가 인증서 만료 후에도 서명을 검증 가능하게 유지하기 위해 필요로 하는, 임베드된 장기 검증 데이터(인증서, OCSP, CRL)를 추가합니다. |
| Enterprise | B-LTA 갱신 루프를 추가하여, 검증 데이터를 새로운 문서 타임스탬프 아래에 봉인하고 보호가 약해지기 전에 다시 스탬프를 찍습니다. |
관련 문서
섹션 제목: “관련 문서”- Timestamps and trusted time — 엔진과 PAdES 레벨에서의 동일한 메커니즘을, 검증 규칙을 낱낱이 풀어서.
- Long-term validation — 문서 타임스탬프를 갱신하는 것이 어떻게 서명을 수년간 검증 가능하게 유지하는지.
- How a signature proves who signed — 이 페이지가 한쪽에 제쳐 둔 이야기의 “누구” 절반.
- Qualified signatures explained — “적격”이 무엇을 의미하는지, 그리고 왜 적격 TSA 가 법적 무게를 동반하는지.
용어집
섹션 제목: “용어집”- 타임스탬프 기관(Time-Stamp Authority, TSA) — 서명된 타임스탬프 토큰을 발급하는 독립 서비스. 여러분이 그 시계를 신뢰하는 것은 바로 그것이 여러분 것이 아니기 때문입니다.
- 타임스탬프 토큰(Time-stamp token) — TSA 가 반환하는 작은 서명된 객체로, 여러분 데이터의 해시를 시간 값에 묶습니다 (Spec: RFC 3161, §2.1RFC 3161 §2.1).
- 해시(메시지 임프린트)(Hash (message imprint)) — 데이터의 짧은 일방향 지문. TSA 는 데이터 자체가 아니라 이것에 서명하므로, 여러분의 콘텐츠는 비공개로 유지됩니다.
- 논스(Nonce) — 요청과 함께 보내고 응답에 바뀌지 않은 채 되돌려 보내는 신선한 무작위 숫자로, 토큰이 그 특정 요청에 대응하며 재생된 오래된 응답이 아님을 보여 줍니다(그것은 요청자의 신원이 아니라 신선함을 입증합니다).
- 상한(Upper bound) — 타임스탬프가 확립하는 것: 데이터가 명시된 순간 보다 늦지 않게 존재했다는 것. 결코 정확한 생성 순간이 아닙니다.
- eIDAS 적격 타임스탬프(eIDAS-qualified timestamp) — 날짜 정확성과 데이터 무결성에 대한 법적 추정을 동반하는, 감독 대상 EU 제공자의 타임스탬프.
- 문서 타임스탬프(Document timestamp) — 전체 PDF 파일에 대한 타임스탬프로, 장기 검증 증거를 앵커하고 갱신하는 데 쓰입니다 (Spec: ISO 32000-2, §12.8.5ISO 32000-2 §12.8.5).