Lobsters

How to Hack Time, With C2PA

C2PA로 시간을 해킹하는 법

C2PA 메타데이터의 서명 제외 범위를 악용하면 파일 전체를 서명 대상에서 빼고도 유효한 서명과 타임스탬프를 만들 수 있습니다. 작성자는 이 허점을 이용해 당첨 번호가 발표되기 전에 찍은 사진처럼 보이는 이미지를 만들었으며, 파일 형식별 허용 제외 범위를 검증기가 강제해야 한다고 제안합니다.

AI 요약

C2PA는 이미지나 영상의 출처와 편집 이력을 기록하는 표준입니다. 작성자는 C2PA의 타임스탬프가 과거에 존재한 콘텐츠를 증명하는지 실험합니다. 복권 추첨 몇 시간 전에 당첨 번호가 담긴 사진을 만들었다고 주장하는 이미지가 사례입니다. 사진 자체는 조잡하게 합성했지만, 메타데이터 검증 도구는 서명과 타임스탬프를 유효하다고 표시합니다.

C2PA 서명과 타임스탬프

C2PA 매니페스트에는 보통 두 종류의 서명이 들어갑니다. 첫 번째는 ‘클레임(claim)’ 서명입니다. 카메라 앱은 사진을 특정 시각과 GPS 좌표에서 촬영했다는 내용을 클레임으로 담을 수 있습니다. 작성자는 이전 글에서 Google Pixel Camera 앱 같은 주요 C2PA 구현의 클레임 서명은 원하는 내용을 넣어 서명할 수 있어 신뢰하기 어렵다고 설명했다고 밝힙니다.

두 번째 서명은 타임스탬프 기관(Time Stamp Authority, TSA)이 발급합니다. 기기 시계를 믿지 않고 RFC 3161 프로토콜로 원격 서버에 확인을 요청합니다. 서버는 특정 해시를 특정 시각에 확인했다는 서명을 돌려주고, 그 응답을 C2PA 메타데이터에 넣습니다. TSA가 정직하게 작동한다고 가정하면, 서명한 데이터가 해당 시각 이전에 존재했다는 증거가 됩니다. 다만 Pixel 10은 기기의 시계를 신뢰하는 ‘기기 내 신뢰 타임스탬프’를 도입했습니다. 작성자는 구현을 평가하지는 않았으며 회의적이라고 덧붙입니다. 이번 실험에서는 TSA 자체를 공격하지 않습니다.

서명에서 제외하는 바이트 범위

허점은 C2PA 사양이 임의의 ‘제외(exclusion)’를 허용한다는 점입니다. 파일 안에서 지정한 바이트 범위는 서명 계산에서 빠집니다. 이 기능 자체는 사양에 이미 명시되어 있으며, Neal Krawertz 박사는 2025년 6월 C2PA 결함 목록에서 큰 제외 범위가 탐지되지 않은 채 변경될 수 있다고 지적했습니다. 작성자가 새로 보여주는 점은 공격자가 의도적으로 파일 전체를 제외할 수 있다는 것입니다.

개념 증명 파일의 매니페스트에는 시작 위치 0, 길이 3,995,383인 제외 범위가 들어 있습니다. 이는 파일 전체 길이입니다. 따라서 서명 대상 해시는 파일 내용의 해시가 아니라 빈 문자열의 SHA-256 해시인 47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=가 됩니다. 클레임 서명은 이 해시에 붙고, TSA 서명은 클레임 서명을 증명합니다. 결과적으로 파일 내용은 서명하지 않은 채 유효한 서명과 타임스탬프를 얻습니다. 작성자는 서명 이후 이미지를 편집해도 서명이나 TSA 타임스탬프가 무효화되지 않았으며, 자신이 찾은 C2PA 검증 도구도 이례적인 제외 범위를 표시하지 않았다고 설명합니다.

제외 기능을 없애면 될까요?

파일 전체를 서명에서 제외하면 검증기가 쉽게 거부할 수 있습니다. 그러나 일부 바이트만 제외한 경우에는 그 범위가 이미지의 외관을 바꿀 수 있는지 판단해야 합니다. 작성자는 MD5 해시 충돌 개념 증명을 예로 들며, 작은 범위라도 결과를 크게 바꿀 수 있다고 지적합니다.

그렇다고 제외 기능을 사양에서 완전히 없애기도 어렵습니다. PNG는 각 청크에 CRC32 체크섬을 저장합니다. 서명을 파일에 넣은 뒤 체크섬을 갱신해야 하므로, 체크섬 바이트를 서명 범위에 포함하면 순환 의존성이 생길 수 있습니다. 작성자는 파일 형식별로 제외해도 되는 부분을 명확히 지정하고, 검증기가 그 제한을 반드시 적용하도록 해야 한다고 제안합니다.

Lobsters 반응

  • @olliej — 터무니없습니다. 그런데 이 모든 것이 콘텐츠의 ‘의미적 무결성’ 같은 걸 보존한다는 데 기반한다면, 원시 비트가 왜 중요하죠? 디코딩된 데이터가 중요하지 않나요? 예를 들어 인코딩된 데이터에 서명해도 실제 출력물에 서명하는 것보다 얻는 게 없잖아요. 이미지의 의미를 AI 헛소리 생성기가 판단하게 한다는 명백한 어리석음은 빼고 말입니다. 사진이나 영상에 누가 있는지의 의미는 대체 뭔가요? AI는 흑인을 다른 흑인으로 잘못 식별하거나, 영장 소지자라고 하거나, 좀도둑이라고 판단하는 것으로 잘 알려져 있습니다. 그런 AI라면 흑인의 얼굴을 바꿔도 의미가 달라지지 않았다고 판단하겠죠. 만세!
    • @k749gtnc9l3w — 인코딩된 데이터에 서명해도 실제 출력물에 서명하는 것보다 얻는 게 없다는 말에 대해 답하자면, 비트 단위로 재현 가능한 JPEG 디코딩과 하드웨어 삼각함수 연산을 믿지 않는 것 같습니다. 검증 서버에서 소프트웨어 삼각함수를 돌리는 비용도 내고 싶지 않은 모양이고요.

원문: David Buchanan / 번역·요약: Trawling