Claude artık ürettiği dosyalara imzalı C2PA menşe metadata'sı ekliyor. OpenAI'ın görüntü modelleri de öyle ve Gemini de öyle. Bu, gerçek bir menşe sinyalinin ilk kez yükleme uç noktanıza ulaştığı ve büyük olasılıkla işlem hattınızın bunu kimse görmeden sildiği anlamına geliyor.
Kötü niyetle değil. Varsayılan olarak. sharp().resize(), aksi belirtilmedikçe metadata içermeyen temiz bir dosya üretir. ImageMagick de öyle. Pillow da öyle. Çoğu görüntü CDN'i de öyle. Bildirim içeri girer, daha küçük bir JPEG çıkar ve günlüklerinizde bundan hiçbir şey bahsedilmez.
Bu test edilebilir bir hatadır ve test karmaşık değildir. Metadata'nın normal bir işlem hattında nasıl kaybolduğunu, bunun gerçekleştiğini nasıl kanıtlayacağınızı ve geri gelmemesi için CI'ya gidiş-dönüş kontrolünü nasıl dahil edeceğinizi burada bulabilirsiniz. Apidog orkestrasyonu üstlenir; c2patool bayt düzeyinde doğrulamayı yapar.
Düğme
Gerçekte Neler Yok Oluyor
Bir C2PA bildirimi, dosya kapsayıcısına gömülü, kriptografik olarak imzalanmış bir bloktur. Varlığı kimin imzaladığını ve hakkında ne iddia edildiğini kaydeder ve imzalı olduğu için, baytları yeniden imzalamadan değiştirmek, imzayı herhangi bir okuyucunun tespit edebileceği bir şekilde bozar.
Kapsayıcı düzeyi kilit ifadedir. Kapsayıcıyı yeniden yazarsanız bildirim kaybolur.
| İşlem | Bildirim varsayılan olarak korunur mu? |
|---|---|
| Bayt bayt kopyalama veya taşıma | Evet |
sharp().resize().toBuffer() |
Hayır |
ImageMagick convert / magick |
Hayır |
Pillow Image.save() |
Hayır |
| PNG'den WebP'ye, JPEG'den AVIF'e | Hayır |
| Görüntü CDN otomatik optimizasyonu | Genellikle hayır |
| Ekran görüntüsü | Hayır |
| Görüntü düzenleyiciden yeniden kaydetme | Hayır |
| Dönüşüm olmadan S3 yüklemesi | Evet |
'Hayır' sütunundaki her şey, normal bir web uygulamasının kabul ettiği her görüntüye uyguladığı bir şeydir. Küçük resimler, duyarlı varyantlar, format anlaşması, gizlilik için EXIF temizliği. Her biri tek başına makuldür ve her biri menşe zincirini sessizce sona erdirir.
Dikkat çekmek gerekir ki: gizlilik odaklı -strip alışkanlığı genellikle kasıtlıdır, çünkü EXIF GPS koordinatları ve kamera seri numaralarını taşır. Konum verilerini kaldırmak için tüm metadata'yı sıyırmak, menşe bildirimini de kaldırır. Bu iki hedef şimdi çatışıyor ve bunu çözmek, tüm bloğu yok etmek yerine seçici olmak anlamına geliyor.
İki Dakikada Kanıtlayın
Bir şey inşa etmeden önce, sorunun sizde olduğunu doğrulayın. Geçerli bir bildirime sahip bir dosyaya ihtiyacınız var. Claude'un ürettiği herhangi bir görüntü işe yarar veya İçerik Doğruluk İnisiyatifi'nden imzalı bir örnek alabilirsiniz.
Referans CLI'yı yükleyin:
cargo install c2patool
Sabitin gerçekten imzalı olup olmadığını kontrol edin:
c2patool fixtures/signed-sample.png
İddia oluşturucuyu ve imza durumunu belirten bir JSON raporu almalısınız. Şimdi bunu kendi yığınınızdan geçirin ve diğer ucunu kontrol edin:
# Gerçek uç noktanız üzerinden yükleyin
curl -sS -X POST https://api.example.com/v1/assets \
-H "Authorization: Bearer $API_TOKEN" \
-F "file=@fixtures/signed-sample.png" \
-o /tmp/upload.json
# Ön ucunuzun kullanacağı URL üzerinden geri alın
ASSET_URL=$(jq -r '.url' /tmp/upload.json)
curl -sS "$ASSET_URL" -o /tmp/roundtrip.png
# Bildirim korundu mu?
c2patool /tmp/roundtrip.png
Üç olası sonuç vardır ve bunlar farklı şeyler ifade eder:
- Geçerli bir rapor. Bildirim korunmuş. İyi.
- Bildirim bulunamadı. İşlem hattınızdaki bir şey onu kaldırmış. Bu yaygın bir durumdur.
- Bir doğrulama hatası. Bir bildirim mevcut ancak imzası artık baytlarla eşleşmiyor. Bir şey dosyayı değiştirdi ve eski bildirimi ekli bıraktı, bu onu kaldırmaktan daha kötüdür, çünkü herhangi bir alt düzey doğrulayıcıya göre kurcalanmış gibi görünür.
Peşinden koşulacak üçüncü sonuç budur. Genellikle bir dönüştürme kütüphanesinin pikselleri yeniden yazarken metadata bloğunu koruduğu anlamına gelir.
Bunu Yapan Adımı Bulun
Gidiş-dönüş başarısız olursa, işlem hattını ikiye bölün. Tahmin etmek yerine her aşamadan hemen sonra bildirimi kontrol edin.
Olasılık sırasına göre tipik şüpheliler:
1. Yeniden boyutlandırma veya küçük resim adımı. En olası suçlu. sharp'ta, açıkça belirtmedikçe metadata atılır:
// C2PA bildirimini kaldırır
await sharp(input).resize(1200).toFile(output);
// Metadata bloğunu korur
await sharp(input).resize(1200).keepMetadata().toFile(output);
Bloğu korumak gerekli ancak yeterli değildir. Pikseller değiştiği için orijinal imza artık yeni baytlar için geçerli değildir. Çalışan bir menşe zinciri tutmak için çıktıyı yeniden imzalar ve dönüşümü bir eylem beyanı olarak kaydedersiniz, tipik olarak c2pa.resized. Rust, Python, JavaScript ve C için c2pa kütüphanelerinin hepsi bunu destekler.
2. Biçim dönüştürme. AVIF veya WebP sunmak yeni bir kapsayıcı anlamına gelir. Aynı kural: koru ve yeniden imzala, ya da zincirin orada bittiğini kabul et ve bunu belirt.
3. CDN. Birçok görüntü CDN'i teslimat sırasında yeniden yazar. Bazıları artık İçerik Kimlik Bilgilerini doğal olarak korur ve yeniden imzalar; çoğu tarihsel olarak bunları kaldırmıştır. Kullanıcılarınızın gerçekten kullandığı teslimat URL'si üzerinden test yapın, başlangıç noktası üzerinden değil, aksi takdirde hiçbir anlam ifade etmeyen yeşil bir sonuç alırsınız.
4. Yükleme normalizasyonu. Biçimleri standartlaştırmak için alım sırasında yeniden kodlama yapan hizmetler kolayca unutulur, çünkü kod kimsenin okumadığı bir altyapı deposunda yaşar.
Bunu Kalıcı Bir Test Haline Getirin
Tek seferlik bir curl bugünkü durumu kanıtlar. Bir sonraki sprintte birinin yeniden boyutlandırma adımı eklemesini engellemez. Kontrolün CI'da yaşaması gerekir.
İki katmana ayırın, çünkü iki farklı araç iki farklı şeyde iyidir.
Katman bir: Apidog'da gidiş-dönüş
Orkestrasyon, normal bir zincirlenmiş API testidir: bir sabit yükleyin, döndürülen URL'yi yakalayın, varlığı gerçek teslimat yoluyla geri alın, geri dönen şey üzerinde iddiada bulunun.
Apidog'da bu, iki adımlı bir test senaryosudur.
Adım 1: POST /v1/assets
- Gövde: Ekli imzalı sabitinizle
multipart/form-data. Mekanikler, dosya yükleme API'lerini test etmedeki ile aynıdır. - Onaylamalar: durum
201ve yanıt şemanızla eşleşiyor. - URL'yi bir sonraki adıma iletmek için yanıt sonrası betik:
const body = pm.response.json();
pm.environment.set("ASSET_URL", body.url);
pm.test("upload returns a delivery URL", function () {
pm.expect(body.url).to.be.a("string").and.to.include("https://");
});
Adım 2: GET {{ASSET_URL}}
- Onaylamalar: durum
200,Content-Typebeklediğiniz biçim ve gövde boyutu yüklediğinizle yaklaşık aynı. Boyutta dramatik bir düşüş, dosyanın yeniden kodlandığına dair güçlü bir ipucudur.
const uploadedBytes = Number(pm.environment.get("FIXTURE_BYTES"));
const returnedBytes = pm.response.responseSize;
pm.test("asset was not silently re-encoded", function () {
pm.expect(returnedBytes).to.be.above(uploadedBytes * 0.9);
});
Boyut bir sezgisellik, bir kanıt değil. Yüksek sesli hataları ucuza yakalar ve diğer her şeyle aynı pakette çalışır. Standart onaylama kalıpları API onaylamalarında ele alınmıştır.
Katman iki: CI'da bayt düzeyinde kontrol
Bir imzayı doğrulamak, HTTP istemcisinin değil, c2patool'un işi olan kapsayıcıyı ayrıştırmak anlamına gelir. Bunu, gidiş-dönüşün getirdiği dosyaya karşı bir işlem hattı adımı olarak çalıştırın:
# .github/workflows/provenance.yml
name: provenance
on: [pull_request]
jobs:
c2pa-round-trip:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install c2patool
run: cargo install c2patool
- name: Install Apidog CLI
run: npm install -g apidog-cli
- name: Run the round-trip scenario
run: |
apidog run --access-token "$APIDOG_ACCESS_TOKEN" \
-t "$SCENARIO_ID" -e "$ENV_ID" -r cli,html --out-dir ./apidog-reports
env:
APIDOG_ACCESS_TOKEN: ${{ secrets.APIDOG_ACCESS_TOKEN }}
SCENARIO_ID: ${{ vars.PROVENANCE_SCENARIO_ID }}
ENV_ID: ${{ vars.APIDOG_ENV_ID }}
- name: Verify the manifest survived
run: |
set -euo pipefail
curl -sS "$ASSET_URL" -o /tmp/roundtrip.png
c2patool /tmp/roundtrip.png > /tmp/report.json
jq -e '.validation_status == null or (.validation_status | length) == 0' /tmp/report.json
set -euo pipefail önemlidir. Bu olmadan, c2patool sıyrılmış bir dosyada başarısız olduğunda bir uyarı ve yeşil bir derleme üretir ki bu, tam olarak önlemeye çalıştığınız hatadır. Bir işlem hattında Apidog senaryolarını çalıştırmaya yeni başlıyorsanız, GitHub Actions'ta API testlerini otomatikleştirmek kurulumu kapsar.
Katman üç, isteğe bağlı: bir doğrulama uç noktası
Menşe, dahili bir kontrol yerine bir ürün özelliği ise, en temiz tasarım, c2pa kütüphanesini çalıştıran ve yapılandırılmış bir sonuç döndüren kendi hizmetinizdeki küçük bir uç noktadır. O zaman her şey sıradan JSON olarak test edilebilir ve ön ucunuz bir tahmin yerine gerçek bir yanıt alır.
{
"asset_id": "img_9f2c41",
"provenance": {
"status": "verified",
"standard": "c2pa",
"signer": "Anthropic",
"signature_valid": true,
"checked_at": "2026-08-11T09:14:22Z",
"tool": "c2patool/0.9"
}
}
İki değil, üç durumu koruyun. verified, absent ve invalid gerçekten farklı şeyler ifade eder ve absent ile invalid'ı tek bir boolean'a indirgemek sahip olduğunuz en ilginç sinyali çöpe atmak demektir. Doğrulayıcınız kullanılamaz durumdaysa unchecked ekleyin, böylece bir kesinti temiz bir sonuç gibi görünmez.
Şekli OpenAPI tanımınızda belgeleyin ve buna karşı doğrulayın, böylece alanlar bir yeniden düzenlemede kaybolmaz. OpenAPI spesifikasyonları nasıl doğrulanır bu tarafı kapsar.
Saklanmaya Değer Dört Sabit
Bir menşe paketi, sadece mutlu bir yol değil, kasıtlı olarak bozuk girdiler gerektirir.
- Geçerli imzalı dosya.
verifiedbeklenir. Aşırı hevesli sıyırmaları yakalar. - Sıyırılmış dosya. Aynı görüntü, bildirim
exiftool -all=ile kaldırıldı. Hata değil ve kesinlikleverifieddeğil,absentbeklenir. - Kurcalanmış dosya. İmzalandıktan sonra bir baytı değiştirilmiş imzalı dosya.
invalidbeklenir. Bu, sadece bir bloğun var olup olmadığını kontrol etmek yerine imzayı kontrol ettiğinizi kanıtlayandır. - Desteklenmeyen biçim. Hiç bildirim desteği olmayan bir şey. 500 yerine temiz bir
absentbeklenir.
Dört sabit de test senaryosunun yanına depoya işlenmeli. Küçükler, asla değişmezler ve geçen bir test ile anlam ifade eden bir test arasındaki farkı yaratırlar.
Neden Uğraşmalı
Size maliyetlerine göre artan sırada üç neden.
Ürün iddia'nız. Eğer kullanıcı arayüzünüz bir menşe rozeti gösteriyorsa ve işlem hattınız bildirimleri kaldırıyorsa, yeniden boyutlandırmadan geçen her varlık için rozet yanlıştır. Bu, bir kullanıcıdan öğreneceğiniz bir güven sorunudur.
Uyumluluk hikayeniz. Madde 50 ile ilgili herhangi bir şey için C2PA'ya güveniyorsanız, sıyrılmış bir bildirim çalışmayan bir kontroldür. API geliştiricileri için AB Yapay Zeka Yasası Madde 50'deki sağlayıcı ve dağıtıcı ayrımı, hangi görevlerin aslında size ait olduğunu açıklar.
Sinyalin kendisi. Menşe, ancak zincir baştan sona tutarlıysa işe yarar. Bildirimleri sessizce düşüren her işlem hattı, tüm ekosistemi daha az kullanışlı hale getirir; bir şeyi doğrulamaya çalışan siz olduğunuzda bile.
Kendi uç noktalarınıza karşı gidiş-dönüş senaryosunu oluşturmak için Apidog'u indirin, ardından c2patool adımını arkasına bağlayın.
Sıkça Sorulan Sorular
Bir görüntüyü yeniden boyutlandırmak C2PA metadata'sını kaldırır mı? Evet, her yaygın kütüphanede varsayılan olarak. Metadata bloğunu korumak açık bir bayrak gerektirir ve geçerli bir imzayı korumak, dönüştürülmüş çıktıyı yeniden imzalamayı gerektirir.
Bir dosyanın C2PA metadata'sına sahip olup olmadığını nasıl kontrol ederim? Komut satırından c2patool <dosya> komutunu çalıştırın veya dosyayı İçerik Kimlik Bilgileri doğrulama sayfasına sürükleyin.
Bir yeniden boyutlandırma yoluyla C2PA metadata'sını koruyabilir miyim? Evet, ancak sadece koruyarak değil. Bloğu koruyun, ardından c2pa kütüphanelerinden birini kullanarak c2pa.resized gibi bir eylem beyanı ile çıktıyı yeniden imzalayın. Aksi takdirde eski imza yeni baytlarla eşleşmeyecektir.
CDN'ler İçerik Kimlik Bilgilerini kaldırır mı? Birçoğu otomatik optimizasyon yaptıklarında kaldırır. Bazıları artık doğal olarak korur ve yeniden imzalar. Kullanıcılarınızın kullandığı teslimat URL'si üzerinden test yapın, başlangıç noktası üzerinden değil.
Sıyırılmış bir bildirim ile geçersiz bir bildirim arasındaki fark nedir? Sıyırılmış, bildirim bulunamadığı anlamına gelir, bu da dosyanın kökeni hakkında hiçbir şey söylemez. Geçersiz, bir bildirimin mevcut olduğu ancak imzasının baytlarla eşleşmediği anlamına gelir, bu da dosyanın imzalandıktan sonra değiştiği anlamına gelir. Bunları ayrı durumlar olarak tutun.
Apidog doğrudan bir C2PA imzasını doğrulayabilir mi? Gidiş-dönüşü düzenler ve bir doğrulama uç noktasının JSON'u da dahil olmak üzere HTTP yanıtları üzerinde onaylamalar yapar. İmza ayrıştırma işi c2patool'un görevidir, bir CI adımı olarak veya kendi hizmetinizde çalıştırılır. Her ikisini birlikte kullanın.
Gizlilik için EXIF'i sıyırmalı ancak C2PA'yı korumalı mıyım? Bu doğru hedeftir ve seçici bir yaklaşım gerektirir. Genel bir -strip her ikisini de kaldırır. Özellikle önemsediğiniz EXIF bloklarını kaldırın ve C2PA bildirimini sağlam bırakın.
Çıkarım
Menşe metadata'sı API'nize sağlam gelir ve genellikle parça parça ayrılır ve izlemenizdeki hiçbir şey size bunu söylemez. Çözüm, bir sabit, gerçek teslimat yolu üzerinden gidiş-dönüş ve derlemeyi başarısız eden bir c2patool kontrolüdür.
Yirmi dakikalık bir kurulum, ve kullanıcı arayüzünüzde yaptığınız bir iddiayı, işlem hattınızın gerçekten uyguladığı bir garantiye dönüştürür.
Düğme
