2014-12-01 4 views
3

This 웹 사이트는 라이브러리를 사용하여 java에서 RSA를 구현하는 방법을 설명합니다. 공개 지수 e의 값을 제어 할 수 있습니까? Java는이를 65537로 설정합니다. 적절한 값이라는 것을 알고 있지만 여전히 라이브러리를 사용하면서 변경할 수 있습니까?RSA 공개 지수를 원하는 값으로 설정할 수 있습니까?

KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA"); 
kpg.initialize(2048); 
KeyPair kp = kpg.genKeyPair(); 
Key publicKey = kp.getPublic(); 
Key privateKey = kp.getPrivate(); 
KeyFactory fact = KeyFactory.getInstance("RSA"); 
RSAPublicKeySpec pub = fact.getKeySpec(kp.getPublic(), 
RSAPublicKeySpec.class); 
RSAPrivateKeySpec priv = fact.getKeySpec(kp.getPrivate(), 
RSAPrivateKeySpec.class); 

saveToFile("public.key", pub.getModulus(), 
pub.getPublicExponent()); 
saveToFile("private.key", priv.getModulus(), 
priv.getPrivateExponent()); 

답변

1

예, 당신이 할 수있는,하지만 당신은 (계수의 크기에 의해 제한) 소수임을 확신한다 :

이것은 그들이 그것을 구현하는 방법이다

KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA"); 
// 17 is another often used value, beware to use proper RSA padding if you set it to 3 
RSAKeyGenParameterSpec kpgSpec = new RSAKeyGenParameterSpec(2048, BigInteger.valueOf(3)); 
kpg.initialize(kpgSpec); 
KeyPair kp = kpg.genKeyPair(); 

키 생성 후에는 변경할 수 없습니다. 지수가 너무 큰 경우 (또는 많은 비트가 1로 설정된 경우) 공개 키 조작의 속도에 영향을 미칩니다. 65537 - 기본값 - 2 비트 만 1로 설정된 좋은 값입니다 (Fermat의 네 번째 숫자 또는 F4).

+1

또한 Microsoft의 이전 CAPI 제한 인 32 비트가 있습니다. 이는 .NET 소프트웨어와 상호 운용하려는 경우 중요합니다. –

+0

@GregS 내 머리 뒤쪽에 작은 빛이있어서 전에이 한계에 대해 들어 본 적이있다. 어쨌든 큰 지수는 필요 없지만 좋은 추가 정보. –