
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