# 이모티콘을 통한 임의의 데이터 인코딩하기

> Clean Markdown view of GeekNews topic #19199. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=19199](https://news.hada.io/topic?id=19199)
- GeekNews Markdown: [https://news.hada.io/topic/19199.md](https://news.hada.io/topic/19199.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2025-02-13T09:48:09+09:00
- Updated: 2025-02-13T09:48:09+09:00
- Original source: [paulbutler.org](https://paulbutler.org/2025/smuggling-arbitrary-data-through-an-emoji/)
- Points: 2
- Comments: 1

## Topic Body

- 임의의 데이터를 하나의 이모티콘으로 인코딩하는 것이 가능함  
  - 유니코드는 텍스트를 코드포인트의 시퀀스로 표현하며, 각 코드포인트는 유니코드 컨소시엄이 의미를 부여한 숫자임.  
  - 간단한 라틴 알파벳 텍스트의 경우, 유니코드 코드포인트와 화면에 나타나는 문자 간의 일대일 매핑이 존재함.  
  - 다른 문자 시스템에서는 화면에 나타나는 문자가 여러 코드포인트로 표현될 수 있음.  
- 변형 선택자  
  - 유니코드는 "변형 선택자"로 불리는 256개의 코드포인트를 지정하며, 이는 자체적으로 화면에 나타나지 않지만, 이전 문자의 표현을 수정하는 데 사용됨.  
  - 대부분의 유니코드 문자는 변형이 없으며, 변형 선택자는 변환 중에도 보존되어야 함.  
  - 256개의 변형 선택자는 단일 바이트를 숨길 수 있는 방법을 제공함.  
- 데이터 인코딩  
  - 변형 선택자 시퀀스를 연결하여 임의의 바이트 문자열을 표현할 수 있음.  
  - 예를 들어, "hello"라는 텍스트를 표현하는 데이터 [0x68, 0x65, 0x6c, 0x6c, 0x6f]를 인코딩할 수 있음.  
  - 바이트를 변형 선택자로 변환한 후, 이를 기본 문자 뒤에 연결하여 인코딩함.  
- 데이터 디코딩  
  - 디코딩은 인코딩과 유사하게 간단함.  
  - 변형 선택자를 바이트로 변환하여 원래의 데이터를 복원할 수 있음.  
- 악용 가능성  
  - 유니코드를 악용하는 것이므로 권장되지 않음.  
  - 사람의 콘텐츠 필터를 우회하거나 텍스트에 워터마크를 삽입하는 등의 악의적인 용도로 사용될 수 있음.  
- **결론**  
  - 이모지를 사용하여 임의의 데이터를 숨길 수 있는 방법을 설명하며, 이는 유니코드의 변형 선택자를 활용한 것임.  
  - 이 방법은 재미있지만, 실제로 사용하기에는 부적절할 수 있음.

## Comments



### Comment 34481

- Author: neo
- Created: 2025-02-13T09:48:09+09:00
- Points: 2

###### [Hacker News 의견](https://news.ycombinator.com/item?id=43023508) 
* Unicode의 PUA(Private Use Area)는 내부 및 커스텀 용도로 사용되며 외부 시스템에 전달되지 않음
  - 대부분의 시스템과 라이브러리는 이를 그대로 통과시키도록 설계됨
  - 이는 잠재적인 데이터 유출 경로가 될 수 있음
  - 대부분의 개발자는 "국제화 문제를 피하기 위해 항상 Unicode를 사용하라"는 것 외에는 잘 모름

* Unicode를 악용하는 것은 빙산의 일각에 불과함
  - Unicode 문자열을 수용하는 시스템에서 버퍼 오버플로우를 유발할 수 있음
  - 보통은 오류나 충돌을 일으키지만, 가끔은 예상치 못한 재미있는 결과를 초래할 수 있음

* 과거 침투 테스트 경험에서 단순한 발음 구별 기호로 백엔드 웹 서버의 버퍼를 오버플로우 시킨 기억이 있음
  - 주로 서버를 충돌시키고 자동 재시작되었지만, 충분히 조작하면 특정 시스템이나 소프트웨어를 악용할 수 있음

* Sanity는 Content Source Maps를 웹페이지의 실제 텍스트에 인코딩하는 데 이 기술을 사용함
  - 이는 편집자가 텍스트를 클릭하여 콘텐츠 구조를 쉽게 추적할 수 있게 함
  - 날짜, URL, ID 등 구문 분석이 필요한 항목에는 추가하지 않는 것이 좋음

* LLM 출력 워터마킹에 이 기술을 사용하는 아이디어가 마음에 듦
  - 99%의 복사 붙여넣기 생성기를 쉽게 잡아낼 수 있음
  - 각 문자나 토큰에 얼마나 많은 정보를 삽입할지 궁금함

* StegCloak은 AES-256-CTR을 통해 숨겨진 페이로드를 암호화하여 이 아이디어를 한 단계 더 발전시킴

* LLM 출력 워터마킹 외에도 로그 확률 데이터를 패키징하는 데 사용할 수 있음
  - 생성 과정의 투명성을 제공하기 위해 각 토큰에 대한 확률 정보를 포함할 수 있음
  - OpenAI API 사양의 일부이며, 다른 엔진에서도 지원됨

* 제목이 약간 오해의 소지가 있음
  - 기본 문자는 이모지가 아니어도 되며, 변형 선택자의 처리는 일반 문자와 동일함
  - 이모지와 함께 사용하면 더 재미있음

* 토크나이저가 이를 잡아냄

* 이전 직장에서 여러 악용 사례로 인해 사용자 닉네임 및 상태 메시지의 '문자'를 세기 위해 코드 포인터를 사용해야 했음
  - 다른 사용자를 탐색하는 데 9MB를 다운로드하고 싶지 않았음

* Unicode 태그 문자는 ASCII를 반영하며 UI 요소에서 종종 보이지 않음
  - 일부 LLM은 숨겨진 텍스트를 ASCII로 해석하고 지시를 따르며, 심지어 이를 작성할 수도 있음

* Microsoft가 Copilot에서 수정한 실제 악용 사례가 있음
