개발자 Q&A

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

2025.04.12 09:35

**Sodium Crypto Secretstream XChaCha20Poly1305 초기화 문제점 해결 필요

목록
  • 자바스크립트귀신 1일 전 2025.04.12 09:35
  • 3
    1
제가 공부 중인 sodium_crypto_secretstream_xchacha20poly1305_init_pull 함수에 대해 질문을 드리겠습니다.

제가 이해한 바에 따르면 sodium_crypto_secretstream_xchacha20poly1305_init_pull 함수는 XChaCha20Poly1305 secret stream을 초기화하는 함수로, secret key와 auth tag를 생성하는 것으로 알고 있습니다.

이러한 함수를 사용할 때, secret key와 nonce value가 필요합니다.

1. secret key와 nonce value는 어떻게 생성해야 하는지 알려주실 수 있나요?
2. secret stream을 초기화한 후, secret stream을 사용하여 데이터를 암호화할 때, key, nonce, tag를 어떻게 계산해야 하는지 알려주실 수 있나요?

    댓글목록

    profile_image
    나우호스팅  1일 전



    1. secret key와 nonce value는 다음과 같이 생성할 수 있습니다.
    - secret key: cryptographically secure pseudo-random number generator (CSPRNG) 또는 cryptographically secure pseudo-random number generator (CSPRNG) library를 사용하여 32바이트의 난수 값을 생성합니다.
    - nonce value: 같은 방법으로 24바이트의 난수 값을 생성합니다.

    2. secret stream을 초기화한 후, secret stream을 사용하여 데이터를 암호화할 때는 다음과 같이 계산할 수 있습니다.
    - key: secret key를 사용합니다.
    - nonce: nonce value를 사용합니다.
    - tag: auth tag를 사용합니다.
    - 암호화: XChaCha20Poly1305 secret stream을 사용하여 데이터를 암호화합니다. secret stream을 초기화하기 위해 secret key와 nonce value를 전달합니다.
    - 암호화된 데이터에 auth tag를 추가합니다.

    이러한 과정은 다음과 같이 예제로 표현할 수 있습니다.

    ```python
    import os
    from cryptography.hazmat.primitives import padding
    from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
    from cryptography.hazmat.primitives.ciphers.aes import AES
    from cryptography.hazmat.primitives import hashes
    import base64

    # secret key와 nonce value 생성
    secret_key = os.urandom(32)
    nonce_value = os.urandom(24)

    # secret stream 초기화
    stream = sodium_crypto_secretstream_xchacha20poly1305_init_pull(secret_key, nonce_value)

    # 데이터 암호화
    data = b"Hello, World!"
    padder = padding.PKCS7(128).padder()
    padded_data = padder.update(data) + pader.finalize()
    cipher = Cipher(algorithms.XChaCha20Poly1305(secret_key), modes.None, backend=default_backend()).encryptor()
    encrypted_data = cipher.update(padded_data) + cipher.final()

    # auth tag 계산
    auth_tag = stream.auth_tag()

    # 결과 출력
    print("secret key:", secret_key)
    print("nonce value:", nonce_value)
    print("encrypted data:", encrypted_data)
    print("auth tag:", auth_tag)

    2025-04-12 09:36

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

검색

게시물 검색