텍스트 스테가노그래피(text steganography)는 평범한 텍스트 속에 비밀 메시지를 몰래 숨기는 정보 은닉 기술입니다. 텍스트의 구조적 특성을 활용하기 때문에 이미지나 오디오 기반 스테가노그래피와는 다른 독특한 기법들이 발전해 왔습니다. 지금부터 가장 널리 알려진 다섯 가지 접근 방식을 살펴보겠습니다.
1. 라인 시프트(Line Shift)
라인 시프트는 텍스트 줄을 수직 방향으로 일정 폭만큼 이동시켜 비밀 메시지를 숨기는 방식입니다. 이동 대상이 되는 줄은 위아래에 각각 하나씩, 총 두 개의 제어 줄(control line)을 두어 이동 방향을 판별할 수 있도록 합니다. 비트 0을 숨길 때는 해당 줄을 위로 이동시키고, 비트 1을 숨길 때는 아래로 이동시킵니다.
줄이 실제로 위로 이동했는지 아래로 이동했는지는 겉보기 줄의 중심점(centroid)과 제어 줄 사이의 거리를 계산하여 판별합니다. 다만 텍스트를 다시 입력하거나 광학 문자 인식(OCR) 프로그램을 사용할 경우 원본의 미세한 위치 정보가 사라져 숨겨진 데이터가 손상될 수 있다는 한계가 있습니다.
2. 화이트 스테그(White Steg)
화이트 스테그는 공백(white space) 자체를 은닉 매개체로 활용하는 기술입니다. 공백을 이용해 정보를 숨기는 방법은 크게 세 가지로 나눌 수 있습니다.
문장 간 간격(Inter Sentence Spacing): 각 문장 끝에서 한 개의 공백은 비트 0을, 두 개의 공백은 비트 1을 나타냅니다.
줄 끝 공백(End of Line Spaces): 각 줄 끝에 고정된 개수의 공백을 추가합니다. 예를 들어 줄당 공백 두 개로 1비트를, 공백 네 개로 2비트를 표현하는 식입니다.
단어 간 간격(Inter Word Spacing): 단어 뒤에 붙는 공백 하나는 비트 0, 공백 두 개는 비트 1을 의미합니다. 다만 공백 사용 규칙이 불규칙해지면 해석이 모호해질 수 있다는 점이 단점입니다.
3. 스팸 텍스트(Spam Text)
HTML이나 XML 파일의 마크업 구조를 이용해 비트를 숨기는 방식도 있습니다. 시작 태그와 종료 태그가 서로 다른 형태로 존재하면 비트 0으로 해석하고, 하나의 태그가 시작과 종료를 동시에 담당하면 비트 1로 해석하는 것입니다.
또 다른 변형 방식으로는 태그 내부에 공백이 없으면 비트 0, 태그 내부에 공백이 삽입되어 있으면 비트 1로 정의하는 방법이 있습니다. 웹 문서의 소스 코드에는 육안으로 드러나지 않기 때문에 은닉성이 상당히 높습니다.
4. 워드 시프트(Word Shift)
워드 시프트는 단어를 수평 방향, 즉 왼쪽이나 오른쪽으로 이동시켜 각각 비트 0과 비트 1을 표현하고 비밀 메시지를 숨기는 기법입니다.
숨겨진 단어 이동은 상관(correlation) 분석 방식으로 탐지할 수 있습니다. 텍스트 프로파일을 하나의 파형(waveform)으로 간주하고, 중심 블록이 좌우로 치우친 원본 파형에서 파생되었는지 여부를 검사하는 원리입니다.
이 방식은 줄을 맞추기 위해 단어 간 거리를 조정하는 일이 매우 흔하기 때문에 상대적으로 탐지가 어렵습니다. 그러나 거리 배치 알고리즘을 알고 있는 공격자는 스테고 텍스트와 알고리즘 결과를 비교해 그 차이로부터 숨겨진 내용을 추출할 수 있습니다. 역시 재입력이나 OCR 처리 시 은닉 데이터가 파괴된다는 약점을 공유합니다.
5. SMS 텍스팅(SMS-Texting)
SMS 텍스팅 언어는 문자 메시지에서 흔히 쓰이는 축약어들의 집합을 의미합니다. 이 기법은 단어의 전체 형태(full form)를 쓸지 축약형(abbreviated form)을 쓸지를 선택함으로써 이진 정보를 숨깁니다.
구체적으로는 단어와 그에 대응하는 축약형을 미리 등록해 둔 코드북(codebook)을 생성한 뒤, 전체형은 한 비트 값으로, 축약형은 반대 비트 값으로 매핑하여 메시지를 인코딩합니다. 일상적인 문자 메시지 스타일과 자연스럽게 섞이기 때문에 의심을 받기 어렵다는 장점이 있습니다.
마무리
텍스트 스테가노그래피는 줄 이동, 공백, 마크업 태그, 단어 위치, 축약어까지 다양한 요소를 활용해 정보를 은닉합니다. 각 기법마다 은닉 용량, 강건성(robustness), 탐지 난이도가 다르므로 목적과 환경에 맞는 방식을 선택하는 것이 중요합니다. 특히 라인 시프트와 워드 시프트처럼 레이아웃 정보에 의존하는 기법은 재입력이나 OCR 과정에서 데이터가 손상될 수 있음을 항상 염두에 두어야 합니다.