Microsoft Paint의 로컬 AI 이미지에는 왜 보이지 않는 GUID가 들어갈까
Microsoft Paint의 AI 기능을 두고 흥미로운 역공학 결과가 나왔습니다. Copilot+ PC에서 이미지 자체는 로컬 NPU로 생성되지만, 생성 과정 전체가 완전히 오프라인으로 끝나는 것은 아니며 결과 이미지의 픽셀에는 서버가 발급한 GUID가 보이지 않는 형태로 들어간다는 분석입니다.
이 발견은 “로컬 AI”라는 표현이 실제로 어디까지를 뜻하는지 다시 묻게 합니다. 모델 추론은 기기에서 실행되더라도 프롬프트 검토, 안전성 확인, 출처 증명 같은 주변 절차는 클라우드와 연결될 수 있기 때문입니다.
무엇이 발견됐나
리버스 엔지니어 Xusheng Li는 Microsoft Paint와 Photos에 포함된 AI 구성 요소를 분석했습니다. 연구에 따르면 Paint의 Cocreator는 지원되는 Copilot+ PC에서 Stable Diffusion 계열 모델을 로컬로 실행합니다.
그러나 이미지 생성 전에 Paint는 사용자가 입력한 프롬프트와 선택한 스타일을 Microsoft 서버의 검토 API로 보냅니다. 서버 응답에는 수정된 프롬프트와 함께 두 종류의 식별자가 포함됩니다.
- promptGenerationId: 프롬프트 생성 요청을 나타내는 식별자
- watermarkId: 결과 이미지에 삽입되는 식별자
watermarkId는 16바이트 GUID입니다. Paint는 로컬에서 생성한 이미지에 이 값을 보이지 않는 워터마크로 삽입한 뒤 결과를 사용자에게 제공합니다.
연구자가 분석한 호출 흐름에서는 워터마크 삽입이 실패하면 워터마크 없는 이미지를 반환하는 대신 생성 작업 전체를 오류로 처리했습니다. 이는 비가시 워터마크가 선택적인 장식이 아니라 생성 파이프라인의 필수 단계로 설계됐을 가능성을 보여줍니다.
보이는 Copilot 로고와는 다른 기능이다
Paint에는 AI 생성 이미지에 Copilot 로고를 표시하는 설정이 있습니다. 사용자는 이 로고를 항상 표시하거나, 저장할 때 물어보거나, 표시하지 않도록 선택할 수 있습니다.
하지만 이번에 발견된 GUID 기반 워터마크는 이 설정과 별개의 기능입니다. 화면에서 보이는 로고를 끄더라도 픽셀 수준의 비가시 워터마크가 함께 꺼진다고 볼 근거는 없습니다.
분석된 Watermarker.dll은 GUID에 식별용 바이트와 체크섬을 더한 144비트 메시지를 구성합니다. 이어 이미지의 여러 블록에 작은 수치 변화를 반복적으로 넣습니다. 육안으로 알아보기는 어렵지만 디코더가 정보를 복원할 수 있도록 설계된 방식으로 보입니다.
연구자는 512×512 시험 이미지에 워터마크 함수를 적용했을 때 많은 픽셀 값이 미세하게 달라지는 것도 확인했습니다. 다만 “많은 픽셀이 바뀐다”는 사실이 곧 눈에 띄는 화질 저하를 의미하는 것은 아닙니다. 비가시 워터마크는 사람의 눈으로 구별하기 어려운 작은 변화를 넓게 분산하는 방식으로 구현될 수 있습니다.
Microsoft가 공식적으로 밝힌 내용
Microsoft의 공식 지원 문서는 Paint Cocreator가 Copilot+ PC의 NPU를 이용해 이미지를 로컬로 생성한다고 설명합니다. 동시에 Microsoft 계정으로 로그인하고 인터넷에 연결해야 하며, 안전한 AI 사용을 위한 클라우드 서비스에 접근한다고 명시합니다.
또한 Cocreator를 포함한 Paint의 AI 기능으로 만든 이미지에는 C2PA 표준에 기반한 Content Credentials가 포함된다고 안내합니다. C2PA는 이미지가 어떤 도구와 과정을 거쳐 만들어졌는지 확인할 수 있도록 출처와 편집 이력을 암호학적으로 기록하는 표준입니다.
따라서 다음 세 가지는 Microsoft 공식 설명과 역공학 결과가 대체로 일치합니다.
- 지원되는 기기에서는 이미지 생성 모델이 로컬에서 실행된다.
- AI 기능 사용에는 계정 로그인과 인터넷 연결이 필요하다.
- 생성 이미지에는 AI로 만들어졌음을 나타내는 출처 정보가 포함된다.
반면 픽셀 속 GUID의 정확한 삽입 방식, GUID와 서버 요청의 관계, 연속된 요청이 어느 범위까지 연결될 수 있는지는 현재 Microsoft 공식 문서가 아니라 Xusheng Li의 정적·동적 분석에 근거한 내용입니다.
이것을 사용자 추적이라고 불러도 될까
GUID가 서버에서 발급되고 이미지에 삽입된다는 사실만으로 특정 사용자를 추적한다고 단정할 수는 없습니다. 실제 추적 가능성을 판단하려면 Microsoft가 서버에서 watermarkId를 어떤 계정·프롬프트·시간 정보와 함께 얼마나 오래 보관하는지, 외부에서 워터마크를 읽을 수 있는지, Microsoft가 어떤 상황에서 이 정보를 조회하는지를 알아야 합니다.
공개된 분석은 GUID가 프롬프트 검토 응답에서 생성되고 C2PA 정보와 픽셀 워터마크에 사용되는 흐름을 보여줍니다. 그러나 Microsoft 내부의 보존 정책이나 조회 절차까지 입증하지는 않습니다.
그러므로 현재 가장 정확한 표현은 다음과 같습니다.
Paint의 로컬 AI 이미지에는 서버가 발급한 이미지별 식별자가 비가시 워터마크로 삽입되는 것으로 분석됐다. 다만 이 식별자가 실제 사용자 추적에 어떻게 이용되는지는 공개된 정보만으로 확정할 수 없다.
‘로컬 AI’는 계층별로 구분해서 봐야 한다
이번 사례는 로컬 AI를 하나의 단순한 상태로 보면 안 된다는 점을 보여줍니다. 최소한 다음 항목을 따로 확인해야 합니다.
- 모델 추론이 어디에서 실행되는가
- 프롬프트와 원본 이미지가 서버로 전송되는가
- 안전성 검사가 로컬인지 원격인지
- 결과물에 식별자나 출처 정보가 들어가는가
- 인터넷이 끊긴 상태에서도 전체 기능을 사용할 수 있는가
- 서버가 요청과 식별자를 얼마나 오래 보관하는가
Paint Cocreator는 이미지 생성 계산 자체는 로컬에서 수행하지만, 프롬프트 검토와 식별자 발급에는 원격 서비스가 관여하는 혼합형 구조로 보는 것이 타당합니다.
이 구조가 반드시 나쁘다고만 할 수는 없습니다. AI 생성물의 출처 표시는 허위 정보와 조작 이미지에 대응하는 데 도움이 되고, 안전성 검토는 악용을 줄일 수 있습니다. 문제는 사용자가 “로컬 생성”이라는 문구만 보고 모든 데이터가 기기를 떠나지 않는다고 오해할 수 있다는 점입니다.
결론
Microsoft Paint의 사례는 로컬 AI 시대의 중요한 투명성 문제를 드러냅니다. 연산 위치만 공개하는 것으로는 충분하지 않습니다. 프롬프트가 어디로 전송되는지, 결과물에 어떤 식별 정보가 들어가는지, 그 정보가 어떻게 보관되고 사용되는지도 함께 설명돼야 합니다.
이번 역공학 결과는 기술적으로 상세하고 실제 서버 응답까지 확인했다는 점에서 주목할 만합니다. 다만 아직 Microsoft의 공식 반론이나 세부 해명이 확인되지 않은 만큼, “비밀 사용자 추적이 입증됐다”는 식으로 확대해서는 안 됩니다.
확인된 핵심은 더 좁고도 충분히 중요합니다. 로컬에서 생성된 AI 이미지라고 해도 생성 과정 전체가 로컬이라는 뜻은 아니며, 결과물에는 사용자가 화면에서 볼 수 없는 출처·식별 정보가 포함될 수 있습니다.