2010-04-20 6 views
4

SHA1을 사용하여 토큰 개체에 서명하려고합니다. 보안 공급자로 bouncycastle을 사용하고 있습니다. 프로그램에서 서명 할 때마다이 오류가 발생합니다.Java (java.security)의 서명에 크기 제한이 있습니까?

java.security.SignatureException: java.lang.IllegalArgumentException: input data too large. 

무언가를 서명하기위한 최대 크기는 무엇입니까? 이 개체에 어떻게 서명 할 수 있는지에 대한 제안 사항이 있습니까?

+0

당신은 어떤 수업을 듣고 있습니까? 당신의 물건은 어떤 크기입니까? –

답변

5

입력 크기는 키 크기로 제한됩니다. 1024 비트 키를 사용하면 128 바이트로 제한됩니다.

일반적으로 실제 데이터가 아닌 다이제스트 (해시 값)에 서명하고 있습니다.

+0

문서화 된 부분은 어디입니까? (크기 제한) – Jus12

+1

@ Just12, 문서 ftp://ftp.rsasecurity.com/pub/pkcs/pkcs-1/pkcs-1v2-1.pdf, 페이지 30, 섹션 8.2.1. '서명, 길이 k의 옥텟 스트링, 여기서 k는 RSA 모듈 n의 옥텟 단위의 길이이다. 또한 탄력 성 FAQ에. http://www.bouncycastle.org/wiki/display/JA1/Frequently+Asked+Questions –

1

오류를 수정하려면 더 큰 키 크기를 사용해야합니다. 예를 들어, SHA 512 비트가 선택되면 키는 1024 비트 일 수 있습니다. 그러나 같은 길이 (512) 또는 더 작은 길이의 키로 실패 할 것입니다.

BouncyCastle은 사용할 수없는 오류 메시지를 표시합니다. 그러나 표준 라이브러리는 제대로 작동합니다. 그것들을 비교해보십시오 :

// using a 512 bit key here 
// leads to this error message if Sun's standard provider is used 
Signature sig = Signature.getInstance("SHA512withRSA", "SunRsaSign"); 
rsa.initSign(privateKey); 
rsa.update(data); 
rsa.sign(); 

java.security.InvalidKeyException: Key is too short for this signature algorithm 
    at sun.security.rsa.RSASignature.initCommon(RSASignature.java:129) 
    at sun.security.rsa.RSASignature.engineInitSign(RSASignature.java:111) 
    at sun.security.rsa.RSASignature.engineInitSign(RSASignature.java:101) 
    at java.security.Signature$Delegate.engineInitSign(Signature.java:1127) 
    at java.security.Signature.initSign(Signature.java:511) 


// using a 512 bit key here 
// leads to this error message if the BounceCastle provider is used 
Signature sig = Signature.getInstance("SHA512withRSA", "BC"); 
    ... 

java.security.SignatureException: java.lang.IllegalArgumentException: input data too large 
    at org.bouncycastle.jce.provider.JDKDigestSignature.engineSign(Unknown Source) 
    at java.security.Signature$Delegate.engineSign(Signature.java:1160) 
    at java.security.Signature.sign(Signature.java:553) 
관련 문제