2014-01-09 3 views
3

Diffie Hellman 키 교환 프로토콜을 구현하려고합니다. 잠시 동안 저는 공개 매개 변수 생성에 매달 렸습니다.
프로그램을 실행할 때마다 p 및 g 매개 변수가 동일합니다 (메서드 설명서에 "이 옵션이 호출 될 때마다 새 키 쌍이 생성됩니다").Diffie Hellman 공개 매개 변수가 모든 실행에서 동일한 이유는 무엇입니까?

누군가 나에게 여기에없는 것을 설명해 주시겠습니까?

KeyPairGenerator kpg; 
try 
{ 
    kpg = KeyPairGenerator.getInstance("DiffieHellman"); 
    kpg.initialize(512, new SecureRandom()); 
    KeyPair dkp = kpg.generateKeyPair(); 

    DHParameterSpec params = 
      ((javax.crypto.interfaces.DHPublicKey) dkp.getPublic()).getParams(); 
    BigInteger p = params.getP(); 
    BigInteger a = params.getG(); 
    System.out.println(p); 

} catch (Exception e) 
{ 
    e.printStackTrace(); 
} 
+0

Java 플랫폼의 구현은 1024 개 키 크기가되는 DiffieHellman를 구현해야합니다. 이것은 구현에서 실제로 차이가 없지만 1024의 키 크기로 초기화하고 어떤 일이 발생하는지 확인할 수 있습니까? 또한 초기화를 전혀 호출하지 않도록하십시오 (기본 초기화가 사용됩니다). – SirRichie

답변

3

명시 적으로 디피 - 헬만 교환에 대한 pg 값을 초기화하지 않는, 그래서 그들은 기본값으로 초기화되고 있습니다. 이 값들은 공개되어 있으므로 Exchange가 올바르게 작동하려면 양측이 공유해야합니다. 막 다른 골목을 만났지만 after the third SPI in the Sun JCE 매개 변수를 직접 설정하지 않았기 때문에 코드는 DSA에 사용되는 동일한 pg을 검색하여 DH에 적용합니다.

From the Javadoc

:

경우 명시 적으로 (init 메소드의 호출을 통해) AlgorithmParameterGenerator의를 초기화하지 않는 클라이언트는, 각 프로 바이더는 디폴트의 초기화를 제공 및 문서화 할 필요가 있습니다. 예를 들어, Sun 프로 바이더는 DSA 파라미터의 생성에 1024 비트의 기본 계수 프라임 크기를 사용합니다.

The documentation for the Sun implementation 목록 512 비트 키에 대해 다음 값 :

p = fca682ce 8e12caba 26efccf7 110e526d b078b05e decbcd1e b4a208f3 
    ae1617ae 01f35b91 a47e6df6 3413c5e1 2ed0899b cd132acd 50d99151 
    bdc43ee7 37592e17 
g = 678471b2 7a9cf44e e91a49c5 147db1a9 aaf244f0 5a434d64 86931d2d 
    14271b9e 35030b71 fd73da17 9069b32e 2935630e 1c206235 4d0da20a 
    6c416e50 be794ca4