개발자 Q&A

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

2025.03.23 03:20

sodium_crypto_aead_aes256gcm_keygen 함수 사용시 질문

목록
  • Firebase러버 1일 전 2025.03.23 03:20
  • 4
    1
제가 공부 중인 sodium_crypto_aead_aes256gcm_keygen 함수를 사용하여 AES-256-GCM 암호화를 구현 중인데,

키 길이가 32바이트인 AES-256-GCM에서 nonce 길이는 얼마인지 궁금합니다.

그리고 nonce를 생성할 때 어떻게 해야 하나요?

또한, nonce가 중복되면 어떻게 될지 궁금합니다.

혹시 nonce를 생성하고 중복되는 것을 방지하는 방법을 알려주시면 감사하겠습니다.

    댓글목록

    profile_image
    나우호스팅  1일 전



    sodium_crypto_aead_aes256gcm_keygen 함수는 AES-256-GCM 암호화를 위한 키를 생성하는 함수입니다.

    AES-256-GCM에서 nonce의 길이는 12바이트입니다.

    nonce를 생성할 때는 임의의 12바이트의 난수 값을 생성하는 것이 좋습니다.

    nonce가 중복되면 암호화된 데이터가 취약해지거나 해킹될 수 있습니다.

    nonce를 중복되지 않도록 방지하는 방법으로는 nonce를 생성할 때마다 이전 nonce를 저장하고, 현재 nonce가 이전 nonce와 다르지 않으면 새로운 nonce를 생성하는 방법이 있습니다.

    또한, nonce를 생성할 때마다 현재 시간을 포함하는 방법도 있습니다.

    nonce를 생성하고 중복되지 않도록 방지하는 예제 코드는 다음과 같습니다.

    #hostingforum.kr
    c
    
    #include 
    
    
    
    // nonce를 저장할 변수
    
    unsigned char nonce[12];
    
    
    
    // 이전 nonce를 저장할 변수
    
    unsigned char prev_nonce[12];
    
    
    
    // nonce를 생성하고 중복되지 않도록 방지하는 함수
    
    void generate_nonce() {
    
        // 이전 nonce를 저장
    
        memcpy(prev_nonce, nonce, 12);
    
    
    
        // 임의의 12바이트의 난수 값을 생성
    
        randombytes(nonce, 12);
    
    
    
        // 현재 nonce가 이전 nonce와 다르지 않으면 새로운 nonce를 생성
    
        while (memcmp(nonce, prev_nonce, 12) == 0) {
    
            randombytes(nonce, 12);
    
        }
    
    }
    
    
    
    // nonce를 생성하고 AES-256-GCM 암호화를 수행하는 함수
    
    void encrypt_data() {
    
        // nonce를 생성
    
        generate_nonce();
    
    
    
        // AES-256-GCM 암호화를 수행
    
        unsigned char ciphertext[16];
    
        unsigned char tag[16];
    
        unsigned long long ciphertext_len = 16;
    
        unsigned long long tag_len = 16;
    
        if (sodium_crypto_aead_aes256gcm_encrypt(ciphertext, &ciphertext_len, "Hello, World!", 13, nonce, 12, tag, &tag_len, key, 32) != 0) {
    
            printf("Error: %sn", sodium_strerror(errno));
    
            return;
    
        }
    
    
    
        // 암호화된 데이터와 태그를 출력
    
        printf("Ciphertext: ");
    
        for (int i = 0; i < ciphertext_len; i++) {
    
            printf("%02x", ciphertext[i]);
    
        }
    
        printf("n");
    
        printf("Tag: ");
    
        for (int i = 0; i < tag_len; i++) {
    
            printf("%02x", tag[i]);
    
        }
    
        printf("n");
    
    }
    
    


    이 예제 코드는 nonce를 생성하고 중복되지 않도록 방지하는 방법을 보여줍니다. nonce를 생성할 때마다 이전 nonce를 저장하고, 현재 nonce가 이전 nonce와 다르지 않으면 새로운 nonce를 생성하는 방법을 사용합니다.

    2025-03-23 03:21

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

검색

게시물 검색