
회전 범위 코딩(RRC) 스테가노그래피 — 대규모 언어 모델이 생성한 자연어 텍스트에 비밀 메시지를 은닉하는 효율적이고 증명 가능한 보안성을 갖춘 언어적 스테가노그래피 기법입니다.
논문: Efficient Provably Secure Linguistic Steganography via Range Coding
| 단계 | 설명 |
|---|---|
| 임베드 (알고리즘 3) | 비밀 메시지를 십진수 값으로 변환하고, LM의 확률 분포와 PRNG 생성 오프셋에 따라 줄어드는 구간 내에서 값을 반복적으로 회전시킵니다. 각 회전 단계에서 하나의 토큰이 생성됩니다. |
| 추출 (알고리즘 4) | 스테고텍스트에 LM을 다시 실행하여 구간 경계를 복원한 다음, 역회전하여 원래의 십진수 값으로 되돌리고 이진화합니다. |
회전 메커니즘은 기본(vanilla) 범위 코딩 스테가노그래피의 두 가지 문제를 해결합니다:
.
├── RRC_embed.py # Embedding (Algorithm 3)
├── RRC_extract.py # Extraction (Algorithm 4)
├── test_roundtrip.py # Self-contained end-to-end verification script
├── requirements.txt # Python dependencies
└── README.md
의존성 설치:
pip install -r requirements.txt
라운드트립 테스트는 meta-llama/Llama-2-7b-hf를 사용하며 CPU/CUDA에서 실행됩니다:
python test_roundtrip.py
예상 출력:
>>> Step 3: Verification
Original: 10110011001010111010011100101011...
Extracted: 10110011001010111010011100101011...
✅ SUCCESS — extracted message matches perfectly!
idx와 text 열을 포함하는 프롬프트 파일 0.Prompts.tsv를 준비한 후 실행하세요:
python RRC_embed.py \
--language_model meta-llama/Llama-3.1-8B \
--bit_length 128 \
--key 42 \
--top_k -1
python RRC_extract.py \
--language_model meta-llama/Llama-3.1-8B \
--bit_length 128 \
--key 42 \
--input_file 1.RC_decimal_Llama-3.1-8B_bit128.tsv
⚠️ 중요: 송신자와 수신자는 올바른 추출을 위해 동일한 언어 모델, 키, 비트 길이, top-k 설정을 사용해야 합니다.
RRC_embed.pyRRC_extract.pyPython의 Decimal 타입은 % 연산자에 대해 절삭 나눗셈을 사용하므로 음수 나머지를 반환할 수 있습니다 (예: Decimal('-19672') % Decimal('65536') → 45864 대신 -19672). 이 구현은 항상 결과가 [0, m) 범위에 있도록 보장하는 decimal_mod 헬퍼를 사용합니다:
def decimal_mod(a, m):
return a - m * (a / m).to_integral_value(rounding=ROUND_FLOOR)
⚠️ 안정적인 비밀 추출을 위해 일부 연산(sort, cumsum)은 CUDA 비결정성을 피하기 위해 float64 정밀도로 CPU에서 처리됩니다. 이는 인코딩-디코딩 일관성을 보장하는 대신 일부 속도를 희생합니다.
| 인자 | 기본값 | 설명 |
|---|
--language_model | meta-llama/Llama-3.1-8B | HuggingFace 모델 식별자 |
--bit_length | 128 | 비트 단위 비밀 메시지 길이 |
--top_k | -1 | Top-k 절단; -1 = 전체 어휘 |
--key | 42 | 대칭 키 K (PRNG 시드) |
--part / --part_max | 0 / 2 | 대규모 프롬프트 세트에서 병렬 실행용 |
| 인자 | 기본값 | 설명 |
|---|
--language_model | meta-llama/Llama-3.1-8B | 임베딩 모델과 일치해야 함 |
--bit_length | 128 | 임베딩 설정과 일치해야 함 |
--top_k | -1 | 임베딩 설정과 일치해야 함 |
--key | 42 | 임베딩 키와 일치해야 함 |
--input_file | (필수) | 인코더에서 생성된 TSV 경로 |