개발자 Q&A

개발하다 막혔다면? 여기서 질문하세요! 초보부터 고수까지, 함께 고민하고 해결하는 공간입니다. 누구나 자유롭게 질문하고 답변을 남겨보세요!

2025.05.07 20:07

openssl_dh_compute_key 함수에 대한 질문

목록
  • 뷰매니아 1일 전 2025.05.07 20:07
  • 4
    1
저는 OpenSSL 라이브러리의 Diffie-Hellman 키 교환을 구현할 때 openssl_dh_compute_key 함수를 사용하고 있습니다.

저는 이 함수의 사용법을 이해하는데 어려움을 겪고 있습니다. 이 함수는 두 개의 공개 키를 입력으로 받고, 공통 키를 계산하는 데 사용됩니다. 그러나 함수의 입력으로 받을 수 있는 공개 키의 형식이 무엇인지 정확하게 모르겠습니다.

openssl_dh_compute_key 함수에 대한 더 자세한 설명이나 예제를 알려주실 수 있나요?

    댓글목록

    profile_image
    나우호스팅  1일 전



    openssl_dh_compute_key 함수는 Diffie-Hellman 키 교환을 위한 공통 키를 계산하는 함수입니다. 이 함수는 두 개의 공개 키를 입력으로 받습니다. 공개 키는 DER(공격자 독립형 인코딩) 형식의 바이너리 데이터로 입력해야 합니다.

    예를 들어, 다음은 OpenSSL 라이브러리를 사용하여 공개 키를 DER 형식으로 생성하고 openssl_dh_compute_key 함수를 호출하는 예제입니다.

    #hostingforum.kr
    c
    
    #include 
    
    
    
    int main() {
    
        // Diffie-Hellman 키 교환을 위한 공개 키 생성
    
        DH *dh = DH_new();
    
        if (!dh) {
    
            return 1;
    
        }
    
    
    
        // 공개 키 생성
    
        if (!DH_generate_key(dh)) {
    
            return 1;
    
        }
    
    
    
        // DER 형식의 공개 키 생성
    
        unsigned char *pub_key = malloc(dh->p_len + dh->g_len + 2);
    
        if (!pub_key) {
    
            return 1;
    
        }
    
    
    
        // DER 형식의 공개 키 생성
    
        BN_bn2bin(dh->p, pub_key);
    
        pub_key[dh->p_len] = 0x02; // DER 형식의 길이 표시
    
        BN_bn2bin(dh->g, pub_key + dh->p_len + 1);
    
        pub_key[dh->p_len + dh->g_len + 1] = 0x02; // DER 형식의 길이 표시
    
    
    
        // openssl_dh_compute_key 함수 호출
    
        unsigned char *common_key = malloc(dh->p_len);
    
        if (!common_key) {
    
            return 1;
    
        }
    
    
    
        if (!openssl_dh_compute_key(common_key, pub_key, dh->p_len + dh->g_len + 3, dh)) {
    
            return 1;
    
        }
    
    
    
        // 공통 키 출력
    
        printf("공통 키: ");
    
        for (int i = 0; i < dh->p_len; i++) {
    
            printf("%02x", common_key[i]);
    
        }
    
        printf("n");
    
    
    
        // 메모리 해제
    
        free(pub_key);
    
        free(common_key);
    
        DH_free(dh);
    
    
    
        return 0;
    
    }
    
    


    이 예제에서는 OpenSSL 라이브러리를 사용하여 Diffie-Hellman 키 교환을 위한 공개 키를 생성하고 DER 형식으로 변환합니다. 그런 다음 openssl_dh_compute_key 함수를 호출하여 공통 키를 계산합니다. 계산된 공통 키는 DER 형식의 공개 키와 함께 전송되어 상대방이 공통 키를 계산할 수 있습니다.

    2025-05-07 20:08

  • 개발자 Q&A 포인트 정책
      글쓰기
      50P
      댓글
      10P
  • 전체 17,765건 / 25 페이지

검색

게시물 검색