2014-09-15 4 views
0

서비스와 상호 운용하려면 Java의 최소 512 비트보다 작은 키 크기로 RSA를 사용하여 일부 값을 암호화해야합니다. 그 정책을 완화시킬 수있는 방법이 있습니까?Java 공개 키 크기

BigInteger e = new BigInteger("13082845549543033994073971762152947067", 10); 
BigInteger m = new BigInteger("229110545576645850236522690668306544921", 10); 

RSAPublicKeySpec spec = new RSAPublicKeySpec(m, e); 
KeyFactory keyFac = KeyFactory.getInstance("RSA"); 
PublicKey publicKey = keyFac.generatePublic(spec); 

// ^^^^ java.security.spec.InvalidKeySpecException: java.security.InvalidKeyException: RSA keys must be at least 512 bits long 
+1

에 선

KeyFactory keyFac = KeyFactory.getInstance("RSA"); 

java.security.Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider()); 

와 코드를 앞에 추가 및 변경 - RSA 512 비트가 이미 쉽게 깨질 것입니다 (참조 [this] (http://www.geek.com/news/512-bit-keys-cracked-in-6-weeks-549618/)), 그게 10 년 전 이었어. 이제는 아무데도 안 걸릴거야. 그 근처에서. 이러한 제한을 없애기 위해 많은 리플렉션을 사용하거나, 그런 일을 허용하는 다른 JVM을 찾거나 자신의 RSA 스위트를 구현할 수도 있지만, 그 중 어느 것도 근본적인 보안 문제를 해결할 수는 없습니다. – user2813274

+0

이 시스템과 상호 운용해야합니다. 자체 서명 키와 일치하지 않는 호스트 이름을 사용하여 설계가 잘못되었습니다. 그러나 프로그래머는해야 할 일을해야합니다. –

답변

0

BouncyCastle 공급자를 사용할 수 있습니다. 그냥 내가 이러한 노력의 점에 의문을 가지고

KeyFactory keyFac = KeyFactory.getInstance("RSA", "BC"); 
1

난 당신의 코드를 확인하신 후, 나는 다음과 같은 결과가 :

SunPKCS11-NSS RSA public key, 128 bits (id 1, session object) 
modulus: 229110545576645850236522690668306544921 
public exponent: 13082845549543033994073971762152947067 

예외가 정확히 발생합니까를?

+0

'generatePublic' 호출에서 발생합니다. 참고로 bitcount (e) : 64 bitcount (m) : 49 –

+0

@wingleader : bitcount는 흥미로운 수량이 아니며 bitLength는 0입니다. –