TSA에대해 알아보게 된 계기는?

금융업계(증권) 파견을 나가있는 곳에서 TSA를 구현하라는 요건을 받고 구현을 하였습니다.

여기서 TSA를 구현하라고 하게 된 이유는 유저의 민감한 정보가 담긴 PDF 파일을 시점확인과 진본성을 확인하기 위해서였습니다.

전부 제가 구현한 것은 아니지만 코스콤이라는 기관에 토큰값을 받아오는 부분을 어느정도 구현했습니다.

그 후에 받아온 토큰값을 통해 OpenPdfHelper라는 라이브러리를 통해 PDF에 타임스탬프를 찍는 것을 다른 팀원분이 구현했습니다.

 

근데 여기서 TSA가 무엇인지 좀 더 알아보고 싶어서 검색을 하고 이렇게 정리하게 되었습니다.

* 구현에 활용된 언어는 자바(Java)입니다.

 

TSA란?

TSA는 타임스탬프를 발행하는 기관을 말하며, 대부분의 공인인증기관에서 서비스 하고 있습니다.

타임스탬프는 전자서명의 일부로 전자문서에 대해 제3의 신뢰할 수 있는 기관(TPP: Trusted Third Party)에서 발급함으로써,

서명한 시점을 증명할 수 있는 기술입니다.

따라서 전자문서가 특정 시점 존재하였고 그 이후에 변경되지 않았음을 증명해 주는 목적으로 사용되고 있습니다.

 

 

 

 

구현을 하면서 느낀점

제가 맡은 파트가 적어서 그런건지 엄청나게 어렵지는 않았습니다.

아무래도 토큰을 인증된 기관에서 만들어 주고 해당 토큰을 PDF에 세팅만 하면 되는 부분이기 때문에 그런것 같습니다.

우선 토큰을 만들어 주는 기관을 그 토큰을 어떻게 사용할지에 대한 규정은 따로 없었고 그 토큰을 받아 구현하는 측에서 

규정을 정한다는 것을 알게되었습니다.

(위 부분은 직접 코스콤에 전화해서 알게된 사실입니다.)

하지만 대부분은 솔루션을 사용해서 타임스탬프를 찍는 것을 구현 한다는 것도 알게되었습니다.

부득이하게 직접 구현하게 되었지만 민감한 정보가 담긴 PDF를 어떻게 보안을 구현하면서 많은 것을 배웠습니다.

 

종이문서에 직접 작성하는 것은 하나의 문서만 남게 되어 위조 문제가 조금 줄어들지만,

온라인상에 작성된 문서는 종이로 작성된 문서보다 위조가 쉽습니다.

그래서 문서에 다양한 검증 방법을 위해 타임스탬프, 서명을 집어넣습니다.

 

 

 

 

구현하는데 도움을 준 사이트 및 예제코드들

http://clipsoft.co.kr/wp/blog/tsa-%EB%9E%80/

 

TSA 란 ? - CLIPSOFT

작성: 손현성 이사 1. TSA 정의 TSA (Time-Stamping Authority)는 타임스탬프를 발행하는 기관을 말하며, 대부분의 공인인증기관에서 서비스 하고 있습니다. (시점 확인 서비스 기관 라고도 함) 타임스탬

clipsoft.co.kr

 

https://www.tabnine.com/code/java/methods/org.bouncycastle.asn1.cms.SignerInfo/getEncryptedDigest

 

org.bouncycastle.asn1.cms.SignerInfo.getEncryptedDigest java code examples | Tabnine

SignerInformation signerInformation = sigData.getSignerInfos().getSigners().iterator().next(); return signerInformation.toASN1Structure().getEncryptedDigest().getOctets();

www.tabnine.com

 

 

https://java.hotexamples.com/examples/org.bouncycastle.asn1/ASN1OctetString/-/java-asn1octetstring-class-examples.html

 

Java ASN1OctetString Examples, org.bouncycastle.asn1.ASN1OctetString Java Examples - HotExamples

 

java.hotexamples.com

 

 

https://programtalk.com/java-api-usage-examples/org.bouncycastle.asn1.ASN1Set/

 

org.bouncycastle.asn1.ASN1Set Example

Java code examples for org.bouncycastle.asn1.ASN1Set. Learn how to use java api org.bouncycastle.asn1.ASN1Set

programtalk.com

 

 

http://www.java2s.com/example/java-api/org/bouncycastle/tsp/timestamptoken/timestamptoken-1-2.html

 

Example usage for org.bouncycastle.tsp TimeStampToken TimeStampToken

Example usage for org.bouncycastle.tsp TimeStampToken TimeStampToken List of usage examples for org.bouncycastle.tsp TimeStampToken TimeStampToken HOMEJavaorg.bouncycastleorg.bouncycastle.tsp.*TimeStampTokenTimeStampToken

www.java2s.com

 

 

https://www.tabnine.com/code/java/packages/org.bouncycastle.tsp

 

org.bouncycastle.tsp java code examples | Tabnine

TimeStampRequestGenerator requestGenerator = new TimeStampRequestGenerator();... requestGenerator.setCertReq(true);... requestGenerator.setReqPolicy(new ASN1ObjectIdentifier(requestPolicy));

www.tabnine.com

 

 

 

 

 

구현에 가장 큰 도움을 준 깃헙 링크

https://github.com/fzilic/tsp-client

 

GitHub - fzilic/tsp-client: TSA TimeStamp Client

TSA TimeStamp Client. Contribute to fzilic/tsp-client development by creating an account on GitHub.

github.com

 

반응형

+ Recent posts