충격! AI가 몰래 심는 워터마크, 직접 만든 제거 도구 공개합니다

반응형

 충격적인 사실! OpenAI의 최신 GPT 모델이 텍스트에 숨겨진 워터마크를 남긴다고요? 육안으로 보이지 않는 특수 문자로 AI 생성 텍스트를 몰래 표시하는 방법과 이를 감지하고 제거하는 도구를 직접 만든 과정을 공유합니다.

 

충격! AI가 몰래 남기는 흔적, 직접 제거 도구 만들었어요 🕵️‍♂️

진짜 깜짝 놀랐어요. 여러분도 ChatGPT나 최신 AI로 글 쓰고 계신가요? 저는 최근에 ChatGPT로 리포트 몇 개 작성하고 블로그 글도 좀 썼었는데... 근데 뭔가 이상한 느낌이 들더라구요.

 

그러다 우연히 발견한 뉴스 기사! Rumi라는 회사에서 GPT-o3와 GPT-o4 mini 같은 최신 ChatGPT 모델이 사용자 모르게 텍스트에 워터마크를 숨겨놓는다는 걸 발견했대요. 헐, 내가 쓴 글도...? 바로 확인해봤죠. 그랬더니 정말로 있는 거 아니겠어요? 눈에는 안 보이지만 특수 문자로 몰래 표시를 해둔 거였어요.

 

솔직히 말해서 좀 배신감이 들었어요. 내가 냈던 리포트에도 이런 게 있었다면? 교수님이 발견했다면? 생각만 해도 끔찍하더라구요. 그래서 직접 이런 워터마크를 감지하고 제거할 수 있는 도구를 만들어보기로 했습니다.

 

도대체 이게 뭔가요? AI의 숨겨진 워터마크 🔍

일단 이 워터마크가 뭔지부터 알아봤어요. 기사에 따르면 이 워터마크는 주로 긴 응답에서 발견되며, 일반 공백처럼 보이지만 다른 ASCII 코드를 가진 특수 유니코드 문자(주로 Narrow No-Break Space)를 사용한다고 해요.

제가 알아본 바로는 이 워터마크는 주로:

  1. 제로 너비 문자 - 눈에 보이지 않는 공백이나 제어 문자
  2. 특수 공백 - 일반 공백처럼 보이지만 다른 ASCII 코드를 가진 유니코드 문자
  3. 이모지 변형 선택자 - 이모지 뒤에 붙어 변형을 주는 특수 문자

이런 것들로 구성되어 있더라구요.

사실 OpenAI는 공식적으로 "워터마크가 아니라 대규모 강화학습의 특이점"이라고 변명(?)했지만... 글쎄요, 그게 그거 아닌가요? 😏

 

제가 직접 만든 워터마크 감지/제거 도구 ⚒️

저는 프론트엔드 개발자니까, 바로 웹 기반 도구를 만들기로 했어요. VS Code에서 Github Copilot의 도움을 받아 금방 만들 수 있었죠. (AI의 도움을 받아 AI 워터마크를 제거하다니, 아이러니하네요 ㅋㅋ)

제가 만든 도구는 다음과 같은 기능을 해요:

  • 워터마크 감지: 텍스트에 숨겨진 워터마크를 찾아내고 어떤 종류인지 알려줌
  • 워터마크 위치 표시: 어디에 워터마크가 있는지 시각적으로 강조해줌
  • 워터마크 제거: 발견된 워터마크를 모두 삭제하고 깨끗한 텍스트로 변환
  • 결과 복사: 정리된 텍스트를 클립보드에 바로 복사할 수 있음

가장 놀라웠던 건 제가 몇 달 전에 ChatGPT로 작성한 이메일과 보고서를 넣어봤더니 정말로 워터마크가 있더라구요! 주로 긴 문단 사이사이에 특수 공백 문자가 숨어 있었어요.

 

2025.04.23 - [AI, 미래기술/AI 챗봇 및 언어 모델] - 챗GPT 텍스트 워터마크 감지 및 제거 도구

 

 

소스 코드로 살펴보는 워터마크 감지 방법 💻

제가 만든 도구의 핵심 부분을 좀 공유해드릴게요. 워터마크를 어떻게 감지하는지 코드로 보면 이해가 쉬울 것 같아서요.

function detectWatermark(text) {
  const watermarks = {
    count: 0,
    types: new Set(),
    positions: []
  };

  // 1. 이모지+변형선택자 패턴 검사 (예: 😂 + \uFE0F)
  const emojiWithVSPattern = /(?<emoji>[\p{Emoji}])(?<vs>[\uFE00-\uFE0F])/gu;
  
  // 2. 제로 너비 문자 (보이지 않는 특수 문자)
  const zeroWidthChars = /[\u200B-\u200F\u2060-\u2064\uFEFF]/g;
  
  // 3. 특수 공백 (일반 공백처럼 보이지만 다른 코드를 가진 문자)
  const specialSpaces = /[\u00A0\u2000-\u200A\u202F\u205F\u3000]/g;
  
  // 실제 감지 로직...
}

 

워터마크를 제거하는 코드는 더 간단해요:

function removeWatermark(text) {
  let cleaned = text
    // 이모지 변형 선택자 제거
    .replace(/[\uFE00-\uFE0F]/g, '')
    // 제로 너비 문자 제거
    .replace(/[\u200B-\u200F\u2060-\u2064\uFEFF]/g, '')
    // 특수 공백을 일반 공백으로 변환
    .replace(/[\u00A0\u2000-\u200A\u202F\u205F\u3000]/g, ' ');

  return cleaned;
}

 

이런 워터마크가 왜 문제가 될까요? 🤔

처음엔 "그냥 보이지 않는 특수 문자일 뿐인데 뭐가 문제지?"라고 생각했어요. 근데 좀 더 생각해보니 여러 문제가 있더라구요:

  1. 학생들에게 특히 불공정해요 - 기사에 따르면 일부 국가에서는 ChatGPT가 5월 말까지 학생들에게 무료로 제공되는데, 워터마크의 존재를 모르는 학생들은 나중에 문제가 될 수 있어요.
  2. 개인정보 문제 - 내 글이 AI로 작성됐다는 정보가 내 동의 없이 포함된다는 건 좀 이상하지 않나요?
  3. 부정확한 판단 우려 - 워터마크 감지 도구가 실제 AI 생성 텍스트가 아닌데도 오탐지하면 큰 문제가 될 수 있어요.
  4. 쉽게 우회 가능한데 의미가 있나? - 결국 이런 워터마크는 이렇게 도구만 있으면 쉽게 제거할 수 있어서 실효성이 의문이에요.

 

AI 워터마크 없는 글쓰기, 어떻게 해야 할까요? ✍️

Rumi에서도 제안했듯이, 저는 과정 중심의 접근법이 더 중요하다고 생각해요:

  1. 여러 초안을 만들어보세요 - AI의 결과물을 그대로 사용하지 말고, 자신의 아이디어를 섞어 발전시키세요.
  2. 워터마크 확인 후 제거하기 - 제출 전에 워터마크를 확인하고 제거하는 습관을 들이세요.
  3. 맞춤형 AI 활용하기 - 자신의 목적과 스타일에 맞게 AI를 조정해서 사용하세요.
  4. 실시간 협업 활용하기 - 동료들과 함께 작업하면 AI 텍스트와 인간 텍스트의 구분이 자연스럽게 이루어져요.

저도 이 도구를 만들었지만, 부정직하게 사용하라는 의미는 아니에요. 오히려 AI가 우리 모르게 하는 일을 투명하게 알 수 있도록 하는 게 목적이었어요.

AI 워터마크 감지 및 제거 방법

마치며: 투명한 AI 사용을 위하여 🌟

AI 기술이 발전할수록 이런 워터마킹 기술도 계속 진화할 거예요. 하지만 중요한 건 이런 기술이 투명하게 공개되고 사용자가 자신의 데이터와 텍스트에 대한 통제권을 가져야 한다는 점이라고 생각해요.

여러분은 어떻게 생각하시나요? AI 워터마크에 대해 알고 계셨나요? 아니면 저처럼 놀라셨나요? 댓글로 의견 남겨주시면 함께 이야기해봐요!


워터마크 관련 자주 묻는 질문 ❓

Q: 모든 AI 텍스트에 워터마크가 있나요?

A: 아니요, 기사에 따르면 주로 GPT-o3와 GPT-o4 mini 같은 최신 모델에서 발견되며, 이전 모델인 GPT-4o에서는 발견되지 않았습니다.

Q: 워터마크가 있는지 쉽게 확인하는 방법은?

A: SoSciSurvey의 문자 뷰어나 VS Code와 같은 코드 에디터에서 확인할 수 있습니다.

Q: 워터마크를 제거하면 불법인가요?

A: 현재까지 이를 불법으로 규정한 법률은 없습니다.

Q: 워터마크 없이 AI 텍스트를 생성할 수 있나요?

A: 이전 버전의 GPT 모델이나 다른 AI 모델은 워터마크가 없는 경우가 많습니다.

Q: 워터마크 제거 도구는 어디서 구할 수 있나요?

A: 제가 만든 도구는 곧 깃허브에 오픈소스로 공개할 예정입니다.