메뉴
HN
Hacker News • 43일 전

텍스트 AI 워터마크는 언제나 쉽게 제거된다

IMP
8/10
핵심 요약

오는 2026년부터 시행되는 EU AI 법안에 따라 AI 서비스 제공자들은 생성물에 워터마크를 삽입해야 할 의무를 집니다. 하지만 텍스트는 이미지와 달리 소량의 노이즈도 허용하지 않는 극도로 압축된 매체이기 때문에 완벽한 워터마크 적용은 기술적으로 매우 까다롭습니다. 구글의 SynthID 등 부분적인 해결책들이 등장하고 있으나, 모델 성능 저하와 탐지 비용 등의 트레이드오프를 AI 기업들이 어떻게 극복할지가 핵심 관전 포인트입니다.

번역된 본문

유럽연합(EU) AI 법(AI Act)이 한 달 후인 2026년 8월부터 시행될 예정입니다. 가장 중요한 새로운 요구 사항 중 하나는 제50조로, 모든 AI 출력물은 '인공적으로 생성되었음을 탐지할 수 있어야(detactable as artificially generated)' 한다고 규정합니다. 다시 말해, LLM 서비스 제공업체들이 EU에서 비즈니스를 하려면 출력물에 워터마크, 즉 AI 콘텐츠를 식별하는 데 사용할 수 있는 숨겨진 서명을 적용해야 합니다. LLM 텍스트 워터마킹은 매우 매력적인 문제입니다. 훌륭한 엔지니어링 문제들처럼, 이론적으로 완벽하게 해결하기는 어렵지만 구글의 SynthID나(제가 말씀드릴) OpenAI와 Anthropic의 은밀한 유니코드 트릭 같은 여러 부분적인 해결책이 존재합니다. 올해 말까지 AI 연구소들이 이러한 트레이드오프를 어떻게 탐색해 나갈지 지켜보는 것은 흥미로울 것입니다.

텍스트 워터마킹이 어려운 이유 저는 작년 말 'AI 탐지 도구는 텍스트가 AI 생성물임을 증명할 수 없다'는 글에서 AI 워터마킹에 대해 다룬 적이 있습니다. 디지털 이미지에는 사람의 눈에는 잘 보이지 않는 많은 노이즈가 포함되어 있기 때문에 이미지에 워터마크를 넣는 것은 쉽습니다. 예를 들어, '정확히 이 위치에 있는 이 20개의 픽셀은 항상 같은 색상을 공유한다'와 같은 방식으로 워터마크를 적용할 수 있습니다. 하지만 텍스트는 훨씬, 훨씬 더 어렵습니다. 이미지와 달리 텍스트는 매우 압축된 매체입니다. 사람이 눈치채지 못하게 문장에 어떠한 변경도 가할 수 없습니다(나중에 설명할 한 가지 예외를 제외하고는요). 그렇다면 어떻게 워터마크를 적용해야 할까요? 이는 기본적으로 텍스트 스테가노그래피(steganography, 비밀 코드를 숨기는 기술) 문제이지만, 평문을 임의로 조작할 수 없기 때문에 더욱 어렵습니다. 워터마크를 적용하기 위해 텍스트를 수정하면 출력 품질이 떨어지게 됩니다. 예를 들어, '다섯 번째 글자마다 e를 넣는다'는 것은 좋은 워터마크가 될 수 있지만, 이를 단순하게 적용하면 AI 출력물에 오타가 가득해질 것입니다. 그냥 모델이 알아서 워터마크를 맞추도록 두면 안 될까요? 강력한 AI 모델은 이러한 종류의 제약을 처리할 만큼 똑똑하지만, 사용자의 문제를 해결하는 데 쓰면 더 좋을 추론 시간을 소모하게 되며, 모델이 실제보다 훨씬 덜 똑똑해 보이게 만들 것입니다.

AI 콘텐츠를 탐지하기 위해 워터마크가 필요한가? 정말로 워터마크가 필요할까요? 당신이 Anthropic이고 특정 텍스트 블록을 자사 모델이 생성했는지 여부를 확인해야 한다고 가정해 봅시다. 텍스트를 각 모델에 통과시키면서 모델이 예측한 토큰이 해당 텍스트의 각 토큰과 얼마나 일치하는지 측정하면 되지 않을까요? 결론부터 말하면 그렇지 않습니다. '질문에 대한 Claude Sonnet의 모든 가능한 답변' 공간은 '질문에 대한 워터마크가 적용된 모든 가능한 답변' 공간보다 훨씬 큽니다. 다시 말해, AI가 작성한 것처럼 읽히는 사람의 텍스트에 대해 너무 많은 오탐지(False positive)가 발생합니다. 사람이 우연히 워터마크를 재현할 확률보다, 사람이 우연히 Claude처럼 글을 쓸 확률이 훨씬 높기 때문입니다. 또한 워터마크를 확인하기 위해 모든 Anthropic 모델을 한 텍스트 조각에 대해 실행하는 것은 비용이 감당할 수 없을 정도로 많이 듭니다. EU AI 법은 결국 Anthropic 같은 연구소에 모든 EU 시민에게 무료 워터마킹 서비스를 제공하도록 요구할 것입니다(약속 2 참조). '모델 실행' 접근 방식으로는 이를 수행할 수 없을 것입니다.

SynthID는 어떻게 작동하는가? 제가 아는 한, 텍스트 출력에 워터마크를 적용한다고 공개적으로 밝힌 유일한 AI 제공업체는 SynthID라는 도구를 사용하는 구글입니다. 작동 방식은 다음과 같습니다. LLM이 텍스트를 생성할 때, 이는 일련의 토큰(단어 또는 단어의 일부)을 생성하는 것입니다. 각 단계에서 모델 자체는 단일 토큰을 출력하는 것이 아니라 어휘집에 있는 (약) 10만 개의 모든 토큰 목록을 출력하며, 각 토큰에는 다음 토큰으로 선택될 확률이 표시됩니다. ChatGPT나 Claude Code 같은 도구는 출력을 얻기 위해 가장 가능성이 높은 옵션들 중에서 준무작위(semi-randomly)로 선택합니다. 이러한 준무작위 샘플링 과정은 탐지 가능한 방식으로 영향을 받을 수 있습니다. 예를 들어, '두 번째로 가능성이 높은 토큰을 선택한 다음, 첫 번째, 그 다음 두 번째, 그 다음 첫 번째 토큰을 선택하는 식으로 진행한다'와 같은 샘플링 전략을 선택할 수 있습니다. 이 방식은 여전히 고품질의 출력을 생성하겠지만, 생성된 텍스트에 대해 모델을 다시 실행하여 확인할 수 있을 것입니다.

원문 보기
원문 보기 (영어)
The European Union AI Act will begin to be enforceable in August 2026, one month from now 1 . One of the biggest new requirements is Article 50 , which requires all AI outputs to be “detectable as artificially generated”. In other words, if LLM providers want to do business in the EU, they will have to apply a watermark to their outputs 2 : some hidden signature that can be used to identify AI content. LLM text watermarking is a fascinating problem. Like the best engineering problems, it is theoretically hard to solve perfectly, but has multiple partial solutions: for instance, Google’s SynthID , and (as I’ll argue) some quiet Unicode trickery from OpenAI and Anthropic. It will be interesting to see how the AI labs navigate these tradeoffs before the end of the year. Why text watermarking is hard I wrote about AI watermarking at the end of last year in AI detection tools cannot prove that text is AI-generated . It’s easy to watermark an image, because digital images contain lots of noise that the human eye can’t really see. For instance, you could apply a watermark like “these twenty pixels in these exact spots will always share a color”. Text is much, much harder. Unlike images, text is a very compressed medium: you cannot make any change to a sentence that a human wouldn’t notice (with one exception, which we’ll get to later). So how are you supposed to watermark it? It’s basically a text steganography problem (concealing a secret code), made more difficult because the plaintext cannot be arbitrarily manipulated. Any changes you make to apply the watermark will compromise the quality of the output. For instance, “every fifth letter is an ‘e’” would be a good watermark, but applied naively would make the AI output full of typos. Could you just let the model figure out how to fit the watermark? Strong AI models are smart enough to juggle this kind of constraint 3 , but it’d still consume reasoning time that would be better spent on the user’s problem, and make the model sound much less capable than it is 4 . Do we need watermarks to detect AI content? Do you really need a watermark? If you’re Anthropic, and you’re required to be able to verify whether your models produced a particular block of text, can’t you simply run the text through each model, measuring as you go how closely the model’s predicted tokens match each token from the text? Not really. The space of “all possible Claude Sonnet answers to a question” is way larger than the space of “all possible watermarked answers to a question”. In other words, you’d get too many false positives for human text that reads like it was AI-written. It’s way more likely for a human to accidentally write like Claude than it is for a human to accidentally reproduce a watermark. It would also be prohibitively expensive to run every Anthropic model against a piece of text in order to watermark it. The EU AI Act will eventually require labs like Anthropic to offer free watermarking services to every EU citizen (see Commitment 2). You couldn’t do that with the “run the model” approach. How SynthID works As far as I know, the only AI provider to say they watermark text output is Google, who use a tool called SynthID . Here’s how it works. When an LLM generates text, it’s generating a series of tokens (words or chunks of words). At each step, the model itself doesn’t output a single token, but instead outputs a full list of all (say) 100,000 tokens in its vocabulary, each annotated with the probability that that token will be the next one. Tools like ChatGPT or Claude Code will pick semi-randomly from the most likely options in order to get their outputs. This semi-random sampling process can be influenced in a detectable way. For instance, we could choose a sampling strategy like “we pick the second most likely token, then the first, then the second, then the first, and so on”. That would still produce high-quality output, but you’d be able to re-run the model against the generated text to verify that the pattern holds. However, that’d make verification really expensive, and any slight tweaks to the output would break the pattern and thus break the fingerprint. Is there a better way? Yes. SynthID is a process for assigning each token a “score” based on its previous tokens (for instance, sum the token’s ID with the IDs of its previous three tokens then take mod 5) 5 . To apply the watermark, the model adopts a sampling strategy like “out of the top five most likely tokens, pick the one with the top SynthID score” 6 . The watermark can then be detected by calculating the aggregate SynthID score of a block of text. If it’s suspiciously high, it’s very likely to have been AI-generated. This is basically a version of the common advice that you can identify LLMs by use of the em-dash , except that instead of a list of keywords, it relies on subtle mathematical relationships between words that humans can’t identify. Because the process for assigning the score is trivial, it’s very cheap to run watermark detection. Unicode watermarks via homoglyphs Google have a complicated mathematical rationale for why SynthID doesn’t make the model dumber: supposedly the SynthID scoring is random enough to act like a normal pseudo-random token sampler, just one that leaves a detectable fingerprint on the outputs. But of course this is suspicious. For instance, it’s common to do inference setting temperature to zero, which always picks the model’s most likely next token. In that case, you can’t leave a fingerprint at all (or you have to ignore the user’s preference and pick the second or third choice anyway). If you can’t alter the model outputs, can you still fingerprint the content? Well, kind of. I’m pretty sure OpenAI and Anthropic are sometimes applying fancy Unicode tricks. For instance, you might go through and replace your normal ” ” spaces (unicode U+0020 ) with a three-per-em ” ” space (unicode U+2004 ), or a CJK ideographic ” ” space (unicode U+3000 ). These are called “homoglyphs”, and you can find more of them here . Of course, lots of human-generated text uses homoglyphs. But it’s trivial to encode a pattern of homoglyphs (say, “every third space becomes a three-per-em”) that is much less likely to occur in the wild. Like the SynthID watermark, a homoglyph-based watermark can be detected very cheaply. A homoglyph-based watermark is cheaper to apply than SynthID: you could even do it entirely on the client. I don’t think this is a conspiracy theory. Claude Code was definitely doing this to tag suspicious requests from Chinese users (exploiting homoglyphs for the ’ character in “Today’s date”, though they’ve since walked that back). In the last few years, I’ve noticed that when I copy blocks of text from ChatGPT and paste them into VSCode, sometimes VSCode marks some or all of the spaces as unusual Unicode characters 7 . Are OpenAI and Anthropic using homoglyphs as an AI-generated watermark? I’m not sure. But they’re definitely using homoglyphs. Text watermarks can be trivially removed The AI Act (specifically, its associated Code of Practice ) requires watermarking to be “embedded within the content in a manner that is difficult for it to be separated from the content”. However, text watermarks can be trivially removed. To remove unicode homoglyph watermarking, you simply have to replace all the homoglyphs with their “real” character equivalents. If you have access to even a relatively weak un-watermarked LLM 8 , you can strip out SynthID watermarking by asking that LLM to paraphrase the text content. Because the watermark is inherent to subtle vocabulary choices, re-wording the content will remove the watermark. You could even do it by hand, although at that point it’s not really AI-generated content anymore. Since there will be some kind of free public watermark testing tool, you can just keep tweaking until it comes back negative. Moreover, the AI Act requires watermarking techniques to be “interoperable… as far as th