Claude 워터마크를 문장 수정 없이 제거하는 꼼수를 찾아냄
I figured out a loophole to remove Claude watermark WITHOUT rephrasing
핵심 요약
보이지 않는 유니코드 문자를 삽입해 Claude의 텍스트 워터마크를 효과적으로 우회하는 방법을 개발함.
- 워터마크 우회 — 문장 수정 없이 유니코드 변형 선택자를 삽입하여 워터마크 탐지율을 획기적으로 낮춤
- 탐지 테스트 — 기존의 문장 수정 방식(철자 변경, 마크다운 제거 등)은 워터마크 제거에 효과가 없음을 확인
- 코드의 특성 — 코드 데이터는 엔트로피가 낮아 모델이 워터마크를 거의 삽입하지 않음을 발견
- 기술적 검증 — 다양한 오픈 모델을 대상으로 300회 이상의 테스트를 거쳐 해당 기법의 유효성을 입증
Claude가 쓴 텍스트 워터마크를 단순히 수정(재작성이나 의역 말고)하는 것만으로 지워버릴 수 있을지 궁금해서 직접 실험해 봤다. Claude/OpenAI/Gemini 텍스트 워터마크 생성기랑 탐지기를 만들어서 gpt-oss-20b랑 Qwen 결과물에 온갖 공격을 다 퍼부어 봤거든. 이 기술은 표준 Gumbel-max 샘플링 기반의 유명한 Tournament Sampling을 사용해.
결론부터 말하면 사람들이 효과 있을 거라고 믿는 것들, 거의 다 쓸모없어. 엠대시를 하이픈으로 바꾸거나, 마크다운 다 떼버리거나, 미국식 영어를 영국식으로 바꾸는 거? 하나도 안 먹히더라. 거의 300번 가까이 테스트했는데 탐지 임계값을 넘긴 건 딱 하나, 모든 단어의 40%를 삭제하는 거였는데 이건 뭐 텍스트가 완전히 박살 나니까 의미가 없지.
빡세게 벤치마크 돌려본 결과, 10번 중 10번 다 확실하게 뚫리는 유일한 방법은 텍스트 전체에 보이지 않는 유니코드 변형 선택자(이모지나 CJK 렌더링에 쓰는 그 문자들)를 집어넣는 거였어. 전체 문자의 30% 정도에 적용하니까 워터마크 점수가 45에서 1 밑으로 뚝 떨어지더라. 다른 보이지 않는 문자 트릭이랑 다르게 이건 정규화(normalization)를 거쳐도 살아남아. 왜냐면 이건 정규화 도구가 함부로 지울 수 없는 진짜 의미 있는 코드 포인트거든.
재밌는 사실 하나 더 알려주자면, 코드는 애초에 워터마크가 거의 안 박혀. 워터마크 강도는 모델이 다음 토큰을 얼마나 확신하느냐에 따라 결정되는데, 코드는 엔트로피가 낮아서 어떤 코드 샘플은 공격을 하나도 안 해도 워터마크가 거의 안 찍혀 나오더라고.
이런 공격 시도한 레포가 처음은 아니라는 거 알아. 그래도 대충 만들어서 올리기 싫어서 주말 내내 시간 들여서 여러 오픈 모델들로 제대로 테스트해 봤어.
코드랑 결과물 다 들어있는 레포: https://github.com/aloshdenny/claude-awm
직접 공격 테스트해 볼 수 있는 인터랙티브 데모: https://aloshdenny.com/claude-awm/
한번 확인해 보고 생각 좀 알려줘!



