2013-08-08 2 views
1

개인 키로 서명 한 데이터가 있습니다. 이제 어떻게 서명 된 초기 데이터를 얻을 수 있습니까? Bouncy Castle을 사용하여 많은 예제를 살펴 보았지만 주로 일부 데이터가 올바른 개인 키로 서명되었는지 확인하기위한 것이 었습니다.개인 키로 서명 한 데이터 생성

CMSSignedData s = new CMSSignedData(new CMSProcessableByteArray(toverify.getBytes()),contents); 
SignerInformationStore signers = s.getSignerInfos(); 
SignerInformation signerInfo = (SignerInformation)signers.getSigners().iterator().next(); 
boolean result = signerInfo.verify(new JcaSimpleSignerInfoVerifierBuilder().setProvider("BC").build(cert.getPublicKey())); 

CMSSignedData 객체 개의 파라미터 취 -

1.toverify을 -이

획득 서명 데이터이다 - 이것은

2.contents 서명 된 샘플 스트링은 문제는 나에게 '콘텐츠'만 있다는 것입니다. 서명 검증을 위해 'toverify'부분을 생성해야합니다.

어떻게 'toverify'문자열을 생성합니까?

+0

당신이 묻는 것은 "원래 데이터를 해시로부터 어떻게 얻을 수 있습니까?"와 본질적으로 같습니다. 서명은 내용을 확인하기 위해 설계된 것입니다 (심지어 코드가 해당 내용을 나타낼지라도). – deed02392

+0

@ deed02392 잘 모르겠습니다. 나는 전문가는 아니지만 표면에 나는 "서명 된 데이터"(내용)가 원본과 서명을 모두 가질 것으로 기대합니다. 내 생각에이 가정이 사실이라면이 질문은 "서명 된 데이터"를 구문 분석하는 방법에 관한 것입니다. –

답변

3

서명에서 데이터를 복구 할 수 없습니다. 서명은 작은 데이터 조각으로, 주어진 서명 체계, 키 및 표현에 대해 항상 동일한 크기입니다. 서명과 공개 키가있는 경우 서명이 해당 개인 키에 의해 생성되었는지 확인할 수 있지만 해당 정보만으로는 거의 유용하지 않습니다. 일반적으로 서명을 확인하는 요점은 일부 데이터가 진짜임을 확인하는 것입니다. 유효성을 검사하는 데이터가 필요합니다!

0

서명 확인을 위해 'toverify'부분을 생성해야합니다.

아니요. 서명과 공개 키를 함께 제공해야합니다. 그렇지 않으면 전체 프로세스가 무의미합니다. 서명은 서명하는 데이터가 없으면 의미가 없습니다. 어떤 경우에도 서명에서 데이터를 복구 할 수 없습니다. 그것은 암호화가 아닙니다.

0

는이 작업을 수행하는 하나 개의 방법이있다, 나는 방법을 설명합니다 :

  1. 이 (공개 키를 구성하는) 공개 지수 및 계수
  2. 는 검색을 사용하여 원시 모듈러 지수를 수행 서명 데이터의 일부로 사용 된 해시 값
  3. 지금 무력 무력이 너무 복잡 t는

경우, 지정된 해시에 대해 가능한 모든 값을 시도하여 일반 텍스트 암탉 당신은 운이 없어. (편도) 해시는 서명 체계에 없어서는 안될 부분이며, 으로 디자인되어 이름에서 알 수 있듯이 되돌릴 수 있습니다.

(부분적인) 메시지 복구를 제공하는 RSA의 표준이 있습니다. ISO 9796 파트 1은 보안 문제로 인해 철회되었습니다. 요즘에는 낮은 오버 헤드로 서명을 원할 경우 ECC 서명을 대신 사용하는 것이 좋습니다.

관련 문제