TimeStampToken(TST)
TSR(TimeStampResp)에서 제일 중요한 것은 TimeStampToken 이다.
이 값은 "시간 문자열"이 아닌 TSA가 서명해서 주는 토큰이다.
TimeStampToken은 CMS 구조
RFC3161에서 TimeStampToken은 CMS(SignedData) 컨테이너 구조를 만든다고 설명한다.
즉, 토큰 안에는 보통 다음과 같은 것들을 포함한다.
- 서명(Signature)
- 서명자(SignerInfo)
- (옵션) 인증서(Cerificates)
- 본문 데이터(TSTInfo)
TSTInfo
TSTInfo는 TimeStampToken의 본문이다.
RFC3161 기준으로 TSTInfo가 DER 인코딩되어 SignedData의 eContent로 들어간다.
또한 토큰에는 TSA 서명 외에 다른 서명이 들어가면 안된다고 명시한다.
TSTInfo 주요필드
1. policy
- 어떤 정책(OID)로 발급했는지
- 요청에 reqPolicy가 있었다면, 응답 policy도 같아야 한다.(다를 시 unacceptedPolicy)
2. messageImprint (중요)
- hashAlgorithm OID + hashedMessage(해시 값)
- 요청에서 보낸 messageImprint와 동일해야 한다.
3. SerialNumber
- TSA가 각 토큰에 부여하는 고유 번호
- 같은 TSA 기준으로 유일
4. genTime
- TSA가 토큰을 생성한 시간
- UTC 기반으로 표현
5. accuracy (optional)
- genTime의 정확도(오차 범위)
- 시간 범위(상한/하한) 계산 가능
6. ordering (default false)
- ordering이 true면, 같은 TSA에서 나온 토큰들을 genTime 기준으로 정렬 가능
7. nonce (optional, but 중요)
- 요청에 nonce가 있었으면 응답에도 반드시 존재해야 하고 같아야 한다.
8. tsa / extensions (optional)
- TSA 식별 정보(GeneralName)나 확장 필드가 들어올 수 있다.
certReq를 true로 주면 뭐가 달라지나?
요청에서 certReq를 true로 주면, 응답 SignedData의 certficates 영역에 TSA 인증서가 포함되어야 한다.
(포함됐다. != 신뢰된다. 신뢰 체인은 별도 정책/검증 필요)
정리
TimeStampToken(TST)은 "시간 값"이 아니라 서명된 토큰이다.
- TST는 CMS(SignedData) 구조
- 본문은 TSTInfo
- 검증에서 제일 중요한 건 messageImprint / nonce 일치 여부
참고
- RFC 3161 (TSTInfo 구조/필드/nonce 규칙 등)
- RFC 5652 (CMS 개요)
- RFC 5816 (RFC3161 업데이트: ESSCertIDv2, SHA-1 외 해시 허용)
'TSA' 카테고리의 다른 글
| [TSA] 전자서명에서 타임스탬프가 필요한 이유 (0) | 2026.01.21 |
|---|---|
| [TSA] TimeStampToken(TST) 검증 (0) | 2026.01.20 |
| [TSA] RFC 3161 TimeStamp 프로토콜 구조 (0) | 2026.01.12 |
| [TSA] TSA(Time-Stamp Authority)란? (0) | 2026.01.06 |
