2014-01-27 21 views
3

을 사용하여 RFC 3161 타임 스탬프를 작성하는 방법 X509 인증서 (개인 키 포함) 및 RFC 3161을 기반으로하는 자체 PDF 타임 스탬프 메커니즘을 구현해야합니다. TSAClient 클래스를 다시 구현하여 우리를 위해 로컬 타임 스탬프를 수행합니다 (온라인 TSA없이). 그러나 SecureBlackbox 구성 요소를 제외하고 RFC 3161의 구현을 찾지 못했습니다. Bouncy Castle 라이브러리에서 가능해야하지만 어떻게해야할지 모르겠다.Bouncy Castle

올바른 방향으로 안내해주세요.

답변

5

Bouncycastle 라이브러리를 사용하여 RFC3161 타임 스탬프 토큰을 생성 할 수 있습니다.

먼저 TimestampRequest를 만듭니다. 귀하의 경우에는 다이제스트 알고리즘과 다이제스트 값에 대한 래퍼입니다.

byte[] document = /* ... */ 
byte[] digest = MessageDigest.getInstance("SHA256").digest(document); 
TimeStampRequestGenerator tsReqGen = new TimeStampRequestGenerator(); 
TimeStampRequest tsReq = tsReqGen.generate(CMSAlgorithm.SHA256, digest); 

그런 다음 토큰

DigestCalculator dgCalc = new JcaDigestCalculatorProviderBuilder().build(); 
ContentSigner signer = new JcaContentSignerBuilder().build(getPrivateKey()); 
SignerInfoGenerator siGen = new JcaSignerInfoGeneratorBuilder(new JcaDigestCalculatorProviderBuilder()).build(signer, getCertificate()); 
ASN1ObjectIdentifier policy = new ASN1ObjectIdentifier("1.2.3.4.5.6"); // Replace by your timestamping policy OID 
TimeStampTokenGenerator tstGen = new TimeStampTokenGenerator(siGen, dgCalc, policy); 
/* Set the parameters e.g. set the accuracy or include the signing certificate */ 
TimeStampToken tst = tstGen.generate(tsReq, generateSerialNumber(), new Date()); 
byte[] encoding = tst.getEncoded(); 
을 생성