C2PA란 무엇인가요?

C2PA는 Coalition for Content Provenance and Authenticity가 발표한 개방형 기술 표준으로, 미디어가 어떻게 만들어졌는지를 기록하고 그 기록을 암호학적 서명과 함께 파일에 붙입니다. Adobe, OpenAI, Google 제품에서 말하는 Content Credentials가 바로 이것입니다. 가치는 정확히 짚어둘 필요가 있습니다. C2PA는 AI를 탐지하지 않습니다. 검증할 수 있고, 깨졌다는 것도 증명할 수 있는 선언을 실어 나릅니다.

핵심: 파일 안에 함께 이동하는 서명된 출처 기록

C2PA manifest는 자산에 대한 선언—어떤 도구가 만들었는지, 어떤 action이 적용되었는지, digitalSourceType이 출처의 성격을 어떻게 기술하는지—을 묶은 뒤, 자산 자체의 해시와 함께 서명합니다. 따라서 읽는 쪽은 두 가지를 따로 확인할 수 있습니다. 파일이 서명 당시 내용과 여전히 일치하는지, 그리고 서명 인증서를 신뢰하는지입니다. 두 질문 모두 실제 답이 존재하며, 이것이 출처 증명과 추측의 차이입니다.

각 결과를 보여주는 내장 샘플

Adobe Firefly JPEGContent Authenticity Initiative 샘플로 digitalSourceType = trainedAlgorithmicMedia를 담고 있습니다. 서명은 암호학적으로 유효하지만 인증서가 신뢰 목록 밖이라 결과는 trusted가 아닌 valid로 표시됩니다.
인증서가 만료된 OpenAI 이미지같은 CAI 샘플입니다. trainedAlgorithmicMedia 선언은 있지만 서명 인증서가 만료되어 검증이 실패하므로 그 선언은 신뢰할 수 없습니다.
Google Veo MP4같은 구조가 동영상 컨테이너에서 작동하는 사례입니다. 유효한 Google 생성형 AI 자격 증명이 정지 이미지가 아니라 BMFF를 통해 전달됩니다.

확인할 신호

Manifest와 claim선언과 서명을 담는 컨테이너입니다. 이를 읽으면 파일이 자신의 내력에 대해 무엇을 주장하는지 알 수 있습니다.
digitalSourceType출처의 성격을 기술하는 통제 어휘 값입니다. trainedAlgorithmicMedia가 생성형 AI를 가리킵니다.
Claim generator해당 claim을 만든 소프트웨어를 식별합니다. Adobe, OpenAI, Google의 생성형 AI 제품 문자열 등이 들어갑니다.
서명 상태와 신뢰 상태manifest가 자산 해시에 대해 검증되는지, 그리고 별개로 인증서가 신뢰할 수 있는 루트로 연결되는지입니다.

이 기록은 파일 어디에 저장되나요?

C2PA 데이터는 JPEG이 정의한 box 기반 컨테이너인 JUMBF로 직렬화된 뒤, 각 포맷이 부가 데이터를 허용하는 위치에 삽입됩니다. 그래서 같은 자격 증명이 미디어 종류를 넘나들면서도 구조가 바뀌지 않습니다.

  • JPEG: APP11 마커 세그먼트에 기록되며, 일반 디코더는 이 부분을 건너뜁니다.
  • PNG: 전용 청크에 들어가므로 이미지 데이터 안이 아니라 옆에 놓입니다.
  • MP4와 MOV: ISO base media file format의 box 구조에 저장되며, 서명된 동영상은 이렇게 동작합니다.
  • 참조가 아니라 삽입되기 때문에 자격 증명은 파일과 함께 이동하고, 파일이 다시 쓰일 때 함께 사라집니다.

valid와 trusted는 다릅니다

이 표준에서 가장 많은 혼동을 부르는 지점입니다. valid는 암호학적으로 통과했다는 뜻입니다. 서명이 검증되고 자산이 여전히 서명 당시의 해시와 일치하므로, 그 이후 변경이 없었다는 의미입니다. trusted는 인증서에 대한 별개의 질문으로, 검증하는 쪽이 사용하는 목록의 루트로 연결되는지를 봅니다. 완전히 정상인 파일도 검증 측에 해당 루트가 없다는 이유만으로 valid이면서 untrusted로 표시될 수 있으며, 내장된 Firefly 샘플이 정확히 그 경우입니다. 둘을 하나의 배지로 합치면 정작 필요한 정보가 사라집니다.

C2PA가 말해주지 않는 것

이 표준은 서명자가 한 선언을 기록할 뿐, 픽셀을 직접 검사하지 않습니다. manifest에 비가시성 워터마크를 적용했다고 적혀 있더라도, 그 문장을 읽는 것과 워터마크가 실제로 남아 있는지 확인하는 것은 다릅니다. 또한 자격 증명은 생성만큼이나 편집 이력도 자연스럽게 기록하므로, 유효한 manifest가 곧 AI 판정은 아닙니다. 무엇을 선언했는지 읽어야 합니다. 그리고 재인코딩이 이 기록을 지우기 때문에, C2PA가 없다는 사실은 거의 아무 정보도 주지 못합니다. 지워진 파일과 처음부터 서명되지 않은 파일을 구분할 수 없기 때문입니다.

C2PA manifest를 직접 검증하기

  1. 원본 파일에서 시작합니다 — 플랫폼에서 받은 그대로의 파일을 사용합니다. 스크린샷이나 다시 업로드된 사본은 manifest를 잃었을 가능성이 큽니다.
  2. C2PA 검증기를 엽니다 — 파일은 브라우저에서 해석되며, 검증을 위해 업로드하지 않습니다.
  3. 서명 상태를 먼저 확인합니다 — manifest가 검증되는지, 자산 해시에 대해 변조 오류가 나타나지 않는지 봅니다.
  4. 신뢰 상태는 따로 봅니다 — 인증서가 신뢰 루트로 연결되는지 확인하고, valid이지만 untrusted인 결과는 무결성이 아니라 인증서 체인에 대한 설명으로 이해합니다.
  5. manifest가 실제로 선언한 내용을 읽습니다 — AI 관련 결론을 내리기 전에 digitalSourceType, claim generator, 기록된 action을 확인합니다.

한계

manifest 상세가 필요하면 C2PA 검증기를, EXIF·XMP·PNG 파라미터까지 함께 읽으려면 전체 검출기를 사용하세요.

FAQ

C2PA는 무엇의 약자인가요?

Coalition for Content Provenance and Authenticity로, 이 규격을 발표하는 표준 단체입니다. Content Credentials는 같은 기술을 제품에서 부르는 이름입니다.

C2PA가 있으면 AI 생성인가요?

그렇지 않습니다. C2PA는 일반 카메라 사진을 포함해 모든 미디어의 출처를 기록합니다. manifest가 digitalSourceType = trainedAlgorithmicMedia나 생성형 claim generator로 명시할 때만 AI 생성을 가리킵니다.

유효한 파일이 왜 untrusted로 나오나요?

서로 다른 질문이기 때문입니다. valid는 서명이 검증되고 자산이 변경되지 않았다는 뜻이고, trusted는 인증서가 사용 중인 목록의 루트로 연결된다는 뜻입니다. 정상 파일도 동시에 valid이면서 untrusted일 수 있습니다.

C2PA는 제거될 수 있나요?

네, 대개 의도치 않게 제거됩니다. 소셜 플랫폼 재인코딩, 스크린샷, 포맷 변환, C2PA를 지원하지 않는 편집기 등 파일을 다시 쓰는 모든 과정이 manifest를 버립니다.

C2PA를 무료로 확인하려면?

이 사이트의 C2PA 검증기에 파일을 올리면 됩니다. WebAssembly로 컴파일된 Rust가 브라우저 안에서 manifest를 해석하며, 가입도 업로드도 필요 없습니다.

출처와 검증 기록