AI 연구EN

Claude 텍스트 워터마크, 원리부터 한계까지 — 토큰 하나 안 바꾸고 서명하는 법

Claude가 생성하는 모든 텍스트에 보이지 않는 워터마크가 들어갑니다. 글자를 추가하지 않고 어떻게 서명이 가능한지 — SynthID-Text의 시크릿 키, 토너먼트 샘플링, 탐지 원리와 한계까지 단계별로 풀어봅니다.

Claude 텍스트 워터마크, 원리부터 한계까지 — 토큰 하나 안 바꾸고 서명하는 법

Claude 텍스트 워터마크, 원리부터 한계까지 -- 토큰 하나 안 바꾸고 서명하는 법

2026년 8월, Anthropic은 Claude가 생성하는 모든 텍스트에 보이지 않는 워터마크를 넣는다고 발표했습니다. 글자를 추가하는 것도, 숨은 문자를 끼워 넣는 것도 아닙니다. 그런데도 "이 글을 Claude가 썼는지" 통계적으로 확인할 수 있다고 합니다. 어떻게 가능한 걸까요?

이 글은 Claude 워터마크 시리즈 2부작 중 Part 1입니다.

  • Part 1 (이 글): 워터마크가 동작하는 원리 -- 샘플링, 시크릿 키, 토너먼트, 탐지, 그리고 한계
  • Part 2: 같은 알고리즘(SynthID-Text)을 로컬 오픈 모델에 직접 적용해 생성·탐지·공격 실험하기

1. 무슨 일이 있었나

먼저 사실 관계부터 정리합니다. Anthropic 발표문의 핵심은 다음과 같습니다.

  • 대상: 2026년 8월 2일 이후 출시되는 모든 Claude 모델. API, claude.ai, Claude Code, AWS/GCP/Azure 경유 호출까지 전부 포함됩니다.
  • 범위: EU만이 아니라 전 세계 동일하게 적용됩니다.
  • 배경: EU AI Act 제50조가 2026년 8월 2일부터 신규 생성형 AI 시스템에 "기계가 읽을 수 있는 표식"을 의무화했습니다.
  • 방식: Google DeepMind가 2024년 *Nature*에 발표한 SynthID-Text 방식의 변형입니다.
  • 비용/속도: 추가 토큰이 없으므로 요금도 같고, 속도 영향도 "무시할 수준"이라고 밝혔습니다.
  • 식별 정보 없음: 워터마크에는 사용자, 조직, 대화를 특정할 수 있는 정보가 전혀 없습니다.
  • 탐지 API: 곧 제공 예정이나 세부 사항은 미정입니다.

그리고 발표문에서 가장 중요한 한 문장입니다.

A watermark only helps test whether Claude might have produced or processed the content. It doesn't say anything about ownership or authorship.

워터마크는 "Claude가 이 텍스트를 생성하거나 거쳐 갔을 가능성"만 알려줍니다. 저작권이나 저자가 누구인지에 대해서는 아무 말도 하지 않습니다. 이 구분이 왜 중요한지는 마지막 절에서 다시 다룹니다.

2. 직관: 같은 실력의 작가, 다른 버릇

워터마크를 이해하려면 먼저 LLM이 문장을 만드는 방식을 떠올려야 합니다.

LLM은 한 번에 한 토큰씩 생성합니다. 매 단계마다 "다음 토큰이 뭘까"에 대한 확률 분포를 내놓고, 그 분포에서 하나를 뽑습니다. 여기서 "뽑는다"가 핵심입니다.

"오늘 하늘은 ___" 뒤에 올 수 있는 단어를 생각해 보겠습니다. "맑다", "흐리다", "회색빛이다", "잔뜩 찌푸렸다"... 모두 자연스럽습니다. 모델이 보기에 "흐리다" 40%, "회색빛이다" 35%, "찌푸렸다" 20% 정도라면, 어느 것을 골라도 문장 품질에는 차이가 없습니다.

평범한 샘플링은 이 선택을 순수한 난수에 맡깁니다. 워터마크는 이 난수를 시크릿 키에서 파생된 의사난수로 바꿉니다.

겉으로 보면 여전히 "적당히 그럴듯한 단어 중 하나"가 선택됩니다. 품질은 그대로입니다. 하지만 키를 아는 사람은 "이 위치에서는 이 단어가 뽑힐 확률이 유독 높았어야 한다"를 알 수 있고, 수백 개의 토큰에 걸쳐 그 패턴이 일관되게 나타나면 우연이 아니라고 판단할 수 있습니다.

비유하자면 이렇습니다. 실력이 똑같은 두 작가가 있는데 한 명은 동의어 중에서 고를 때 항상 특정 주사위를 굴립니다. 한 문장만 보면 아무도 모릅니다. 하지만 그 주사위를 가진 사람이 글 한 편을 통째로 읽으면 "이건 그 사람 글이다"를 확신할 수 있습니다.

Anthropic이 "단어 자체를 바꾸지 않는다(Nothing is added to the text)"고 하는 이유가 여기에 있습니다. 바뀌는 것은 선택의 근거가 되는 난수의 출처뿐입니다.

3. 메커니즘: SynthID-Text를 단계별로

이제 실제 알고리즘을 따라가 보겠습니다. SynthID-Text 논문(Dathathri et al., *Nature*, 2024)의 구조를 그대로 따릅니다. 수식보다는 "무엇이 입력이고 무엇이 출력인가"에 집중하겠습니다.

3.1 컨텍스트 윈도우: 직전 토큰 몇 개가 씨앗이 된다

워터마크는 토큰 위치마다 다른 씨앗(seed)을 써야 합니다. 그렇지 않으면 모든 위치에서 같은 단어가 선호돼 문장이 망가집니다.

SynthID-Text는 직전 H개 토큰(논문 기본값 H=4)을 씨앗 재료로 씁니다. 직전 4개 토큰과 시크릿 키를 해시 함수에 넣으면 현재 위치 전용 난수가 나옵니다.

이 설계의 의미는 두 가지입니다.

  1. 같은 키, 같은 직전 4개 토큰이면 항상 같은 난수가 나옵니다. 탐지기는 텍스트만 있으면 모든 위치의 난수를 재현할 수 있습니다.
  2. 직전 4개 토큰 중 하나라도 바뀌면 그 위치의 난수가 달라집니다. 즉 단어 하나를 수정하면 그 단어 이후 4개 위치의 워터마크 신호가 깨집니다.

3.2 g-value: 각 후보 토큰에 붙는 0/1 점수

씨앗이 준비되면 어휘(vocabulary)의 모든 토큰에 대해 의사난수 함수 g를 계산합니다. 가장 단순한 형태에서 g는 0 또는 1입니다. 같은 씨앗이면 같은 토큰은 항상 같은 g값을 갖습니다.

이 g값이 워터마크의 "표식"입니다. 이후 단계에서 모델은 g=1인 토큰을 살짝 더 자주 고르게 됩니다.

3.3 토너먼트 샘플링: 편향을 넣되 분포는 지키기

여기가 SynthID-Text의 독창적인 부분입니다. 단순히 "g=1인 토큰에 확률 보너스를 주자"고 하면 분포가 왜곡되고 품질이 떨어집니다. 대신 토너먼트를 엽니다.

  1. 모델의 원래 분포에서 후보 토큰을 여러 개(예: 2^m개) 독립적으로 뽑습니다.
  2. 둘씩 짝지어 g값이 높은 쪽이 이깁니다. 동점이면 무작위로 정합니다.
  3. 승자들끼리 다시 짝짓고, 이번에는 다른 씨앗으로 만든 g값으로 비교합니다.
  4. m 라운드 후 최종 승자 하나가 출력 토큰이 됩니다.

이 구조가 영리한 이유는 다음과 같습니다.

  • 후보가 모두 원래 분포에서 나온 것이므로, 모델이 0에 가까운 확률을 준 이상한 토큰이 뽑힐 일이 없습니다.
  • 모델이 확신하는 위치(예: "대한민국의 수도는" 다음 "서울")에서는 후보 2^m개가 전부 "서울"이라 토너먼트가 의미 없습니다. 워터마크가 약해지지만 품질은 완벽히 보존됩니다.
  • 모델이 망설이는 위치(동의어가 여럿)에서는 후보가 다양하게 뽑히고, g값이 높은 쪽이 선택되며 신호가 쌓입니다.

Anthropic이 "사실 위주의 문단에서는 워터마크가 더 성기게(sparser) 들어간다"고 말한 이유가 정확히 이것입니다. 워터마크는 모델이 선택의 여지를 가진 곳에만 들어갑니다.

논문은 각 라운드에 서로 다른 키(layer)를 쓰는데, 이를 "깊이(depth)"라고 부르며 기본값은 30입니다. 라운드가 많을수록 신호는 강해지고, 라운드가 0이면 일반 샘플링과 동일합니다.

3.4 비왜곡(non-distortionary) 성질

SynthID-Text 논문은 중요한 이론적 성질을 증명합니다. 토너먼트 샘플링은 단일 토큰 기준으로 기대 분포가 원래 분포와 같습니다. 즉, 같은 프롬프트를 무수히 반복하면 워터마크 모델과 일반 모델의 다음 토큰 분포가 평균적으로 일치합니다.

단, 이것은 "한 번 뽑을 때"의 이야기입니다. 같은 프롬프트에 대해 같은 컨텍스트가 반복되면 같은 씨앗이 재사용되므로, 여러 번 생성한 결과 사이의 다양성은 줄어들 수 있습니다. 논문은 이를 막기 위해 반복 컨텍스트 마스킹을 씁니다. 이미 한 번 본 H개 토큰 조합이 다시 나타나면 그 위치에는 워터마크를 걸지 않고 일반 샘플링으로 돌아갑니다.

Anthropic은 내부 테스트에서 "내용, 창의성 수준, 가독성에 영향 없음"을 확인했다고 밝혔고, DeepMind는 Gemini 실서비스 트래픽 2천만 건에서 사용자 만족도 평가에 유의한 차이가 없었다고 보고했습니다.

4. 탐지: 키가 있으면 0.5와의 싸움

탐지기는 텍스트와 키만 있으면 됩니다. 모델은 필요 없습니다.

  1. 텍스트를 토큰화합니다.
  2. 각 위치에서 직전 H개 토큰과 키로 씨앗을 재현하고, 실제로 선택된 토큰의 g값을 계산합니다.
  3. 모든 위치, 모든 깊이의 g값 평균을 냅니다.

워터마크가 없는 텍스트(사람이 쓴 글, 다른 모델이 쓴 글, 키가 다른 워터마크)에서 g값은 동전 던지기입니다. 평균은 0.5 근처에 모입니다. 워터마크가 있으면 g=1이 더 자주 선택됐으므로 평균이 0.5보다 확실히 높습니다.

탐지 신뢰도는 토큰 수에 비례합니다. 토큰 하나로는 아무것도 알 수 없고, 수십 개면 기울기가 보이기 시작하며, 수백 개면 "우연일 확률이 1% 미만"으로 판정할 수 있습니다. 논문은 단순 평균 외에 학습된 베이지안 탐지기도 제안하는데, 이것이 짧은 텍스트에서 훨씬 잘 작동합니다.

이 구조에서 따라 나오는 성질을 정리하면 다음과 같습니다.

상황탐지 결과
Claude 생성 원문g 평균 ≫ 0.5, 탐지됨
사람이 쓴 글g 평균 ≈ 0.5, 미탐지
다른 회사 모델 출력g 평균 ≈ 0.5, 미탐지 (키가 다름)
Claude가 다른 키로 생성g 평균 ≈ 0.5, 미탐지
키 없는 제3자아무것도 계산 불가

마지막 줄이 중요합니다. 키가 없으면 탐지가 불가능합니다. 그래서 Anthropic이 탐지 API를 따로 제공해야 하고, 제3자가 "Claude 탐지기"를 독자적으로 만들 수는 없습니다.

5. 한계: 무엇이 워터마크를 지우는가

워터마크 설계에서 가장 정직하게 봐야 할 부분입니다. Anthropic 스스로도 "가벼운 편집은 워터마크를 완전히 지우지 못하겠지만, 모든 단어를 바꾸는 완전한 재작성은 지운다"고 밝혔습니다.

5.1 편집

단어 하나를 바꾸면 그 위치와 이후 H개 위치의 씨앗이 달라져 신호가 깨집니다. 하지만 나머지 위치는 멀쩡합니다. 200토큰 문단에서 단어 10개를 바꾸면 최대 50개 위치가 손상되고 150개는 남습니다. 여전히 탐지됩니다.

편집 비율이 올라갈수록 신호는 선형적으로 줄어듭니다. 어느 지점에서 탐지 임계값 아래로 내려가는지는 Part 2에서 직접 측정해 보겠습니다.

5.2 패러프레이즈

진짜 위협은 이쪽입니다. 워터마크된 텍스트를 다른 모델(예: 로컬 오픈 모델)에게 "다시 써 줘"라고 시키면 토큰 선택이 전부 그 모델의 것으로 바뀝니다. 의미는 남지만 Claude의 주사위 흔적은 사라집니다.

이 공격은 비용이 매우 낮습니다. 작은 로컬 모델로도 충분하고, 노트북에서도 돌아갑니다. 결과물 품질은 약간 떨어질 수 있지만 "AI가 썼다는 걸 숨기려는 사람"에게는 충분한 거래입니다.

5.3 번역

Anthropic은 Claude가 번역한 텍스트에도 워터마크가 들어간다고 했습니다. 모든 단어를 Claude가 고르기 때문입니다. 반대로, Claude가 쓴 글을 다른 도구로 번역하면 워터마크는 사라집니다. 단어 선택이 전부 바뀌니까요.

5.4 코드

코드에서는 문법이 선택지를 거의 없앱니다. for i in range(n): 다음 줄에 올 수 있는 토큰은 매우 제한적입니다. Anthropic도 "실제 코드에는 영향이 미미하고 주로 주석에 적용된다"고 했습니다. 코드 워터마크는 사실상 주석과 문서화 문자열 워터마크입니다.

5.5 탐지 API 자체

키를 Anthropic만 갖고 있으므로 탐지 결과는 Anthropic의 말을 믿어야 합니다. 탐지 API가 오탐(false positive)을 냈을 때 사용자가 반박할 수단이 구조적으로 없습니다. 학교나 직장에서 이 API를 "AI 사용 판정"에 쓰기 시작하면 이 문제가 현실이 됩니다.

6. 이것이 막는 것과 막지 못하는 것

5절을 다시 보면 패턴이 하나 보입니다. 워터마크를 지우는 방법은 전부 "단어 선택을 Claude가 아닌 다른 주체에게 넘기는 것"입니다. 사람이 고치든, 다른 모델이 다시 쓰든, 번역기를 거치든 마찬가지입니다. 그리고 그 비용은 텍스트 한 편당 몇 초, 로컬 모델 하나입니다.

그래서 저는 이 워터마크를 "탐지 도구"가 아니라 "가공되지 않은 원문에만 붙는 표식"으로 이해하는 것이 정확하다고 봅니다. 누군가 숨기기로 마음먹으면 막지 못합니다. 하지만 숨기려는 수고를 들이지 않은 텍스트는 잡아냅니다.

워터마크가 실제로 잘 작동하는 시나리오는 다음과 같습니다.

  • 대량 자동 생성: 스팸, 리뷰 조작, 콘텐츠 팜처럼 편집 없이 원문을 그대로 쏟아내는 경우. 여기서는 탐지율이 매우 높습니다.
  • 플랫폼 수준 필터링: 개별 글이 아니라 계정 단위로 "이 계정의 글 90%가 Claude 원문이다" 같은 통계를 보는 경우.
  • 규제 준수: EU AI Act가 요구하는 것은 "기계 판독 가능한 표식의 존재"이지 "완벽한 탐지"가 아닙니다. 이 조건은 충족됩니다.

반대로 잘 작동하지 않는 시나리오는 다음과 같습니다.

  • 의도적으로 숨기려는 개인: 패러프레이즈 한 번이면 끝입니다.
  • 저자 판정: 워터마크는 "Claude가 거쳐 갔다"만 말합니다. 사람이 초안을 쓰고 Claude로 교정하면 워터마크가 들어갑니다. Claude가 초안을 쓰고 사람이 전면 재작성하면 워터마크가 빠집니다. 두 경우 모두 "누가 썼나"에 대한 답과 정반대입니다.

그래서 Anthropic이 "저작권이나 저자에 대해 아무 말도 하지 않는다"고 명시한 것입니다. 이 문장은 법적 면책이 아니라 기술적 사실입니다.

7. 정리

항목내용
무엇을 바꾸나토큰 선택에 쓰이는 난수의 출처
무엇을 안 바꾸나텍스트 내용, 토큰 수, 비용, 속도
신호가 들어가는 곳모델이 선택의 여지를 가진 위치 (동의어, 표현)
신호가 안 들어가는 곳사실, 코드, 정답이 하나인 위치
탐지에 필요한 것텍스트 + 시크릿 키 (모델 불필요)
지우는 방법다른 모델로 패러프레이즈, 전면 재작성, 외부 도구 번역
말해 주는 것Claude가 생성/처리했을 가능성
말해 주지 않는 것저자, 소유권, 사용자 신원

Part 2에서는 이 알고리즘을 말로만 설명하는 데서 멈추지 않고, Hugging Face transformers에 이미 구현된 SynthID-Text를 로컬 오픈 모델(Gemma 2 2B)에 걸어 직접 확인합니다. 워터마크 텍스트와 일반 텍스트의 g값 분포가 실제로 어떻게 갈리는지, 몇 토큰부터 탐지가 되는지, 단어를 몇 %까지 바꾸면 사라지는지, 그리고 로컬 모델 패러프레이즈 한 번에 어떻게 되는지를 숫자로 보겠습니다.

참고 자료

더 많은 콘텐츠를 받아보세요

SNS에서 새로운 글과 튜토리얼 소식을 가장 먼저 받아보세요

이메일로 받아보기

관련 포스트