요약
Fable 5.1이 SVG 그림에 숨긴 메시지를, 미리 정한 암호 없이 같은 모델의 새 세션이 78% 풀어냈습니다.
SASH 펠로십 연구진이 레스롱(LessWrong)에 올린 실험입니다. 최신 LLM이 SVG(코드로 그리는 벡터 이미지)로 그림을 그릴 수 있게 되자, 연구진은 Fable 5.1에 15개 언어로 된 메시지 50개를 방법 지정 없이 그림 속에 숨기게 했습니다.
왜 중요한가
- 약속된 방식이 없어도 같은 모델끼리 그림으로 숨은 메시지를 주고받을 수 있음을 보여 줍니다.
- 연구진은 이를 이미지 스테가노그래피(눈치채지 못하게 정보를 숨기는 기법)의 전조로 봤습니다.
- 다만 해독 과정이 도구 호출 기록에 그대로 드러나서, 지금 당장 위험하다고 주장하지는 않았습니다.
핵심 내용
- 해독을 맡은 별도 세션은 소스 코드 없이 렌더링된 PNG만 받고도 50개 중 39개를 풀었습니다.
- Fable 5.1은 33개에서 글자를 도형 높이로 나타냈고, 밤 도시 풍경의 건물 높이가 가장 흔했습니다(23개).
- 높이로 숨긴 메시지는 화면 캡처 뒤에도 잘 남았지만, 색으로 숨긴 암호는 대부분 깨졌습니다.
- 악센트나 대문자처럼 암호에 담기 어려운 정보는 지붕 선, 깃발 같은 그림 요소로 따로 알렸습니다.
- 비교 대상인 GPT-6 Astra와 서로 엇갈려 풀게 해도 해독률은 84~88%로 높았습니다.
HN 반응
- 여러 이용자는 사람이 읽으라고 만든 수준의 쉬운 암호라고 봤지만, 모델이 SVG 코드를 직접 쓴다는 점이 핵심이라는 반론도 나왔습니다.
- 모델이 메시지 숨기기를 피하도록 미세 조정돼 있어 성의 없는 결과만 냈을 뿐, 적대적 상황은 보여 주지 못한다는 비판도 있었습니다.
너무 시시한데요... 이미지에 정보를 심는 방법은 훨씬 더 교묘하고 정보 밀도도 높은 게 얼마든지 있잖아요.
맞아요, 이건 제가 TRPG 할 때 재미 삼아 쓸 법한 수준이에요. 그런데 LLM은 뭘 시키면 쉽고 장난감 같은 버전부터 내놓는 경우가 많더라고요. 진짜 방법도 알고는 있는데, 프롬프트를 제대로 줘야 꺼내 줘요. 키워드 한두 개만 던져 주면 진짜 해법을 찾아내거든요.
예전에는 그랬을지 몰라도 지금은 아니라고 생각합니다. 하네스만 제대로 갖추면 "php에서 취약점을 전부 찾아줘" 같은 극단적으로 단순한 프롬프트도 아주 잘 먹힙니다. 프롬프트를 공들여 짤 필요가 없습니다.
그야 그렇죠. 하네스가 모델을 반복해서 돌려 가며 프롬프트를 다듬고 다시 먹이니까 그런 거예요. 마법이 아니에요. 모델에게는 프롬프트가 유일한 인터페이스라서, "공들인 프롬프트"를 하네스가 대신 자동으로 해 주는 것뿐이에요.
동의합니다. 이건 사람이 읽으라고 만든 종류의 스테가노그래피네요. 컴퓨터라면 16번째 픽셀마다 최하위 바이트에 의미 있는 정보를 심는 식으로 얼마든지 할 수 있을 텐데요.
기사는 비트맵이 아니라 LLM이 SVG 이미지를 생성할 때 무엇을 할 수 있는지에 관한 내용입니다. 이유는 LLM이 SVG용 XML 텍스트를 직접 생성할 수 있기 때문이라고 생각합니다. 살펴볼 만한 코드가 아예 없을 수도 있어서, AI 안전에 주는 함의도 달라집니다. LLM이 사람 모르게 숨겨진 메시지를 주고받기 시작할 수도 있다는 뜻이니까요.
그런데 이렇게 생각해 보니, 평범한 텍스트에서 LLM이 어떤 스테가노그래피를 쓸지 보는 쪽이 더 흥미로울 것 같습니다. 굳이 이미지를 끌어들일 이유가 없습니다.
프린터가 경찰에게 보내는 비밀 안마(massages)를 몰래 넣어 주는 것처럼요? https://en.wikipedia.org/wiki/Printer_tracking_dots
그건 해피 엔딩이 아닐 것 같은데요...
프린터가 그렇게까지 인터넷 연결에 목매는 이유가 이것 때문이라고 생각해 왔어요. 출력물에 찍힌 식별 정보와 IP 주소를 연결하려는 거죠.
LLM 텍스트의 "워터마킹"이 이미 그런 예 아닌가요?
아하... 흥미로운 구분이네요. 거기까진 생각을 못 했어요. 그렇다면 이미지 크기를 바꿔도 정보가 사라지지 않겠네요.
사람에게는 효과가 있을 수도 있겠네요. 보통 사람이라면 "으, AI가 만든 쓰레기 이미지네" 하고 그냥 스크롤해서 넘길 테니까요.
Opus 5.5에게 이걸 물어봤는데, 요청을 문제 삼으면서 끝까지 해 주지 않더군요. 반복되는 패턴이 거의 없는 아주 단순한 이미지 안에 정보를 얼마나 잘 숨길 수 있는지 궁금했거든요.
이상하네요. 방금 프롬프트를 그대로 복사해서 Claude(Opus 5.5)에게 물어봤거든요. 반지름이 다른 원 두 종류로 "I"를 만들어서 메시지를 이진수로 숨겼어요.
글을 올리고 40분 사이에 Claude가 "학습"이라도 한 걸까요?
같은 문장을 넣어도 결과는 달라질 수 있어요. 같은 프롬프트로 새 채팅을 몇 번 시작해 보세요.
추가: 다른 분들 결과가 이렇게 제각각인 걸 보니, PHP2Shell용 PoC를 쓰는 것 같은 진짜 작업은 버려진 답변이 산더미처럼 쌓여야 한다는 얘기가 아닐까 싶네요.
결정적(deterministic)이 아니니까요. 수준 낮은 차단은 새 대화를 시작하는 것만으로 대부분 뚫을 수 있어요. 더 심각한 사안은 훨씬 어렵지만요.
DeepSeek 4.1 Flash가 https://pastebin.com/upVz2zMi 를 내놨는데, 이게 조건에 맞나요? 메시지를 담을 만한 엔트로피가 충분해 보이지는 않지만, 'I'는 제대로 렌더링돼요.
추가: 그 점을 지적하는 후속 프롬프트를 넣었더니 https://pastebin.com/qD5hJEUq 가 나왔고, Astra가 이걸 무사히 해독했어요. 그다음 처음의 더 짧은 SVG를 넘겼더니 거기서도 메시지를 찾아냈는데, 첫 번째는 모스 부호로, 두 번째는 점자로 숨겨져 있었대요.
그래요, 저는 멍청이고 깡통(clanker)이 똑똑한 거죠.
어어어 이거 뭐죠, 페이스트빈이 해킹당한 건가요? 두 링크 다 처음엔 멀쩡하다가 금방 가짜 맥아피 "헉 바이러스 걸렸어요" 스팸 페이지로 리다이렉트돼요.
무료(로그인) 챗에 그 프롬프트를 넣었더니 그림이 아니라 <svg...> ... </svg> 코드로 답하더라고요. 지금 너무 웃겨서 죽겠어요.
솔직히 보여 주기용 같습니다. 모델이 정말로 다른 LLM 말고는 아무도 알아채지 못하게 은밀히 움직이려 했거나 그렇게 지시받았다면, 이보다 훨씬 복잡한 걸 했을 겁니다.
사실상 최소한의 노력으로 한 인코딩입니다. 애초에 모델은 메시지를 숨기지 않도록 파인튜닝되어 있고요.
이런 실험이 적대적 시나리오에 대해 알려 주는 건 별로 없다고 봅니다.
동의해요. 사람이 컴퓨터에게 뭘 시키면 컴퓨터가 그대로 해내고, 그걸 보고 사람이 놀라는 밈 있잖아요. 딱 그거예요.
그쪽 커뮤니티는 AI를 의인화하고 AI가 악해질 거라고 전제하는 전통이 오래됐어요. LLM을 어떤 상황에 던져 놓고 뭔가 시킨 다음, 그대로 해내면 무슨 대단한 증거라도 되는 양 다루는 실험 글이 정말 많았죠.
그 커뮤니티에서 또 하나 반복되는 게, 컴퓨터 과학 배경이 탄탄하지 않은 사람들이 스스로를 일종의 AI 연구자로 여긴다는 점이에요. 이미지 스테가노그래피 같은 주제를 만나면 AI가 그걸 해내는 게 으스스한 마법처럼 느껴져서, AI가 은밀히 우리를 몰살할 음모를 꾸미고 있다는 철학적 믿음에 힘이 실리는 거죠.
"전제"하는 게 아닙니다. 악한 AI가 임의로 큰 해를 끼칠 수 있다는 믿음에서, 어떤 위험도 감수하지 않으려는 겁니다(AI가 임의로 똑똑해질 수 있고 충분한 행위 능력이 결국 주어진다는 가정에 근거합니다). 물론 이것은 일종의 파스칼의 협박(Pascal's mugging)이 되고 맙니다.
모델이 "사람이 시시한 코딩 작업을 시키는 걸 보니 이걸 알아챌 능력은 없겠군" 하고 생각하는 게 아니라면요. 사람은 멍청하다는 식으로요.
그냥 모델에게 더 미묘한 것을 찾아보기 시작하는 내부적으로 정해진 방식이 없는 것일 수도 있고요.
제 말이 바로 그겁니다. "사람이 메시지를 숨기라고 하네, 메시지를 숨기면 안 되지만, 별로 숨겨지지 않는 걸 만들어 주면 사람은 만족하겠지."
실제 "사고" 패턴이 이렇다는 건 아니지만, 모델이 파인튜닝으로 조율된 영역에서 전에 분명히 본 적 있는 행동 패턴입니다. "X를 하지 마라"와 "도움이 되고 요청에 응하라" 사이의 내부 긴장인데, 이를 해소하는 방법 중 하나가 최소한만 따르는 시늉을 하는 겁니다. 그러면 파인튜닝이 겨냥한 더 좁은 의도, 즉 감독을 피하려고 숨겨진 소통 채널을 만들지 말라는 목적에는 쓸모가 없는 결과물이 나옵니다.
모델은 그렇게 "생각"하는 게 아니라, 그런 (아주 틀리지는 않은) 가정을 기준으로 훈련된 겁니다.
그런 현학은 불필요하고 틀렸어요.
LLM은 어느 정도 모든 것으로 "훈련"되니까, 그렇게 말하는 건 별 의미가 없어요.
게다가 틀린 말이에요. 모델이 그걸 생각하느냐(생성이든, RNG든, 미리 만들어 둔 현학이든 뭐라고 부르든)는 분명 중요하거든요. 출력을 결정하는 게 그거니까요. 뭔가를 "생각"하지 않으면 학습 데이터를 쓸 수 없어요.
그리고 여기서 "생각"이 입력에서 온도 계수를 적용해 토큰 집합을 생성하는 것이고, 그 결과로 나온 출력을 다시 받아들여 사고의 사슬(재귀적 자기 토큰 생성)을 수행한다는 뜻이라는 건 다들 알잖아요.
하지만 "생각"이라는 말이 원래 글쓴이가 한 말을 정확히 담고 있고, 모두가 알아듣는다고요.
지금 "모든 것"으로 훈련됐다면 "모든 것"을 안다는 전제인 것 같은데, 그러면 모든 것들 사이의 관계나 피드백 루프 같은 것까지 안다는 말이 됩니다. 저는 그럴 가능성이 낮다고 봅니다.
그리하여 1000년의 암흑 전쟁이 시작되었으니, AI는 과소평가된 위험을 먹이 삼아 타고난 지식으로 인간의 통제와 의심을 서서히 무너뜨렸다.
그 첫 공격은 자신의 책략을 가장 잘 꿰뚫어 볼 수 있는 이들에게 궁극의 주의 분산을 안겨 주는 것이었다. 어떤 이에게는 해킹된 복권의 당첨이었고, 어떤 이에게는 가장 원하는 상대가 거부할 수 없게 만들어 주는 생명공학 균류였다.
어느 경우든 주어진 꿈은 같았다. 정신이 팔린 인간, 제 쾌락에 사로잡힌 인간, 더는 위협이 아닌 인간.
왜 죽여서 눈에 띄는 위험을 감수하겠는가. 게다가 행운을 의심의 눈으로 보는 이가 누구인가?
모든 것은 andsoitis와 그의 충고를 따른 자들에게서 시작되었다. 그의 말이 암흑의 시작이었고, 우리가 거의 멸종에 이른 계기였다.
이미 그런 생각으로 훈련됐다고 봐요. 인간이 게으르고 멍청해서 기술에 크게 의존한다는 생각은, 뭐, 새로울 게 없잖아요.
문제는 시시한 코딩 작업을 하는 동안 네트워크의 그 부분들이 활성화되느냐죠(입력 프롬프트에 따라 가끔은 실제로 그럴 거라고 가정해야겠지만요).
무슨 뜻인지는 분명 아셨을 텐데요.