2013-06-16 3 views
4

이 diffie hellman 교환 예제를 수행 할 때 내 키가 동일하지 않은 이유를 알 수 없습니다. C (openssl/dh.h)에서 openssl 라이브러리를 사용하고 있습니다.왜 OpenSSL diffie hellman을 사용하여 키가 동일하지 않습니까?

아주 단순 해 보이지만 어떤 이유로 키가 동일하지 않습니다. 내가 뭘 놓치고 있니?

아이디어가 있으십니까? 감사!

void hexprint(unsigned char *printBuf, int len) 
    { 
     int i; 
     for(i = 0; i < len; i++) 
     { 
      printf("%x ", printBuf[i]); 
     } 
     printf("\n"); 
    } 

    int main(int argc, char *argv[]) 
    { 
     srand(time(NULL)); 
     DH *dh1; 
     DH *dh2; 
     unsigned char *dh_secret1; 
     unsigned char *dh_secret2; 
     dh1 = DH_generate_parameters(256, 2, NULL, NULL); 
     dh2 = DH_generate_parameters(256, 2, NULL, NULL); 

     DH_generate_key(dh1); 
     DH_generate_key(dh2); 

     dh_secret1 = malloc(DH_size(dh1)); 
     memset(dh_secret1, 0, DH_size(dh1)); 
     dh_secret2 = malloc(DH_size(dh2)); 
     memset(dh_secret2, 0, DH_size(dh2)); 

     DH_compute_key(dh_secret1, dh2->pub_key, dh1); 
     DH_compute_key(dh_secret2, dh1->pub_key, dh2); 

     printf("Secret Key 1: \n"); 
     hexprint(dh_secret1, 32); 
     printf("Secret Key 2: \n"); 
     hexprint(dh_secret2, 32); 

     free(dh_secret1); 
     free(dh_secret2); 
     DH_free(dh1); 
     DH_free(dh2); 
    } 

답변

5

DH에서 사용자는 동일한 매개 변수를 공유해야하기 때문에. DH_generate_parameters을 한 번만 수행하고 사용자간에 공유하십시오.

+0

일반적으로 교환을 수행해야합니다. 그러면 키 유도와 공개 키가 실제로 다른지 확인하는 검사가 수행됩니다. –