2017-02-28 14 views
2

Java Card 버전 2.2.1에서 RSA 서명을 구현하려고합니다. RSA 2048을 구현하고 성공적으로 테스트했지만 MessageDigest 클래스를 사용하여 해시를 시도 할 때 응답으로 올바른 답을 얻을 수 없습니다. 여기 Java Card 2.2.1에서 SHA256을 구현하는 방법은 무엇입니까?

내 코드입니다 :

MessageDigest md = MessageDigest.getInstance(MessageDigest.ALG_SHA, false); 
md.reset(); 
md.doFinal(toSign, bOffset, bLength, tempBuffer, (short) 0);` 

하지만 정확한 답변을 얻을하지 않습니다; ALG_SHA 또는 ALG_MD5에 대한 검색 결과가 없습니다.

나는 무엇이 문제인지 궁금합니다. 내가 본 모든 샘플은 동일한 방법과 매개 변수를 사용합니다.

+1

아무것도 확인하기 위해 전체 샘플 코드와 테스트가 필요합니다 ... –

+2

그 외에도 'MessageDigest.ALG_SHA'는 주제 헤드 라인에 제안 된대로 SHA256이 아닙니다. –

+2

[여기] (https : //www.fi.muni.cz/~xsvenda/jcalgtest/table.html)에서 RSA2048 및 SHA256을 모두 지원하는 카드 요약을 확인하십시오. SHA256을 지원하는 JC 2.2.1 카드는 '의심스러운 예'라고 표시됩니다 ... 행운을 비네! – vlp

답변

4

Java Card 2.2.1 사양은 SHA-256 (또는 다른 SHA-2 메시지 다이제스트)을 지원하지 않습니다. SHA1과 MD5, 두 가지 완전한 암호화 해시 함수 만 지원합니다. 따라서 MessageDigest.ALG_SHAMessageDigest.ALG_MD5도 SHA-256 해시 함수를 계산할 수있는 MessageDigest의 인스턴스를 가져올 수 없습니다.

Java Card 2.2.2 이상에서만 다양한 SHA2 기능을 지원합니다. 그 사양에서 MessageDigest 클래스는 지원 것

  • SHA-256 : MessageDigest.ALG_SHA_256,
  • SHA-384 : MessageDigest.ALG_SHA_384
  • SHA-512 : MessageDigest.ALG_SHA_512.

그렇다면 실제로 카드가 Java Card 2.2.2를 지원한다면 실제로 해당 상수를 사용하여 적절한 MessageDigest 개체를 얻을 수 있습니다.

자바 카드 2.2.2를 지원하지 않는 카드가, 다음, 물론, 당신이 그 상수를 사용할 수 없습니다 1해야 사용할 수없는 경우. SHA-256을 지원하는 MessageDigest의 독점적 인 구현을 지원한다면 여전히 카드 설명서를 확인할 수 있습니다. 겉으로 도입 SHA-2 알고리즘에 대한 상수를 사용하여 지원 아래 자바 카드 2.2.1 (또는있는 카드) 실제로 있다는 것을 지적 vlp



1은) 감사합니다 자바 카드 2.2.2 API. 이는 다른 구현 버그로 인해 발생할 수 있으며 이러한 알고리즘이 실제로 해당 카드에서 작동하는지 테스트 한 적이없는 것 같습니다. 이에 대한 결과는 JCAlgTest list을 참조하십시오.