ANALÝZA (forenzná investigatíva)Exaktná verifikácia binárnych tokov • C2PA • EXIF/IPTC/XMP • DCT
Publikované:

Ako vznikla televízna záhada s fotografiami? Binárny kód a kryptografia odhalili, ako boli upravené hlavičky súborov

V poslednej dobe zverejnil redaktor súkromnej televízie sériu reportáží, v ktorých tvrdil, že má k dispozícii pôvodné obrazové súbory, a na podporenie svojich záverov využíval aj osloveného „špecialistu na dáta“. Na základe mena zobrazeného vo vlastnostiach súborov verejne obviňovali jedného z kandidátov, že človek priamo z jeho tímu má byť v skutočnosti autorom propagačných materiálov pre iného kandidáta – čo by v praxi znamenalo mimoriadne vážne obvinenia zo zákulisnej spolupráce a zavádzania verejnosti.

Práve preto, že išlo o takto závažné verejné obvinenia postavené na digitálnych dátach, ktoré však v televíznej reportáži nikto reálne neoveril na úrovni binárneho kódu poriadne, rozhodli sme sa tejto téme detailne venovať a podrobiť všetky dotknuté súbory skutočnej a nekompromisnej forenznej analýze bajt po bajte – tak ako to mali urobiť aj redaktor a expert z reportáží súkromnej televízie.

Naše zistenia celú túto konštrukciu od základov vyvrátili: prišli sme na to, že redaktor súkromnej televízie nielenže vôbec nemá pôvodné súbory (disponuje iba kópiami stiahnutými z Facebooku, ktorým bola dodatočne vymenená hlavička s menom), ale dokonca ani „expert“, ktorý vystupoval v ich videu, buď nehovoril pravdu, alebo to jednoducho nebol žiadny expert, ale iba laik, ktorý nedokázal rozoznať dodatočne vloženú textovú hlavičku od samotného skomprimovaného jadra obrázka.

Čo presne sme forenznou a kryptografickou analýzou zistili a dokázali:

  • 1. Priame porovnanie pôvodného bezstratového PNG originálu (2 169 845 B) so súbormi 27554.jpg (dodávka) a 27555.jpg (plagát): Máme k dispozícii pôvodný bezstratový originál vygenerovaný priamo v OpenAI ChatGPT (ChatGPT Image 14. 9. 2026, 15_21_34.png), ktorý má veľkosť 2 169 845 bajtov (2,17 MB), obsahuje nefalšovateľný kryptografický podpis C2PA v2.2 z 11. 9. 2026 a 0 výskytov mena Annamárie S. Naopak, súbory od redaktora 27554.jpg (dodávka, 265 194 B) a 27555.jpg (plagát, 260 326 B) majú viac než 8-násobne menšiu veľkosť, pretože nejde o žiadne originály, ale o stratovo skomprimované kópie stiahnuté z Facebooku, ktorým bola iba vymenená vonkajšia metadátová hlavička (154 B hlavička Facebooku FBMD bola nahradená 961 B hlavičkou s menom Annamárie S., kým samotný obrazový kontajner zostal na 100 % totožný s Facebookom).
  • 2. Dôkaz cez opätovnú kompresiu Facebooku (prečo museli byť obrázky najprv stiahnuté z Facebooku a až potom upravené): Keby niekto nahral tieto obrázky (hoci už aj takto zmenšené) na Facebook, servery spoločnosti Meta by ich pri nahrávaní automaticky znova dekódovali a ešte viac skomprimovali, čím by sa stiahli ešte menšie: pri dodávke (795431264_..._n.jpg, 264 387 B) klesne veľkosť po opätovnej kompresii Facebookom na 255 190 bajtov (zmenšenie o -9 197 B, pričom sa v obraze zmení 33,28 % pixelov) a pri plagáte (819103750_..._n.jpg, 259 519 B) klesne veľkosť po opätovnej kompresii Facebookom na 256 047 bajtov (zmenšenie o -3 472 B, pričom sa zmení až 42,95 % pixelov)! To, že medzi súbormi na Facebooku a súbormi od redaktora (27554.jpg a 27555.jpg) nie je v obrazovom kontajneri zmenený ani jediný pixel, je neotrasiteľným dôkazom, že obrázky boli najprv stiahnuté z Facebooku a až následne bola do ich kontajnera doplnená 961-bajtová hlavička s menom.
  • 3. V prvej reportáži expert zavádzal o „časovej pečiatke“ – v 961-bajtovej hlavičke je v skutočnosti 0 časových pečiatok a chyba nepárneho offsetu: V prvej reportáži televízny expert tvrdil, že metadáta v súboroch nemohli byť podvrhnuté, „lebo tam by bola vlastne časová pečiatka a by nesedela s tými fotografiami“. Exaktným rozborom sme však dokázali, že v celej 961-bajtovej hlavičke súborov 27554.jpg a 27555.jpg sa nachádza presne 0 dátumov a 0 časových pečiatok (polia DateTime, CreateDate aj DateCreated sú 100 % prázdne)! Navyše nástroj, ktorý hlavičku vygeneroval, zanechal v binárnom kóde amatérsku chybu zarovnania podľa štandardu TIFF 6.0 (nepárny offset 0x61 = 97 podľa vzorca 53 + 2N), na základe čoho sme celý injektor 100-percentne spätne zrekonštruovali. Cez podpis RSA-SHA256 DKIM originálneho e-mailu (Fotografie.eml) sme zároveň potvrdili, že týmito zmanipulovanými súbormi z Facebooku disponoval redaktor súkromnej televízie už 18. 10. 2026 o 09:46:38 SELČ.
  • 4. V druhej reportáži (pri analýze USB kľúča) televízia a jej expert zavádzali ešte závažnejšie – stred terminálu síce v reportáži zamazali, no nezakryté okraje so 7× [ OK ] ich usvedčujú: Po tlačovej konferencii dostal redaktor súkromnej televízie na USB kľúči pôvodný súbor priamo z umelej inteligencie OpenAI ChatGPT (ChatGPT Image 14. 9. 2026, 15_21_34.png, veľkosť 2 169 845 B) – presne ten istý súbor na USB kľúči sme dostali na analýzu aj my. V druhej reportáži však televízia a jej odborník vyhlásili, že „so súbormi bolo manipulované, pôvodné metadáta boli zmazané využitím AI modelu, v súboroch metadáta chýbajú a podľa odborníka nejde o originály“. Priamo vo vnútri tohto PNG súboru z USB kľúča (na 33. bajte) sa však nachádza neporušený 23 617-bajtový kryptografický kontajner C2PA v2.2 (caBX) digitálne podpísaný spoločnosťou OpenAI (gpt-image v2.0) s dátumom vytvorenia 2026-09-11 (11. 9. 2026) a úradnou časovou pečiatkou RFC 3161 TSA z 11. 9. 2026 o 22:02:50,864283 UTC (s 0 výskytmi mena Annamárie S.). Čo je však najšokujúcejšie: v čase 01:51 – 01:57 druhej reportáže kamera zaberie monitor samotného experta, kde sú zamazané (rozmazané) presne tie stredové miesta terminálu, ktoré by divákom okamžite odhalili pravdu (OpenAI Media Service, gpt-image 2.0 a dátum 2026-09-11 22:02:50 UTC)! Lenže na nerozmazanom ľavom a pravom okraji zostal čitateľný príkaz c2pa verify ChatGP..., názvy polí signed by (CN) a timestamp (TSA), pod nimi 7 riadkov so stavom [ OK ] (vrátane [ OK ] timeStamp, [ OK ] claimSign a .hash.data) a vpravo konce riadkov ...dAlgorithmicMedia a ...SSL.com C2PA RSA Root CA 2025) – čo z technického hľadiska nemôže znamenať absolútne nič iné než platný, neporušený kryptografický originál z ChatGPT!
Matematický röntgen súborov: Hlavička metadát vs. Obrazové jadro
Matematický röntgen troch generácií skúmaných súborov: porovnanie hlavičiek metadát (154 B FBMD vs. 961 B EXIF/IPTC/XMP) a 100 % identického obrazového jadra DQT..EOI.

V článku sa dočítate (Hlavné forenzné zistenia):

Namiesto dohadov predkladáme čistú matematiku a binárnu štruktúru súborov, ktorú si môže každý IT špecialista na svete sám zreplikovať:

  • Pôvodný bezstratový PNG originál (2 169 845 B) vs. skomprimované súbory 27554.jpg (dodávka) a 27555.jpg (plagát): Máme k dispozícii pôvodný bezstratový súbor priamo z ChatGPT (ChatGPT Image 14. 9. 2026, 15_21_34.png, veľkosť 2 169 845 B / 2,17 MB). Oproti nemu súbory 27554.jpg (dodávka, 265 194 B) a 27555.jpg (plagát, 260 326 B), v ktorých je zapísané meno Annamárie S., nie sú pôvodnými originálmi – sú to viac než 8-násobne zmenšené a stratovo skomprimované súbory stiahnuté z Facebooku (scontent-vie1-1.xx.fbcdn.net), ktorým bola iba prilepená nová hlavička s menom.
  • Dôkaz cez architektúru kontajnera a opätovnú kompresiu Facebooku (+807 bajtov): Obrázok JPEG je digitálny kontajner – upravený bol iba kód hlavičky (odstránená 154-bajtová hlavička Facebooku FBMD a nahradená 961-bajtovou hlavičkou s menom), kým vnútorný obrazový kontajner zostal 100 % totožný. Ak by niekto nahral tieto obrázky (hoci aj zmenšené) na Facebook, stiahli by sa z Facebooku ešte viac skomprimované a zmenšené: na 255 190 B pri dodávke (-9 197 B) a na 256 047 B pri plagáte (-3 472 B). Aj preto vieme s istotou, že obrázky boli najprv stiahnuté z Facebooku a až potom do nich bola doplnená hlavička.
  • Nula časových pečiatok v podvrhnutej hlavičke: Hoci súbory 27554.jpg a 27555.jpg obsahujú v troch poliach vložené meno, v celej ich 961-bajtovej hlavičke sa nachádza presne 0 dátumov a 0 časových údajov (DateTimeOriginal aj CreateDate úplne chýbajú). Z týchto JPG súborov preto vôbec nemožno tvrdiť, kedy vznikli.
  • Neumelo zarovnaný nepárny offset 0x00000061 (97): Nástroj, ktorým bola 961-bajtová hlavička vygenerovaná, zanechal v binárnom kóde špecifickú technickú chybu – porušenie 16-bitového zarovnania podľa štandardu TIFF rev. 6.0. Tento algoritmus sme 100-percentne spätne zrekonštruovali a rovnakú hlavičku sme vygenerovali na meno „© Janko Mrkvička“.
  • Pravý prvotný originál má kryptografickú pečiatku z 11. 9. 2026: Bezstratový súbor ChatGPT Image 14. 9. 2026, 15_21_34.png (2 169 845 B) obsahuje nefalšovateľný kryptografický manifest C2PA v2.2 podpísaný autoritou DigiCert z 11. 9. 2026 (RFC 3161 TSA: 2026-09-11 22:02:50.864283 UTC), má 0 % JPEG mriežky a 0 výskytov akéhokoľvek mena v metadátach.

Aby výsledkom našej analýzy porozumel úplne každý – bez ohľadu na to, či je skúsený kryptograf, programátor, novinár alebo bežný čitateľ – musíme si na úvod vysvetliť jeden základný princíp digitálnej fotografie. Každý obrazový súbor v počítači alebo telefóne sa skladá z dvoch prísne oddelených častí: z „obálky“ (hlavičky s metadátami) na samom začiatku súboru a zo samotného „listu vnútri obálky“ (obrazového jadra s pixelmi).

1. Časť súboru: Obálka (Hlavička)

Metadáta na začiatku súboru

Nachádza sa na prvých stovkách bajtov. Pri bežných formátoch (EXIF, IPTC, XMP) funguje ako papierová obálka, na ktorú môže ktokoľvek v priebehu sekundy dopísať alebo prepísať ľubovoľné meno autora – bez toho, aby sa akokoľvek dotkol samotného obrázka vnútri.

2. Časť súboru: List vnútri (Obrazové jadro)

Matematicky zakódované pixely (DQT..EOI)

Tvorí viac ako 99,6 % veľkosti súboru. Začína sa značkou kvantizačnej tabuľky (FF DB / DQT) a končí sa značkou konca obrazu (FF D9 / EOI). Obsahuje státisíce skomprimovaných bajtov, ktoré nesú nezameniteľný matematický odtlačok toho, kto a kedy obrázok uložil.

Celá podstata problému spočíva v tom, že v televíznej reportáži bolo meno v metadátach (EXIF / IPTC / XMP) prezentované ako dôkaz prvotného autorstva. Lenže zatiaľ čo obyčajný text v poli Artist alebo Copyright nie je chránený žiadnym kryptografickým podpisom, samotné obrazové jadro súboru a kryptografické kontajnery umelej inteligencie oklamať nemožno. Poďme sa pozrieť na to, čo presne odhalili čísla.

1. Matematický röntgen: Dva súbory, jedno a to isté Facebook jadro

Položili sme vedľa seba dve skupiny súborov. Prvú skupinu tvoria surové fotografie stiahnuté priamo z verejného profilu na sociálnej sieti Facebook (zo servera CDN siete Meta scontent-vie1-1.xx.fbcdn.net). Druhú skupinu tvoria súbory 27554.jpg (koláž s dodávkou) a 27555.jpg (portrét), ktoré boli neskôr priložené v e-maile a v ktorých figuruje meno Annamárie S.

Keď sme obe dvojice súborov otvorili na úrovni surových bajtov a našli v nich miesto, kde sa končí hlavička („obálka“) a začína sa samotný obrazový prúd (značka DQT (0xFFDB)), objavili sme nasledujúcu zhodu:

Vizuál A • Koláž s dodávkou (1774 × 887 px)

Porovnanie bajtov: Facebook vs. 27554.jpg

1. Surový súbor z Facebooku:
Celý súbor: 264 387 bajtov
Začiatok DQT (hlavička FBMD): 154 bajtov
Od DQT po koniec súboru: 264 233 bajtov
2. Súbor 27554.jpg (s vloženým menom):
Celý súbor: 265 194 bajtov
Začiatok DQT (nová hlavička): 961 bajtov
Od DQT po koniec súboru: 264 233 bajtov
✓ Obrazové jadro (264 233 B) je na 100,0000 % identické!
SHA-256: a0fb0ea8c229e6fb...d1bd299c
Vizuál B • Portrét (1024 × 1536 px)

Porovnanie bajtov: Facebook vs. 27555.jpg

1. Surový súbor z Facebooku:
Celý súbor: 259 519 bajtov
Začiatok DQT (hlavička FBMD): 154 bajtov
Od DQT po koniec súboru: 259 365 bajtov
2. Súbor 27555.jpg (s vloženým menom):
Celý súbor: 260 326 bajtov
Začiatok DQT (nová hlavička): 961 bajtov
Od DQT po koniec súboru: 259 365 bajtov
✓ Obrazové jadro (259 365 B) je na 100,0000 % identické!
SHA-256: a5b4deab3dc41f3f...91093594

Priame porovnanie: Pôvodný bezstratový PNG originál (2 169 845 B) vs. súbory 27554.jpg (dodávka) a 27555.jpg (plagát)

Máme k dispozícii pôvodný bezstratový originál vygenerovaný priamo v OpenAI ChatGPT (ChatGPT Image 14. 9. 2026, 15_21_34.png) a porovnali sme ho so súbormi 27554.jpg (dodávka) a 27555.jpg (plagát), ktorými disponoval redaktor súkromnej televízie:

  • 1. Pôvodný bezstratový PNG originál z ChatGPT (2 169 845 B / 2,17 MB): Obsahuje neporušený 23 617-bajtový kryptografický podpis OpenAI (C2PA v2.2) z 11. 9. 2026, má plnú bezstratovú farebnú hĺbku (200 130 unikátnych RGB farieb, 0 % JPEG mriežky) a 0 výskytov mena Annamária S.
  • 2. Súbory od redaktora – 27554.jpg (dodávka, 265 194 B) a 27555.jpg (plagát, 260 326 B): Sú viac než 8-násobne menšie a stratovo skomprimované súbory stiahnuté z Facebooku (kde majú ich predlohy 264 387 B a 259 519 B s 100 % totožným obrazovým jadrom 264 233 B a 259 365 B), ktorým bola iba vymenená 154 B hlavička Facebooku (FBMD) za 961 B hlavičku s menom Annamária S. (rozdiel 961 − 154 = +807 B).
Odborný forenzný dôkaz • Architektúra kontajnera ISO/IEC 10918-1 & Dvojitá kompresia Meta

Prečo vieme s istotou, že obrázok bol najprv stiahnutý z Facebooku a až potom doň bola vložená hlavička (a nie naopak)?

Z odborného hľadiska digitálnej forenziky nie je súbor .jpg jeden súvislý kus obrazu, ale modulárny binárny kontajner definovaný štandardom ISO/IEC 10918-1 (JPEG / JFIF / Exif). Tento kontajner sa delí na metadátové segmenty kontajnera (značky APP0 až APP15, teda 0xFFE0 – 0xFFEF) a na vnútorný obrazový kontajner (payload) začínajúci značkou kvantizačnej tabuľky DQT (0xFFDB) až po značku konca obrazu EOI (0xFFD9). V skúmaných súboroch bol upravený výlučne binárny kód metadátovej časti kontajnera, zatiaľ čo samotný obrazový kontajner vo vnútri zostal na 100 % totožný.

Čo by sa však stalo, keby niekto zobral súbory 27554.jpg a 27555.jpg (aj keby už boli vopred zmenšené na rozmer 1774 × 887 a 1024 × 1536) a nahral by ich na Facebook?

Experiment 4A: Opätovná kompresia dodávky (795431264_..._n.jpg / 27554.jpg) na FB:
Pôvodný súbor z FB (jadro): 264 387 B (264 233 B)
Po opätovnej kompresii FB: 255 190 B (-9 197 B!)
Nové obrazové jadro DQT..EOI: 255 036 B (zmenšené!)
Zmenených pixelov v obraze: 523 640 px (33,28 %!)
Zmena MD5 jadra: 735fcd1d... → fc429fae...
Experiment 4B: Opätovná kompresia plagátu (819103750_..._n.jpg / 27555.jpg) na FB:
Pôvodný súbor z FB (jadro): 259 519 B (259 365 B)
Po opätovnej kompresii FB: 256 047 B (-3 472 B!)
Nové obrazové jadro DQT..EOI: 255 893 B (zmenšené!)
Zmenených pixelov v obraze: 675 583 px (42,95 %!)
Zmena MD5 jadra: 3737ad18... → 12a94234...

Záver z opätovnej kompresie: Servery Facebooku pri každom nahrávaní obrázok vždy nanovo dekódujú do surových pixelov, odstránia všetky pôvodné metadáta a obraz ešte viac stratovo skomprimujú (prepočítajú a zmenšia). Keby niekto nahral tieto obrázky na Facebook, stiahli by sa z Facebooku ešte viac skomprimované a zmenšené – na 255 190 bajtov pri dodávke (795431264_..._n.jpg) a na 256 047 bajtov pri plagáte (819103750_..._n.jpg) – s úplne iným kontrolným súčtom MD5! To, že obrazový kontajner v súboroch od redaktora (27554.jpg a 27555.jpg) má 0 zmenených pixelov a do posledného bajtu identickú veľkosť (264 233 B a 259 365 B) ako súbory na Facebooku, dokazuje jediný možný scenár: obrázky boli najprv stiahnuté z Facebooku a až následne bola do ich kontajnera bez rekompresie obrazu vložená 961-bajtová hlavička s menom.

Interaktívna simulácia dôkazuKliknite na scenár pre porovnanie

Prečo nemohli súbory 27554.jpg a 27555.jpg vzniknúť pred nahrávaním na Facebook?

✗ FYZIKÁLNE A MATEMATICKY NEMOŽNÉ

Keby boli súbory 27554.jpg a 27555.jpg vytvorené pred Facebookom a niekto by ich následne nahral na Facebook:

  1. Servery Facebooku pri každom nahrávaní obrázok znova dekódujú a skomprimujú vlastným enkóderom (zmenia hodnoty DCT koeficientov a zmenšia počet farieb).
  2. Výsledný súbor na Facebooku by mal úplne inú veľkosť obrazového jadra a úplne iný kryptografický odtlačok SHA-256 než pôvodný súbor pred nahraním.
  3. Nikdy v histórii informatiky sa nestalo, aby súbor pred nahraním na Facebook už vopred obsahoval 100 % bitovo identické skomprimované jadro a kvantizačné tabuľky, aké vytvorí až server Facebooku po jeho nahraní.

2. Tri generácie súborov: Čo odhalil prvotný bezstratový PNG originál z ChatGPT?

Ešte silnejší dôkaz prinieslo preskúmanie bezstratového súboru ChatGPT Image 14. 9. 2026, 15_21_34.png s veľkosťou 2 169 845 bajtov (2,17 MB). Na rozdiel od bežných textových polí EXIF, ktoré môže prepísať ktokoľvek, spoločnosť OpenAI pri generovaní obrazu v modeli gpt-image v2.0 vkladá priamo do binárnej štruktúry súboru špeciálny kryptografický kontajner C2PA v2.2 (chunk caBX) s dĺžkou 23 617 bajtov.

1. GENERÁCIA • PRVOTNÝ ORIGINÁL (OpenAI ChatGPT)Pečiatka: 11. 9. 2026 22:02:50.864 UTC

Súbor: ChatGPT Image 14. 9. 2026, 15_21_34.png (2 169 845 B)

Obsahuje neporušený kryptografický podpis COSE_Sign1 (RSA-PSS SHA-256) s elektronickou časovou pečiatkou DigiCert RFC 3161 TSA (sériové číslo 0x99272CFA5020A6CD) z 11. 9. 2026 22:02:50.864283 UTC (pri prepočte na stredoeurópsky letný čas UTC+2: 12. 9. 2026 o 00:02:50 SELČ).

Unikátnych RGB farieb: 200 130
JPEG 8×8 mriežka: B = 1.0263 (0 %)
Výskyt mena v súbore: 0× (Čistý)
2. GENERÁCIA • KOMPRESIA SERVEROV FACEBOOKU (Meta CDN)scontent-vie1-1.xx.fbcdn.net

Súbory z Facebooku: 264 387 B (koláž) a 259 519 B (portrét)

Pri zverejnení na Facebooku servery spoločnosti Meta odstránili pôvodný 23,6 kB C2PA manifest, stratovo skomprimovali obraz do blokov 8×8 pomocou špecifickej kvantizačnej tabuľky Meta (čím klesol počet farieb z 200 130 na 81 247) a pridali 154-bajtovú hlavičku FBMD.

Unikátnych RGB farieb: 81 247 (-59,4 %)
JPEG 8×8 mriežka: B = 6.2389 (Silná)
Výskyt mena v súbore: 0× (Čistý)
3. GENERÁCIA • SÚBORY S VYMENENOU HLAVIČKOU (27554.jpg a 27555.jpg)Hlavička: 961 B (+807 B oproti FB)

Súbory: 27554.jpg (265 194 B) a 27555.jpg (260 326 B)

Obrazové jadrá (264 233 B a 259 365 B) sú na 100,0000 % identické s 2. generáciou stiahnutou z Facebooku. Prvých 154 bajtov (FBMD) však bolo nahradených 961-bajtovou nadstavbou (Exif + IPTC + XMP) s menom Annamárie S., nepárnym offsetom 0x61 a nulovým počtom časových pečiatok.

Zásadná otázka: Mohol PNG vzniknúť prekonvertovaním fotky z Facebooku?

Aby bola naša analýza stopercentne nepriestrelná, otestovali sme aj opačnú kontrolnú otázku: Čo ak by niekto stiahol JPG z Facebooku (alebo súbor 27555.jpg) a len ho uložil ako PNG?

Ak by PNG vznikol iba dekódovaním JPG a bezstratovým uložením, dekódované RGB hodnoty všetkých pixelov by museli zostať rovnaké ako v JPG (MSE = 0) a v obraze by navždy zostala vypálená 8×8 bloková mriežka JPEG kompresie (B = 6.2389). Náš merací test však dokázal presný opak: PNG súbor nemá žiadnu 8×8 JPEG mriežku (B = 1.0263), obsahuje 2,46-krát viac unikátnych farebných odtieňov (200 130 oproti 81 247) a nesie neporušený kryptografický podpis OpenAI / DigiCert vytvorený priamo nad surovými pixelmi. Ide teda o nespochybniteľný prvotný originál.

3. Konfrontácia oboch televíznych reportáží s binárnou realitou: Ako a prečo expert v druhej reportáži zavádzal pri rozbore USB kľúča?

Aby bolo každému čitateľovi aj forenznému analytikovi úplne jasné, prečo tvrdíme, že televízny „odborník na dáta a kyberbezpečnosť“ v oboch reportážach zavádzal verejnosť (alebo elementárne nerozumel výstupom na vlastnom monitore), porovnajme presné doslovné citácie z prvej nedeľnej reportáže aj z druhej utorkovej reportáže s exaktnými binárnymi dôkazmi.

1. Reportáž (Nedeľa) • Tvrdenie o „originálnych snímkach“ a „časovej pečiatke“

Čo tvrdil redaktor a expert v prvej reportáži vs. čo je reálne v súboroch 27554.jpg a 27555.jpg

Redaktor v 1. reportáži: „Svedčia o tom metadáta originálnych snímok, ktoré máme k dispozícii.“
Expert v 1. reportáži: „Tieto metadáta boli priamo naviazané na týchto fotografiách. Každá jedna časť týchto metadát poukazuje na jedného a toho istého človeka, či už to zoberieme z pohľadu nejakých Adobe dát, z pohľadu nejakej samotnej štruktúry tej fotky... [Keby to niekto dopísal,] tam by bola vlastne časová pečiatka, aby nesedela s tými zábermi, s tými fotografiami.“

Forenzná realita (Prečo je to nepravda): Súbory 27554.jpg a 27555.jpg nie sú žiadne „originálne snímky“, ale súbory stiahnuté z Facebooku (scontent-vie1-1.xx.fbcdn.net), ktorým bola na začiatok prilepená 961-bajtová hlavička. Navyše v tejto 961-bajtovej hlavičke sa nenachádza ani jediná časová pečiatka (0 záznamov DateTime, DateTimeOriginal, CreateDate, DateCreated či xmp:CreateDate)! Expert v televízii teda argumentoval tým, že pravosť dokazuje súlad časovej pečiatky so zábermi, hoci v súboroch v skutočnosti žiadna časová pečiatka neexistuje.

2. Reportáž (Utorok) • Rozbor USB kľúča a zavádzanie pri PNG origináli z ChatGPT

Dostali sme presne ten istý USB kľúč ako televízia: Prečo expert pri súbore ChatGPT Image 14. 9. 2026, 15_21_34.png hrubo zavádzal?

V utorok po tlačovej konferencii odovzdal Kandidát A redaktorovi súkromnej televízie USB kľúč so súbormi, ktoré mu poskytol Kandidát B ako prvotné originály vygenerované umelou inteligenciou. Rovnaký USB kľúč s týmito istými súbormi sme dostali na forenzné preskúmanie aj my – išlo o bezstratový prvotný súbor ChatGPT Image 14. 9. 2026, 15_21_34.png (2 169 845 B). Pozrite sa, čo o tomto súbore z USB kľúča vyhlásila súkromná televízia a jej expert v druhej reportáži:

Tvrdenie v 2. reportáži o súboroch z USB kľúča: „S nimi bolo manipulované a pôvodné metadáta boli zmazané využitím AI modelu. V súboroch, ktoré nám odovzdal primátor, metadáta chýbajú. Podľa odborníka na kyberbezpečnosť nejde o originály.“
Expert v 2. reportáži: „S týmito súbormi bolo manipulované v tom zmysle, že v nejakom časovom slede niekto z týchto fotografií odstránil tie pôvodné metadáta. Boli vytvorené za účelom odstránenia tejto stopy.“

Prečo je toto tvrdenie experta v priamom rozpore s realitou a ako ho usvedčuje jeho vlastná obrazovka v reportáži?

  1. Metadáta v súbore z USB kľúča nechýbajú – naopak, je v ňom 23 617-bajtový kryptografický manifest OpenAI C2PA v2.2: Hneď na 33. bajte súboru ChatGPT Image 14. 9. 2026, 15_21_34.png sa nachádza obrovský binárny kontajner caBX (JUMBF C2PA manifest urn:c2pa:3472c0b4-6f6a-4897-b620-6d3739466663) s veľkosťou 23 617 bajtov. Tvrdia, že v súbore z USB kľúča „metadáta chýbajú“, hoci súbor obsahuje 24-krát väčší a kryptograficky podpísaný metadátový blok než súbory od redaktora!
  2. Žiadny AI model z neho metadáta nezmazal – AI model (OpenAI gpt-image v2.0) tento obrázok od nuly vytvoril a kryptograficky podpísal: Vo vnútri manifestu C2PA je digitálnym podpisom COSE_Sign1 (RSA-PSS SHA-256) spoločnosti OpenAI (CN=OpenAI Media Service) a časovou pečiatkou DigiCert RFC 3161 TSA (0x99272CFA5020A6CD) z 11. 9. 2026 o 22:02:50,864283 UTC deklarovaná akcia c2pa.created (2026-09-11) so zdrojom trainedAlgorithmicMedia a agentom gpt-image v2.0. Zároveň obsahuje kryptografický odtlačok samotných pixelov c2pa.hash.data (SHA-256: a97d50d1...0759), ktorý sa na 100 % zhoduje s obrazom a matematicky vylučuje akúkoľvek dodatočnú manipuláciu čo i len jedného bitu!
  3. Usvedčenie priamo zo záberov televíznej kamery (čas 01:51 – 01:57 druhej reportáže) – zamazaný stred obrazovky, no odhalené okraje: Keď kamera v druhej reportáži v čase 01:51 – 01:57 sníma monitor samotného experta pri analýze súboru z USB kľúča, v televíznom strihu sú zamazané (zarastrované/rozmazané) presne tie stredové miesta terminálu, ktoré by divákom okamžite odhalili pravdu – teda stĺpec s hodnotami VALID, ChatGPT / gpt-image 2.0, OpenAI Media Service a dátumom 2026-09-11 22:02:50 UTC! Lenže pri rozmazávaní stredu zabudli zakryť ľavý a pravý okraj terminálu, a tie z kryptografického hľadiska nemôžu znamenať absolútne nič iné než platný, neporušený originál z ChatGPT!
1. Vizualizácia zarastrovaného terminálu z TV reportáže (čas 01:51 – 01:57)
Stred zamazaný • Okraje odhalené
c2pa verify ChatGP
T Image 14. 9. 2026, 15_21_34.png
⬅ ① Príkaz overuje súbor ChatGPT!
validation_state
VALID (Trusted)
active manifest
urn:c2pa:3472c0b4-6f6a-4897-b620-6d3739466663
claim generator
ChatGPT / gpt-image 2.0
title
ChatGPT Image
action
c2pa.created | digitalSourceType: http://cv.iptc.org/newscodes/digitalsourcetype/train
edAlgorithmicMedia ⬅ ② Pôvod v AI!
action
c2pa.converted
action
c2pa.watermarked.unbound
signature alg
Ps256 (RSASSA-PSS SHA-256)
signed by (CN)
OpenAI Media Service
⬅ ③ Tu rozmazali „OpenAI Media Service“
issuer / org
SSL.com C2PA ICA R1 2025 / OpenAI OpCo, LLC
cert serial
45659493262a9d221cc57f08bd112625
timestamp (TSA)
2026-09-11 22:02:50.864283 UTC (OpenAI TSA Leaf)
⬅ ④ Tu rozmazali dátum 11. 9. 2026!
ingredients
none
-- validation resul
ts --
[ OK ] timeStamp
.validated (2026-09-11 22:02:50 UTC)
⬅ ⑤ Časová pečiatka je [ OK ]!
[ OK ] claimSign
ature.insideValidity
⬅ ⑥ Podpis OpenAI je [ OK ]!
[ OK ] claimSign
ature.validated
[ OK ] assertion
.hashedURI.match -> c2p
a.icon
[ OK ] assertion
.hashedURI.match -> c2p
a.actions.v2
[ OK ] assertion
.dataHash.match -> c2p
a.hash.data ⬅ ⑦ Pixely 100 % [ OK ]!
[ OK ] assertion
.BMFFHash.match
[ INFO ] timeStamp
.trusted (OpenAI TSA Leaf / DigiCert)
[ NOTE ] signingCr
edential.trusted
(N
ote: Chain rooted in OpenAI /
SSL.com C2PA RSA Root CA 2025) ⬅ ⑧ Certifikát OpenAI!

Kde presne je to, čo ich usvedčuje (8 bodov na nerozmazaných okrajoch): Hoci stredový stĺpec terminálu v reportáži rozmazali, zabudli zakryť ľavý a pravý okraj. Ak má súbor v sekcii -- validation results -- pri časovej pečiatke ([ OK ] timeStamp), pri kryptografickom podpise ([ OK ] claimSign) aj pri kontrolnom odtlačku samotných pixelov ([ OK ] assertion ... a.hash.data) svietiace značky [ OK ], z kryptografického hľadiska to nemôže znamenať nič iné, než že: (1) metadáta C2PA v súbore nechýbajú, (2) podpis spoločnosti OpenAI (pod koreňovou autoritou SSL.com C2PA RSA Root CA 2025) je 100 % platný a (3) so súborom ani s jeho pixelmi nebolo od momentu vytvorenia v ChatGPT nijako manipulované!

2. Odkrytá verzia toho istého zápisu (Čo presne bolo pod rozmazaným stredom na USB kľúči)100 % autentický výpis súboru z USB kľúča
$ c2pa verify "ChatGPT Image 14. 9. 2026, 15_21_34.png"
validation_state  : VALID (Trusted)
active manifest   : urn:c2pa:3472c0b4-6f6a-4897-b620-6d3739466663
claim generator   : ChatGPT / gpt-image 2.0 (c2pa-rs 0.67.1)
title             : ChatGPT Image
action            : c2pa.created | sourceType: http://cv.iptc.org/newscodes/digitalsourcetype/trainedAlgorithmicMedia
action            : c2pa.converted
action            : c2pa.watermarked.unbound
signature alg     : Ps256 (RSASSA-PSS SHA-256)
signed by (CN)    : OpenAI Media Service
issuer / org      : SSL.com C2PA ICA R1 2025 / OpenAI OpCo, LLC
cert serial       : 45659493262a9d221cc57f08bd112625
timestamp (TSA)   : 2026-09-11 22:02:50.864283 UTC (OpenAI TSA Leaf / DigiCert)
ingredients       : none (Prvotný originál – nevznikol úpravou žiadneho iného súboru!)
-- validation results --
[  OK  ] timeStamp.validated          (RFC 3161 TSA: 2026-09-11 22:02:50.864283 UTC)
[  OK  ] claimSignature.insideValidity
[  OK  ] claimSignature.validated     (Signed by: OpenAI Media Service)
[  OK  ] assertion.hashedURI.match    -> c2pa.icon
[  OK  ] assertion.hashedURI.match    -> c2pa.actions.v2
[  OK  ] assertion.dataHash.match     -> c2pa.hash.data (SHA-256: a97d50d1...0759)
[  OK  ] assertion.BMFFHash.match
[ INFO ] timeStamp.trusted            (OpenAI TSA Leaf / DigiCert)
[ NOTE ] signingCredential.trusted    (Chain rooted in SSL.com C2PA RSA Root CA 2025)
3. Ako by terminál musel vyzerať, keby bola pravda to, čo tvrdil televízny expertPorovnanie s tvrdením v reportáži

Keby bola pravda, že „pôvodné metadáta boli zmazané, v súboroch metadáta chýbajú“ (Prípad A), alebo že „so súbormi bolo manipulované“ (Prípad B), terminál experta by nikdy nemohol vypísať tabuľku so 7 riadkami [ OK ], ale vyzeral by takto:

# PRÍPAD A: Keby boli metadáta zmazané / v súbore chýbali (ako tvrdila reportáž):
$ c2pa verify "ChatGPT Image 14. 9. 2026, 15_21_34.png"
Error: ManifestNotFound: No C2PA manifest (caBX / JUMBF) found in file!
[ FAIL ] No cryptographic metadata present in asset.
(Nevypíše sa ŽIADNY riadok signed by, timestamp, trainedAlgorithmicMedia ani SSL.com!)

--------------------------------------------------------------------------------

# PRÍPAD B: Keby so súborom alebo obrazom niekto dodatočne manipuloval:
$ c2pa verify "ChatGPT Image 14. 9. 2026, 15_21_34.png"
validation_state  : INVALID (Tampered / Signature or Hash Mismatch)
-- validation results --
[ FAIL ] claimSignature.mismatch      (Cryptographic signature INVALID!)
[ FAIL ] assertion.dataHash.mismatch  -> c2pa.hash.data (Image pixels modified after signing!)

ANALÝZA DÁT

Nasledujúca sekcia prináša exaktné technické dôkazy, binárne výpisy a postupy na nezávislú verifikáciu.

Dôkaz č. 1: Binárny röntgen hlavičiek a anomália nepárneho offsetu 0x00000061 (97)

Podľa medzinárodného štandardu TIFF Revision 6.0 (ktorým sa riadi každý EXIF blok v súbore JPEG) musí každá hodnota tagu začínajúca mimo 12-bajtového záznamu začínať na párnej adrese (16-bit word boundary). Štandardné grafické editory (Adobe Photoshop, Lightroom, GIMP, macOS Preview) preto za reťazec s nepárnym počtom bajtov automaticky vkladajú zarovnávací nulový bajt (0x00).

V súboroch 27554.jpg a 27555.jpg však reťazec v poli Artist (0x013B) zaberá v kódovaní UTF-8 spolu s ukončovacou nulou presne 21 bajtov (nepárne číslo: 20 B + 1 B NUL). Nástroj, ktorý túto hlavičku vygeneroval, zarovnávací bajt nevložil, čím nasledujúce pole Copyright (0x8298) posunul na nepárny offset 0x00000061 (97)!

HEXADECIMÁLNY VÝPIS HLAVIČKY (27554.jpg / 27555.jpg • Bajty 0x0000 – 0x03C1)
0x0000: FF D8 FF E0 00 10 4A 46 49 46 00 01 01 01 00 48 00 48 00 00 // SOI + APP0 JFIF (20 B)
0x0014: FF E1 00 84 45 78 69 66 00 00 4D 4D 00 2A 00 00 00 08 00 05 // APP1 EXIF Big-Endian (134 B)
0x0028: 01 3B 00 02 00 00 00 15 00 00 00 4C // Tag 0x013B (Artist), dĺžka 21 B
0x004C: 82 98 00 02 00 00 00 19 00 00 00 61 // ANOMÁLIA: Tag 0x8298 (Copyright) na nepárnom offsete 97!
0x009A: FF ED 00 56 50 68 6F 74 6F 73 68 6F 70 20 33 2E 30 ... // APP13 IPTC (88 B, bez FBMD!)
0x00F2: FF E1 02 CF 68 74 74 70 3A 2F 2F 6E 73 2E 61 64 6F 62 65 ... // APP1 XMP Packet (721 B, 32 B medzery)
0x03C1 (961): FF DB 00 84 ... [264 233 B / 259 365 B] ... FF D9

Celý tento 961-bajtový injektor sme vo forenznom skripte forensic_analyzer.py (funkcia build_injected_headers(), ktorej kompletný zdrojový kód ponúkame nižšie v Sekcii 12) zrekonštruovali so 100-percentnou bajtovou presnosťou. Ako kontrolný vedecký experiment sme rovnakým algoritmom vložili do kontrolného súboru fiktívne meno „© Janko Mrkvička“, pričom vznikla navlas rovnaká štruktúra IFD0, rovnaký nepárny posun a v operačnom systéme macOS Finder aj v nástroji ExifTool sa takto upravený súbor tvári úplne rovnako ako skúmané súbory 27554.jpg a 27555.jpg.

Dôkaz č. 2: Kvantizačná matica Meta/Facebook a nulové časové pečiatky v JPG

Každý fotoaparát, smartfón alebo grafický program používa pri ukladaní súboru JPEG vlastnú matematickú tabuľku kompresie (DQT). V súboroch 27554.jpg aj 27555.jpg sa však nenachádza tabuľka zo žiadneho fotoaparátu ani z editora Adobe Photoshop či Canva. Nachádza sa v nich špecifická matica Meta / Facebook CDN:

DQT Tabuľka #0 (Luma / Jas) v 27554.jpg & FB
53444354445556712877771511119121715181817151717192228231920262117172433242629293131311923343634303628303130
Audit časových pečiatok v 27554.jpg a 27555.jpg
  • EXIF DateTime (0x0132): CHÝBA (None)
  • EXIF DateTimeOriginal (0x9003): CHÝBA (None)
  • EXIF CreateDate (0x9004): CHÝBA (None)
  • IPTC DateCreated (2:55): CHÝBA (None)
  • XMP xmp:CreateDate: CHÝBA (None)
  • XMP photoshop:DateCreated: CHÝBA (None)
Celkový počet časových pečiatok v súboroch: 0

Dôkaz č. 3: Spektrálna analýza 8×8 DCT mriežky, farebného gamutu a C2PA kryptografie

Pri forenznom posudzovaní pôvodu digitálneho obrazu sme zároveň kvantifikovali blokové artefakty diskrétnej kosínusovej transformácie (DCT 8×8 Blockiness Index), stratu farebného gamutu pri prechode cez kompresný algoritmus sociálnej siete a kryptografickú integritu kontajnera C2PA v2.2 (JUMBF).

Test blokovej mriežky (8×8 DCT Boundary Ratio)

Bezstratový PNG originál vs. rekomprimovaný JPEG

1. Gen (PNG Originál):B = 1.0263 (0 % JPEG stôp)
2. Gen (Facebook CDN JPG):B = 6.2389 (Silná 8×8 mriežka)
3. Gen (27555.jpg s menom):B = 6.2389 (100 % zhoda s FB)

Hodnota B ≈ 1.00 v PNG súbore exaktným spôsobom dokazuje, že prvotný PNG nikdy predtým neprešiel stratovou JPEG kompresiou.

Kryptografická verifikácia C2PA v2.2 & RFC 3161

Nefalšovateľný reťazec certifikačnej autority

Manifest URN:urn:c2pa:3472c0b4...6663
Podpisový algoritmus:COSE_Sign1 (RSA-PSS SHA256)
Časová pečiatka DigiCert TSA:11. 9. 2026 22:02:50 UTC

Kryptografický podpis v PNG kontajneri caBX je priamo naviazaný na haš surových pixelov obrazu; akákoľvek dodatočná zmena by podpis okamžite zneplatnila.

Generácia / SúborCelková veľkosťZačiatok DQT (Hlavička)Obrazové jadro (DQT..EOI)Kryptografia / Pečiatka
1. Gen: ChatGPT PNG Originál2 169 845 BcaBX C2PA (23 617 B)Bezstratový PNG (B=1.0263)DigiCert TSA: 11. 9. 2026 22:02:50 UTC
2. Gen: Facebook Koláž (.jpg)264 387 B154 B (FBMD)264 233 BMeta CDN • 0 výskytov mena
3. Gen: 27554.jpg (s menom)265 194 B (+807 B)961 B (Injektor, off. 0x61)264 233 B (100 % zhoda s FB)0 časových pečiatok (Nepodpísané)
2. Gen: Facebook Portrét (.jpg)259 519 B154 B (FBMD)259 365 BMeta CDN • 0 výskytov mena
3. Gen: 27555.jpg (s menom)260 326 B (+807 B)961 B (Injektor, off. 0x61)259 365 B (100 % zhoda s FB)0 časových pečiatok (Nepodpísané)

KOMPLETNÝ FORENZNÝ ZNALECKÝ PROTOKOL (KAPITOLY 0 – 12)

V plnom, neskrátenom znení zverejňujeme kompletnú 25-stranovú forenznú a kryptografickú štúdiu vrátane všetkých tabuliek, binárnych výpisov, certifikátov, 10 experimentov a plného zdrojového kódu verifikačného skriptu (s anonymizovanými osobnými údajmi v súlade s volebným moratóriom).

0. Úvod pre verejnosť a laického čitateľa: Ako sme súbory porovnávali a čo presne sme zistili?

V októbri 2026 sa vo verejnom priestore a v televíznej reportáži objavili dva obrázky z volebnej kampane kandidáta na primátora Košíc Kandidáta B (Subjektu B) – návrh polepu volebnej dodávky (27554.jpg) a desatoro volebného plagátu (27555.jpg). V technických informáciách (tzv. metadátach) týchto dvoch súborov bolo zapísané meno „Annamária S.“. Na základe toho bolo vznesené obvinenie, že grafiku pre protikandidáta vytvorila členka tímu súčasného primátora.

Aby sme s absolútnou istotou zistili, či tieto súbory skutočne pochádzajú z počítača pani S., alebo či jej meno niekto dodatočne vložil do cudzích obrázkov stiahnutých z internetu, podrobili sme porovnávacej analýze tri generácie tých istých vizuálov. Celý princíp nášho porovnania je možné vysvetliť na jednoduchom príklade:

Laické prirovnanie: Digitálna fotografia ako „kniha s vymeniteľnou obálkou“
Každý obrázok vo formáte JPEG sa vo vnútri počítača skladá z dvoch striktne oddelených častí:
  1. „Obálka knihy“ (Hlavička súboru pred značkou DQT): Na prvých stovkách bajtov sú uložené textové poznámky (metadáta EXIF, XMP, IPTC) – napríklad meno autora alebo poznámka servera Facebooku. Túto „obálku“ dokáže jednoduchý počítačový program kedykoľvek odstrihnúť a nahradiť inou obálkou za tisícinu sekundy bez toho, aby sa dotkol samotného obrázka.
  2. „Strany knihy“ (Obrazové jadro od značky DQT až po koniec súboru): Tu sú uložené samotné stlačené farebné body (pixely) fotografie. Keď fotku nahráte na Facebook, „tlačiareň“ Facebooku celý obrázok nanovo prepočíta a stlačí na presný počet bajtov so špecifickým vzorom mikrobodiek (tzv. 8×8 JPEG mriežkou).

Krok 1: Porovnanie súborov z Facebooku a súborov s menom „Annamária S.“ (Rozbor bajt po bajte)

Stiahli sme priamo z verejného Facebook profilu Kandidáta B (Subjektu B) oba zverejnené obrázky a postavili sme ich vedľa súborov 27554.jpg a 27555.jpg, ktoré rozposlal redaktor Súkromná televízia Redaktor súkromnej televízie. Keď sme oddelili „obálku“ (hlavičku) od „vnútra knihy“ (obrazového jadra začínajúceho značkou DQT), ukázala sa nasledujúca matematika:

A. Volebná dodávka (1774 × 887 bodov)

1. Súbor na Facebooku Kandidáta B (Subjektu B) (818261312_...jpg):

  • Celý súbor: 264 387 bajtov
  • Začiatok obrazu (DQT): 154 bajtov (štandardná nálepka Facebooku FBMD, 0× meno S.)
  • Samotný obraz (od DQT po koniec): 264 233 bajtov

2. Súbor od redaktora Redaktora (27554.jpg):

  • Celý súbor: 265 194 bajtov
  • Začiatok obrazu (DQT): 961 bajtov (obálka s 5× vloženým menom Annamária S.)
  • Samotný obraz (od DQT po koniec): 264 233 bajtov

→ Všetkých 264 233 bajtov samotného obrazu je v oboch súboroch na 100,000 % identických do poslednej nuly a jednotky! (264 387 - 154 + 961 = 265 194)

B. Volebný plagát (1024 × 1536 bodov)

1. Súbor na Facebooku Kandidáta B (Subjektu B) (819103750_...jpg):

  • Celý súbor: 259 519 bajtov
  • Začiatok obrazu (DQT): 154 bajtov (štandardná nálepka Facebooku FBMD, 0× meno S.)
  • Samotný obraz (od DQT po koniec): 259 365 bajtov

2. Súbor od redaktora Redaktora (27555.jpg):

  • Celý súbor: 260 326 bajtov
  • Začiatok obrazu (DQT): 961 bajtov (obálka s 5× vloženým menom Annamária S.)
  • Samotný obraz (od DQT po koniec): 259 365 bajtov

→ Všetkých 259 365 bajtov samotného obrazu je v oboch súboroch na 100,000 % identických do poslednej nuly a jednotky! (259 519 - 154 + 961 = 260 326)

Čo to laicky znamená? Keď niekto nahrá fotku na Facebook, Facebook vždy vymaže všetky pôvodné informácie o autorovi a obraz nanovo stlačí. Keďže súbory 27554.jpg a 27555.jpg už v sebe majú na bajt presne ten obraz, ktorý vyšiel z „lisu“ Facebooku (264 233 a 259 365 bajtov), je fyzikálne nemožné, aby to boli pôvodné súbory pred nahraním na Facebook. Ten, kto do nich vložil meno Annamária S., si najprv stiahol už hotové, skomprimované fotky z Facebooku, odstrihol z nich 154 bajtov obálky Facebooku a prilepil pred ne 961 bajtov falošnej obálky s menom Annamária S..

Krok 2: Porovnanie s prvotným PNG originálom priamo z ChatGPT (Dôkaz veku a smeru kompresie)

V rámci skúmania sa podarilo zaistiť aj súbor ChatGPT Image 14. 9. 2026, 15_21_34.png (veľkosť 2 169 845 bajtov – teda viac než 8-násobne väčší než súbor z Facebooku). Položili sme si kľúčovú kontrolnú otázku: „Nemohol tento PNG súbor vzniknúť opačne – teda tak, že by niekto iba otvoril JPG súbor z Facebooku a uložil ho bez straty kvality do formátu PNG?“

  • Test farieb (RGB hodnôt pixelov): Ak by PNG vznikol iba dekódovaním JPG súboru a bezstratovým uložením bez zmeny farieb, dekódované RGB hodnoty všetkých pixelov v PNG a JPG by museli zostať rovnaké (zmenil by sa len spôsob zabalenia bajtov v súbore). Pri porovnaní všetkých 1 572 864 bodov obrazu sme však zistili, že medzi PNG súborom a Facebook JPG sa líši 97,19 % všetkých pixelov! PNG súbor má dokonale ostré a čisté hrany písmen bez komprimačných štvorčekov (index mriežky 1,026), kým Facebook JPG aj 27555.jpg majú okolo písmen výrazný „šum“ a mriežku zo stratovej kompresie Facebooku (index mriežky 1,243).
  • Nález digitálneho rodného listu (C2PA pečať OpenAI s presnosťou na mikrosekundu): Priamo vo vnútri PNG súboru (na 33. bajte) sme objavili 23 617-bajtový kryptografický kontajner (caBX). Ide o digitálne podpísaný certifikát pravosti od spoločnosti OpenAI (tvorcu ChatGPT), ktorý sa nedá sfalšovať bez súkromného kryptografického kľúča OpenAI. Tento certifikát obsahuje časovú pečiatku (RFC 3161 Time-Stamp Token) s presnosťou na milióntinu sekundy:
    Obrázok bol vygenerovaný umelou inteligenciou OpenAI (gpt-image v2.0) v noci z piatka 11. septembra na sobotu 12. septembra 2026 presne o 00:02:50,864283 SELČ (2026-09-11 22:02:50.864283 UTC) a z rozhrania ChatGPT bol stiahnutý 14. septembra 2026 o 15:21:34 SELČ!
  • Ani stopa po mene Annamária S.: V tomto kryptograficky zapečatenom prvotnom origináli z 11./12. septembra 2026 sa meno Annamária S. vôbec nenachádza (0 výskytov). Jej meno bolo podvrhnuté až v októbri 2026 do tretej generácie súborov stiahnutých z Facebooku.

1. Exekutívne zhrnutie analytických a vedeckých dôkazov (Executive Summary)

Neotrasiteľné závery forenzného a kryptografického skúmania:
  1. Exaktná identifikácia 1. generačného AI originálu (ChatGPT Image 14. 9. 2026, 15_21_34.png): Surový bezstratový súbor PNG (2 169 845 B, 1024 × 1536 px, MD5: 589a9c0d78b5980f4280ef1cb0fb1ac2) obsahuje na offsete 33 neporušený 23 617-bajtový C2PA v2.2 JUMBF manifest (urn:c2pa:3472c0b4-6f6a-4897-b620-6d3739466663), kryptograficky podpísaný algoritmom RSASSA-PSS (PS256) certifikátom CN=OpenAI Media Service, O=OpenAI OpCo, LLC (vydaným SSL.com C2PA ICA R1 2025) a opatrený kryptografickou časovou pečiatkou RFC 3161 autority OpenAI TSA Leaf (sériové číslo 0x99272CFA5020A6CD) z 2026-09-11 22:02:50.864283 UTC (12. 9. 2026 o 00:02:50,864283 SELČ). Súbor deklaruje generátor gpt-image v2.0, typ zdroja trainedAlgorithmicMedia, vykazuje 100 % zhodu hard-binding hashu obrazových dát (SHA-256: a97d50d1...0759) a obsahuje 0 výskytov mena Annamária S..
  2. Prechod cez kompresný pipeline spoločnosti Meta (2. generácia – Facebook / Messenger): Pri nahraní na Facebook Kandidáta B (Subjektu B) (818261312_..._n.jpg a 819103750_..._n.jpg) servery Meta odstránili C2PA manifest, aplikovali podvzorkovanie 4:2:0 a stratovú 10-skenovú progresívnu JPEG kompresiu s proprietárnou kvantizačnou tabuľkou Meta (Luma min=5, max=25, mean=15.8; Chroma[63]=156) a pripojili 154-bajtovú hlavičku JFIF + IPTC FBMD (stále s 0 výskytmi mena Annamária S.).
  3. Dôkaz podvrhu metadát na 3. generácii súborov (27554.jpg a 27555.jpg): V súboroch 27554.jpg (265 194 B) a 27555.jpg (260 326 B) bola 154-bajtová hlavička Facebooku bezstratovo nahradená 961-bajtovou statickou hlavičkou (APP1 Exif + APP1 XMP + APP13 IPTC) s menom Annamária S., pričom celé zvyšné obrazové jadro DQT..EOI (264 233 B pri dodávke a 259 365 B pri plagáte) zostalo na 100,000000 % bitovo identické so súbormi stiahnutými z Facebooku Kandidáta B (Subjektu B).
  4. Algebraický dôkaz chyby páchateľa v binárnej štruktúre (Porušenie TIFF 6.0 – nepárny offset): Nástroj páchateľa pri zápise EXIF tagov nevykonal povinné zarovnanie na párne 2-bajtové slová (word boundary) a umiestnil tag 0x9c9d (XPAuthor) na nepárny offset 97 (0x61) podľa vzorca off3 = 53 + 2N ≡ 1 (mod 2). Reverzným inžinierstvom sme tento algoritmus zrekonštruovali so 100 % bajtovou zhodou (MD5: bb48e5938d7ef8268b4285eb8d366d57).
  5. Kryptografické potvrdenie z originálneho e-mailu Fotografie.eml (DKIM Verified OK): E-mail odoslaný redaktorom Súkromná televízia Redaktorom súkromnej televízie ([[email protected]]) dňa 18. 10. 2026 o 09:46:38 SELČ nesie 100 % platný RSA-SHA256 podpis DKIM-Signature (d=[sukromna-tv.tld], s=selector1 → Verified OK) nad telom a prílohami (bh=LM1ar82XS8QH3mpfI8V/OYvYY6rhU84Tk1fv1FlaPRA=), čo dokazuje, že už v sobotu 18. 10. 2026 o 09:46 disponoval redaktor Redaktor práve týmito zmanipulovanými súbormi z Facebooku s prilepenou 961-bajtovou hlavičkou.

Skúmaný objekt č. 1 (3. generácia): 27554.jpg

Prvým skúmaným súborom je koláž s polepom dodávky 27554.jpg (rozlíšenie 1774 × 887 px, veľkosť 265 194 B, MD5: 4f71f083384c77c2548301e18644953b), ktorú porovnávame s jej 2. generáciou stiahnutou z Facebooku 795431264_122105055213478317_1067664476719443742_n.jpg / 818261312_122105609055478317_1412334835344542713_n.jpg (264 387 B, MD5: 08292f83ede7748e8bf2f04c974d65ea, hlavička FBMD 154 B). Obrazové jadro DQT..EOI v súbore z Facebooku aj v 27554.jpg má na bajt identickú veľkosť 264 233 B (MD5: 735fcd1dd26263a676e02e53aad2932a).

Skúmaný objekt č. 2 (3. generácia): 27555.jpg

Druhým skúmaným súborom je vertikálny plagát 27555.jpg (rozlíšenie 1024 × 1536 px, veľkosť 260 326 B, MD5: c3473d39162e7f7818d7c3676846f90e), ktorý porovnávame s jeho 2. generáciou stiahnutou z Facebooku 819103750_122105608545478317_6474924531061147815_n.jpg (259 519 B, MD5: 58b65023baa65439aaf8bbc88677e902, hlavička FBMD 154 B) a s jeho 1. generáciou priamo z OpenAI ChatGPT (ChatGPT Image 14. 9. 2026, 15_21_34.png, 2 169 845 B). Obrazové jadro DQT..EOI v súbore z Facebooku aj v 27555.jpg má na bajt identickú veľkosť 259 365 B (MD5: 3737ad185bbb0d006975612dc5c3be6e).

2. Kompletná chronológia a reťazec manipulácie (Chain of Custody) od prvej mikrosekundy

Zrekonštruované z kryptografického RFC 3161 časového žetónu OpenAI TSA v ChatGPT Image 14. 9. 2026, 15_21_34.png, OCSP staplingu SSL.com, štruktúr FBMD na Facebooku, originálneho e-mailu Fotografie.eml (overený RSA-SHA256 DKIM-Signature servera [sukromna-tv.tld]), 48-bitových FILETIME pečiatok Thread-Index a 44-bitových pečiatok Gmail Content-Id:

Fáza / Generácia Dátum a presný čas (SELČ / UTC) Aktér / Infraštruktúra Exaktný forenzný a kryptografický dôkaz
1A. OCSP kontrola kľúča OpenAI
(Pred generovaním)
Pi 11. 9. 2026, 23:38:25 SELČ
(2026-09-11 21:38:25 UTC)
SSL.com C2PA ICA R1 OCSP Responder → OpenAI V C2PA manifeste (rVals → ocspVals, offset 12453): podpísané OCSP potvrdenie platnosti certifikátu OpenAI Media Service (platné do 18. 9. 2026 21:38:24 UTC).
1B. Vygenerovanie 1. generácie (PNG) v ChatGPT So 12. 9. 2026, 00:02:50,864283 SELČ
(2026-09-11 22:02:50.864283 UTC)
OpenAI Media Service API (gpt-image v2.0, c2pa_rs 0.79.2) Kryptografický žetón RFC 3161 Time-Stamp Token (sigTst2, sériové č. 0x99272CFA5020A6CD, podpísaný OpenAI TSA Leaf → CMS Verification successful) a podpis COSE_Sign1 PS256 nad c2pa.hash.data (SHA-256: a97d50d1...0759). 0× meno S..
1C. Stiahnutie PNG z webu ChatGPT Po 14. 9. 2026, 15:21:34 SELČ Webový prehliadač používateľa ChatGPT (lokalizácia SK/CZ) Názov súboru ChatGPT Image 14. 9. 2026, 15_21_34.png vytvorený klientskym JavaScriptom ChatGPT v okamihu kliknutia na tlačidlo Download.
2. Nahranie na Facebook / Messenger (2. generácia) September – Október 2026
(pred 18. 10. 2026)
Verejný Facebook profil Kandidáta B (Subjektu B) (scontent-vie1-1.xx.fbcdn.net) Odstránenie 23 617 B C2PA manifestu, stratová kompresia do JPEG s tabuľkou Meta (DQT) a 10 progresívnymi skenmi, vloženie 154 B hlavičky JFIF + FBMD → vznik súborov 818261312_..._n.jpg (264 387 B) a 819103750_..._n.jpg (259 519 B). 0× meno S..
3. Injekcia falošnej hlavičky (3. generácia) Po zverejnení na FB a pred 18. 10. 2026 09:46:28 Účelový skript páchateľa (injektor 961 B) Stiahnutie skomprimovaných JPG z Facebooku, odstrihnutie 154 B hlavičky FBMD a prilepenie 961 B hlavičky (EXIF + XMP + IPTC) s menom Annamária S. (MD5: bb48e5938d7ef8268b4285eb8d366d57, nepárny offset 0x61, 0 časových pečiatok) pred nezmenené jadro DQT..EOI (264 233 B a 259 365 B).
4. Uloženie v Androide (27554, 27555) Pred 18. 10. 2026 09:46:28 Android zariadenie Redaktora súkromnej televízie (MediaStore ID 27554 a 27555) Sekvenčné interné identifikátory databázy Android MediaStore (27554.jpg a 27555.jpg) priradené pri výbere dvoch po sebe uložených súborov do Outlook Mobile.
5A. Otvorenie konceptu v Outlook Mobile So 18. 10. 2026, 09:43:21,833 – 09:43:22,393 SELČ Redaktor súkromnej televízie ([[email protected]], Súkromná televízia KE) V Fotografie.eml: MSIP_Label_..._SetDate=2026-10-18T07:43:21.8337607Z, vloženie mobilného podpisu CodeTwo o 07:43:22 GMT a inicializácia Thread-Index (0x01dd5ed459d1) o 09:43:22.393 SELČ.
5B. Pripojenie 27555.jpg a 27554.jpg a odoslanie So 18. 10. 2026, 09:46:28 – 09:46:46 SELČ Redaktor súkromnej televízie → [sukromna-tv.tld] → [[email protected]] O 09:46:28 SELČ pripojený 27555.jpg, o 09:46:29 SELČ pripojený 27554.jpg, o 09:46:38.504 SELČ odoslané a podpísané DKIM-Signature (d=[sukromna-tv.tld], bh=LM1ar82XS8QH3mpfI8V/OYvYY6rhU84Tk1fv1FlaPRA= → Verified OK).
6. Preposlanie (Forward) v Gmaile Ut 20. 10. 2026, 15:04:15,734 – 15:04:32 SELČ Annamária „Malka“ S. → [[email protected]] 44-bitová milisekundová pečiatka v Gmail Content-Id: 0x1a159699b76 (15:04:15.734) a 0x1a159699b77 (15:04:15.735), odoslané o 15:04:32 SELČ.
7. Preposlanie na forenznú analýzu Ut 20. 10. 2026, 17:18:03 – 17:29:03 SELČ Kandidát A (Subjekt D) → Forenzný analytik ([email protected]) Prijaté v Apple Mail o 17:18:31–33, exportované s karanténnymi pečiatkami 0x6ad788bb (17:28:59) a 0x6ad788bf (17:29:03).

3. Reverzné inžinierstvo nástroja páchateľa a algebraický dôkaz chyby zarovnania (Porušenie TIFF 6.0)

Skript páchateľa zostavil na začiatku oboch JPEG súborov tri segmenty (APP1 Exif + APP1 XMP + APP13 IPTC). V segmente APP1 Exif (Big-Endian MM) zapísal tri položky za hlavičku adresára IFD0 (ktorá končí na párnom offsete 50 = 0x32):

  • Položka 1 (0x013B Artist): dĺžka N bajtov (pre "Annamária S.\0" v UTF-8 je N = 22 bajtov; začína na offsete 50).
  • Položka 2 (0x8298 Copyright): reťazec "© " + author + "\0". Keďže znak © a medzera majú v UTF-8 presne 3 bajty (0xC2 0xA9 0x20), dĺžka položky Copyright je vždy N + 3 bajtov (pre "© Annamária S.\0" je to 22 + 3 = 25 bajtov; začína na offsete 50 + 22 = 72).
  • Položka 3 (0x9C9D XPAuthor): pretože skript páchateľa nevykonal 2-bajtové zarovnanie (word alignment padding) požadované špecifikáciou TIFF 6.0 (Sekcia 2, Word-Aligned Offsets), tretí offset vypočítal ako:
offset(XPAuthor) = 50 + N + (N + 3) = 53 + 2N  ≡  1 (mod 2)  →  VŽDY NEPÁRNE ČÍSLO!

Tento algebraický zákon dokazuje, že pre akékoľvek meno na svete vygeneruje skript páchateľa nepárny offset na tagu 0x9c9d XPAuthor:

  • Pre Annamária S. (N = 22): offset = 53 + 2 × 22 = 97 (0x61) → nepárny offset!
  • Pre kontrolný test Testovací_Subjekt_X (N = 16): offset = 53 + 2 × 16 = 85 (0x55) → nepárny offset!

Výstup validátora exiftool -validate -warning -a (Originály vs. Naša reprodukcia):

======== /Users/analytik/Desktop/FOTO/27554.jpg
Validate                        : 2 Warnings (1 minor)
Warning                         : [minor] Odd offset for IFD0 tag 0x9c9d XPAuthor
Warning                         : Missing required JPEG IFD0 tag 0x0213 YCbCrPositioning
======== /Users/analytik/Desktop/FOTO/27555.jpg
Validate                        : 2 Warnings (1 minor)
Warning                         : [minor] Odd offset for IFD0 tag 0x9c9d XPAuthor
Warning                         : Missing required JPEG IFD0 tag 0x0213 YCbCrPositioning
======== /Users/analytik/Documents/FOTO PROJEKT/27556_Testovaci_Subjekt_X.jpg
Validate                        : 2 Warnings (1 minor)
Warning                         : [minor] Odd offset for IFD0 tag 0x9c9d XPAuthor
Warning                         : Missing required JPEG IFD0 tag 0x0213 YCbCrPositioning
    3 image files read

4. Matematické a štrukturálne dôkazy o 100 % AI pôvode oboch vizuálov zo spoločnej predlohy

  • A. Generatívne artefakty typografie a loga (27554.jpg): Na prednej kapote modelu dodávky generatívna neurónová sieť vyhalucinovala mäkčeň na začiatočnom písmene mena a vynechala dĺžeň v slove „KANDIDAT“, zatiaľ čo na zadných dverách vytvorila roztopené ťahy písmen v továrenskom označení „TRANSIT CUSTOM“ a skomolený vektor modrého oválu Ford.
  • B. Matematická korelácia spoločnej zdrojovej predlohy portrétu ($r = 0,9602$): Porovnaním normalizovanej oblasti tváre z 27554.jpg a 27555.jpg vychádza globálna Pearsonova korelácia $r = 0,5612$ a lokálna korelácia čŕt tváre až $r = 0,9602$, čo dokazuje, že oba AI vizuály boli vygenerované z tej istej referenčnej fotografie.
  • C. Analýza chybovej hladiny kompresie (ELA) a opätovná kompresia Facebookom: Celá 4-pohľadová scéna dodávky (1774 × 887 px) aj plagát (natívne rozlíšenie OpenAI 1024 × 1536 px) vykazujú homogénnu hladinu 10-skenovej kompresie Meta bez akýchkoľvek dodatočne vlepovaných vrstiev. Navyše pri opätovnom nahraní týchto súborov na Facebook ich kompresor Meta znova prepočíta a ešte viac zmenší: pri 795431264_122105055213478317_1067664476719443742_n.jpg klesne veľkosť z 264 387 B na 255 190 bajtov (pokles o -9 197 B, zmena 33,28 % pixelov) a pri 819103750_122105608545478317_6474924531061147815_n.jpg klesne veľkosť z 259 519 B na 256 047 bajtov (pokles o -3 472 B, zmena 42,95 % pixelov).

5. Kontrolná experimentálna reprodukcia: Vloženie © Testovací_Subjekt_X

Experimentálne overenie správnosti nášho zrekonštruovaného skriptu:
Pomocou presne tej istej funkcie build_injected_headers("Testovací_Subjekt_X") (ktorej kompletný zdrojový kód poskytujeme nižšie v Sekcii 12, takže si ju môže spustiť ktokoľvek nad ľubovoľným obrázkom) sme v rámci kontrolného pokusu vložili autorské metadáta Testovací_Subjekt_X / © Testovací_Subjekt_X do testovacieho súboru (s kvantizačnou tabuľkou Meta a progresívnym kódovaním). Výsledný súbor vykazuje v macOS Spotlight (mdls), vo Finderi aj v ExifTool 100 % totožné správanie a identické dve varovania TIFF 6.0 (nepárny offset 0x55 = 85 podľa vzorca 53 + 2N) ako skúmané súbory 27554.jpg a 27555.jpg.

6. Parametrický rozbor kompresného pipeline spoločnosti Meta (Facebook / Messenger)

Stopa Technický nález v súboroch 27554.jpg a 27555.jpg Čo to matematicky dokazuje
1. Proprietárna kvantizačná tabuľka Meta (DQT na 0x0003c1) Tabuľka jasu (Luma 0): [5, 6, 6, 11, 8, 11, 16, 12, 9, 14, 21, 15...] (min=5, max=25, mean=15.80).
Tabuľka farby (Chroma 1): [7, 7, 10, 19, 20, 40, ..., 100, 156] (posledný 64. prvok má hodnotu 156).
Každý grafický program (Photoshop, iPhone, Canva) má inú maticu 64 čísel. Štandardná tabuľka IJG/libjpeg končí číslom 99. Matica s Luma max=25 a Chroma[63]=156 je proprietárny podpis kompresného jadra spoločnosti Meta (Facebook / Messenger).
2. 10-skenový progresívny JPEG profil (SOF2 + 10× SOS) Oba súbory sú zakódované ako Progressive DCT (0xFFC2 / SOF2) a obsahujú presne 10 postupných skenov (0xFFDA / SOS), pričom pred každým skenom je vložená samostatná Huffmanova tabuľka (0xFFC4 / DHT). Bežné fotoaparáty a editory ukladajú Baseline JPEG (1 sken). Rozdelenie na 10 progresívnych skenov so samostatnými DHT tabuľkami je špecifická optimalizácia aplikácií Facebook a Messenger pre postupné načítavanie obrazu.
3. Matematický vzorec zmenšenia rozmeru 1774 × 887 px Súbor 27555.jpg má rozmer 1024 × 1536 = 1 572 864 px (limit plochy obrazu v Messengeri). Súbor 27554.jpg má neštandardný rozmer 1774 × 887 px = 1 573 538 px. Keď do kompresora Meta s limitom plochy 1 572 864 px vložíte obraz s pomerom strán 2:1, algoritmus vypočíta výšku ako:
H = round(√(1 572 864 / 2)) = round(886,81) = 887 px → W = 2 × 887 = 1774 px!

7. Forenzné vyhodnotenie tvrdení v reportáži Súkromná televízia a rozbor záberu terminálu C2PA

V televíznych reportážach zazneli dve odlišné kategórie tvrdení, ktoré je nevyhnutné prísne analyticky oddeliť:

A. Vyvrátenie nepravdivých tvrdení o „metadátach originálnych snímok“ a „časovej pečiatke v EXIF“

Tvrdenie v reportáži Exaktná binárna realita v 27554.jpg a 27555.jpg Forenzný záver
„Nie je možné [aby boli metadáta podvrhnuté], lebo tam by bola vlastne časová pečiatka a by nesedela s tými fotografiami.“ V celej 961-bajtovej hlavičke (0x0002..0x03c0) sú tagy DateTime, CreateDate, ModifyDate, xmp:CreateDate aj IPTC:DateCreated 100 % PRÁZDNE (0 časových pečiatok)! V súboroch 27554.jpg a 27555.jpg sa nenachádza ani jediný údaj o dátume či čase, ktorý by mohol čokoľvek potvrdzovať. Hlavička obsahuje iba 5-krát zopakované meno Annamária S..
„Podarilo sa nám získať metadáta originálnych snímok, kde je ako autorka uvedená členka volebného tímu...“ (1. reportáž) Obrazové jadro DQT..EOI v 27554.jpg (264 233 B) a 27555.jpg (259 365 B) je 100 % bitovo identické so skomprimovanými súbormi z Facebooku Kandidáta B (Subjektu B). Keby niekto tieto súbory nahral na Facebook, opäť by sa skomprimovali a ešte viac zmenšili (na 255 190 B pri 795431264_..._n.jpg a na 256 047 B pri 819103750_..._n.jpg). Súbory odoslané Redaktorom súkromnej televízie dňa 18. 10. 2026 nie sú originálne snímky, ale súbory stiahnuté z Facebooku (ktorý maže všetky pôvodné metadáta a necháva 154 B hlavičku FBMD), do ktorých bola dodatočne vložená 961 B hlavička.
„S nimi bolo manipulované a pôvodné metadáta boli zmazané využitím AI modelu. V súboroch, ktoré nám odovzdal primátor [na USB kľúči], metadáta chýbajú. Podľa odborníka na kyberbezpečnosť nejde o originály.“ (2. reportáž) Na USB kľúči (ktorý sme dostali na preskúmanie rovnako ako Médium X) sa nachádzal prvotný bezstratový PNG súbor ChatGPT Image 14. 9. 2026, 15_21_34.png (2 169 845 B). Na offsete 33 obsahuje neporušený 23 617-bajtový kryptografický manifest C2PA v2.2 (caBX) podpísaný OpenAI (gpt-image v2.0) s dátumom vytvorenia 2026-09-11 (11. 9. 2026), časovou pečiatkou RFC 3161 TSA z 11. 9. 2026 22:02:50,864283 UTC a overeným hašom pixelov c2pa.hash.data! Expert v 2. reportáži hrubo zavádzal verejnosť: v súbore z USB kľúča metadáta nechýbajú a žiadny AI model ich nezmazal – naopak, AI model OpenAI (gpt-image v2.0) tento prvotný originál vytvoril a kryptograficky podpísal dňa 11. 9. 2026!

B. Usvedčenie zo záberu na vlastný terminál experta („Expert z reportáže“) v 2. reportáži pri rozbore USB kľúča (167187-volebna-zahada.mp4, čas 01:51 – 01:57)

V druhej reportáži z 20. 10. 2026 (po odovzdaní USB kľúča Kandidátom A (Subjektom D), pričom presne ten istý USB kľúč so súbormi sme dostali na analýzu aj my) zaznelo v reportáži tvrdenie, že v súboroch z USB kľúča „metadáta chýbajú“, že „pôvodné metadáta boli zmazané využitím AI modelu“ a že „podľa odborníka na kyberbezpečnosť nejde o originály“.

Keď však kamera v tej istej reportáži v čase 01:51 – 01:57 sníma monitor samotného experta pri kontrole PNG súboru z USB kľúča, v televíznej grafike sú síce zamazané (rozmazané) presne tie stredové miesta terminálu, ktoré by divákom okamžite odhalili pravdu (stĺpec hodnôt s textom VALID, OpenAI Media Service, gpt-image 2.0 a 2026-09-11 22:02:50 UTC), no na nerozmazanom ľavom a pravom okraji zostal viditeľný príkaz c2pa verify ChatGP..., stĺpec názvov polí (validation_state, active manifest, claim generator, signed by (CN), timestamp (TSA)), pod nimi v časti -- validation results -- 7 riadkov za sebou so stavom [ OK ] (vrátane [ OK ] timeStamp, [ OK ] claimSign a [ OK ] assertion ... a.hash.data) a na pravom okraji trčiace konce riadkov ...dAlgorithmicMedia (trainedAlgorithmicMedia) a ...SSL.com C2PA RSA Root CA 2025)! Keby v súbore metadáta skutočne chýbali (boli zmazané), terminál by vypísal chybu ManifestNotFound a keby so súborom niekto manipuloval, svietilo by tam [ FAIL ] – 7 riadkov [ OK ] pod autoritou SSL.com C2PA RSA Root CA 2025 však nemôže znamenať nič iné než platný, neporušený prvotný originál z ChatGPT z 11. 9. 2026!

8. Kryptografická verifikácia originálneho e-mailu Fotografie.eml (RSA-SHA256 DKIM podpis Súkromná televízia, Microsoft a Google)

100 % KRYPTOGRAFICKÉ POTVRDENIE (VERIFIED OK):
Originálny súbor dokazy/Fotografie.eml (759 419 B, MD5: 6abb8df143e71287ae4575a6218f10ac) doručený z adresy [[email protected]] na adresu [[email protected]] dňa 18. 10. 2026 o 09:46:38 SELČ bol overený voči verejnému RSA kľúču Súkromná televízia v DNS (selector1._domainkey.[sukromna-tv.tld]) pomocou openssl dgst -sha256 -verify s výsledkom Verified OK.
RFC 6376 SHA-256 Body Hash (bh) = LM1ar82XS8QH3mpfI8V/OYvYY6rhU84Tk1fv1FlaPRA=
Príloha v Fotografie.eml Veľkosť Kryptografický odtlačok MD5 v Fotografie.eml Čas pripojenia v Outlook Mobile (Content-Disposition) Zhoda so skúmanými súbormi
27555.jpg (Part 7, riadky 635–5210) 260 326 B c3473d39162e7f7818d7c3676846f90e Sun, 18 Oct 2026 07:46:28 GMT (09:46:28 SELČ) 100,000 % ZHODA
27554.jpg (Part 8, riadky 5212–9873) 265 194 B 4f71f083384c77c2548301e18644953b Sun, 18 Oct 2026 07:46:29 GMT (09:46:29 SELČ) 100,000 % ZHODA

9. Prehľad zaistených primárnych dôkazov (3 generácie súborov)

Generácia / Kategória dôkazu Skúmaný súbor (veľkosť) Kryptografický odtlačok MD5 Stav verifikácie
1. Generácia (Prvotný AI originál z ChatGPT) ChatGPT Image 14. 9. 2026, 15_21_34.png (2 169 845 B) 589a9c0d78b5980f4280ef1cb0fb1ac2 ✔ C2PA PS256 & RFC 3161 TSA VERIFIED OK (11. 9. 2026 22:02:50.864283 UTC)
2. Generácia (Verejný Facebook Kandidáta B (Subjektu B)) 818261312_..._n.jpg / 795431264_..._n.jpg (264 387 B)
819103750_..._n.jpg (259 519 B)
08292f83ede7748e8bf2f04c974d65ea
58b65023baa65439aaf8bbc88677e902
✔ 100 % ZHODA OBRAZOVÉHO JADRA DQT..EOI (264 233 B a 259 365 B)
3. Generácia (Podvrhnuté súbory v Fotografie.eml) Fotografie.eml (759 419 B)
27554.jpg (265 194 B)
27555.jpg (260 326 B)
6abb8df143e71287ae4575a6218f10ac
4f71f083384c77c2548301e18644953b
c3473d39162e7f7818d7c3676846f90e
✔ DKIM RSA-SHA256 ([sukromna-tv.tld]) VERIFIED OK & INJEKTOR 961 B REKONŠTRUOVANÝ

10. Priame porovnanie s obrázkami stiahnutými z verejného Facebooku Kandidáta B (Subjektu B) (Experiment 9 – Dôkaz pôvodu a zachovania veľkosti)

Operácia / Stav súboru Vizuál A: Polep dodávky Ford Transit (1774 × 887) Vizuál B: Volebný plagát 10 bodov (1024 × 1536)
1. Surový súbor stiahnutý z Facebooku Kandidáta B (Subjektu B)
(scontent-vie1-1.xx.fbcdn.net)
Názov: 818261312_122105609055478317_1412334835344542713_n.jpg
Veľkosť: 264 387 B (264,4 kB) | MD5: 08292f83ede7748e8bf2f04c974d65ea
Začiatok DQT: offset 154 B | Od DQT po koniec: 264 233 B
Obsahuje meno Annamária S.?: NIE (0 výskytov)
Názov: 819103750_122105608545478317_6474924531061147815_n.jpg
Veľkosť: 259 519 B (259,5 kB) | MD5: 58b65023baa65439aaf8bbc88677e902
Začiatok DQT: offset 154 B | Od DQT po koniec: 259 365 B
Obsahuje meno Annamária S.?: NIE (0 výskytov)
2. Doplnenie mena Annamária S. do FB súboru
(Nahradenie 154 B hlavičky FBMD našou 961 B hlavičkou = rozdiel presne +807 B)
Výpočet: 264 387 - 154 + 961 = 265 194 B (265,2 kB)
Začiatok DQT: offset 961 B | Od DQT po koniec: 264 233 B
Výsledné MD5: 4f71f083384c77c2548301e18644953b
Porovnanie s Redaktorovým 27554.jpg: 100,000000 % BITOVÁ ZHODA!
Výpočet: 259 519 - 154 + 961 = 260 326 B (260,3 kB)
Začiatok DQT: offset 961 B | Od DQT po koniec: 259 365 B
Výsledné MD5: c3473d39162e7f7818d7c3676846f90e
Porovnanie s Redaktorovým 27555.jpg: 100,000000 % BITOVÁ ZHODA!
3. Terminácia (odstránenie) metadát (exiftool -all=)
z oboch dvojíc súborov (vymazané metadáta 152 B / 959 B; ponechaná povinná 2-bajtová štartovacia značka súboru SOI = FF D8 [2 B] + samotné obrazové jadro DQT..EOI [264 233 B / 259 365 B])
Z FB súboru: 264 387 - 152 = 2 B (SOI) + 264 233 B (jadro) = 264 235 B
Z Redaktorovho 27554.jpg: 265 194 - 959 = 2 B (SOI) + 264 233 B (jadro) = 264 235 B
Spoločné MD5: 5c03923602de681ecfd2f07bfa99903a (100 % zhoda!)
Z FB súboru: 259 519 - 152 = 2 B (SOI) + 259 365 B (jadro) = 259 367 B
Z Redaktorovho 27555.jpg: 260 326 - 959 = 2 B (SOI) + 259 365 B (jadro) = 259 367 B
Spoločné MD5: d200159a1090b429024dc31b20a97a7d (100 % zhoda!)

11. Akademická kryptografická (C2PA v2.2 / JUMBF / COSE_Sign1 / RFC 3161 TSA) a signálová analýza 1. generačného originálu ChatGPT Image 14. 9. 2026, 15_21_34.png (Experiment 10)

Táto sekcia predkladá formálnu kryptografickú a priestorovo-signálovú analýzu prvotného bezstratového súboru ChatGPT Image 14. 9. 2026, 15_21_34.png (2 169 845 B, 1024 × 1536 px, 24-bit RGB, MD5: 589a9c0d78b5980f4280ef1cb0fb1ac2, SHA-256: 10978e798d6be2296c61eb86aa90449e74ccf16989ad2b8861faef7c2776841e) podľa medzinárodných štandardov C2PA v2.2, ISO/IEC 19566-5 (JUMBF), RFC 9052 (COSE), RFC 3161 (PKIX Time-Stamp Protocol) a RFC 6960 (OCSP).

A. Binárna topológia PNG kontajnera a integrita JUMBF superboxu (caBX)

Súbor pozostáva zo 8-bajtovej signatúry PNG (89 50 4E 47 0D 0A 1A 0A) a 4 kanonických chunkov s platnými kontrolnými súčtami CRC-32 (IEEE 802.3 polynóm 0xEDB88320):

Bajtový offset Typ chunku Dĺžka dát (B) Celková dĺžka s hlavičkou a CRC (B) CRC-32 Štrukturálna špecifikácia obsahu
8 .. 32 IHDR 13 25 0x67e0adfd (Platné) Rozmery 1024 × 1536 px, bitová hĺbka 8 bitov/kanál, farebný typ 2 (Truecolor RGB), kompresia 0, filter 0, interlace 0.
33 .. 23 661 caBX 23 617 23 629 0xf0aa8f0d (Platné) C2PA JUMBF Superbox (urn:c2pa:3472c0b4-6f6a-4897-b620-6d3739466663) obsahujúci podboxy c2pa.assertions (3 159 B), c2pa.claim.v2 (698 B) a c2pa.signature (19 643 B).
23 662 .. 2 169 832 IDAT 2 146 159 2 146 171 0xe83e3467 (Platné) Jediný súvislý DEFLATE (zlib) prúd nekomprimovaných/bezstratovo filtrovaných RGB skenovacích riadkov.
2 169 833 .. 2 169 844 IEND 0 12 0xae426082 (Platné) Ukončovací marker PNG kontajnera.

B. Kryptografická verifikácia hard-binding väzby (c2pa.hash.data), tvrdení (c2pa.claim.v2) a podpisu COSE_Sign1

  1. Overenie nepriestrelnej väzby na obrazové dáta (c2pa.hash.data):
    Podbox c2pa.hash.data (CBOR mapa na lokálnom offsete 3 162 v caBX) definuje vylúčenie (exclusion range) $\mathcal{E} = [33,\; 33 + 23\,629) = [33,\; 23\,662)$, ktoré presne pokrýva samotný chunk caBX. Kryptografický odtlačok zvyšku súboru $F \setminus \mathcal{E}$ je:
    SHA-256( PNG[0..32]  ||  PNG[23662..2169844] ) = a97d50d1086bbab04ac6fa9f5069132e1a806f70e6db3710944aacc50c1e0759
    Vypočítaný odtlačok sa na 100 % zhoduje s hodnotou uloženou v c2pa.hash.data. Tým je matematicky dokázané, že ani v hlavičke IHDR, ani v 2 146 159 bajtoch obrazového prúdu IDAT nebol od okamihu kryptografického podpisu na serveri OpenAI zmenený ani jediný bit.
  2. Overenie zreťazených solaných odtlačkov (Salted Assertion Hashes) v c2pa.claim.v2:
    Štruktúra c2pa.claim.v2 (instanceID = "xmp:iid:2afa4e2b-2f7d-434c-af63-77be0c0e1f3a", claim_generator_info.name = "OpenAI Media Service API", org.contentauth.c2pa_rs = "0.79.2", specVersion = "2.2.0", dc:title = "image.png") obsahuje tri kryptografické odkazy v poli created_assertions, z ktorých každý sa na 100 % zhoduje so SHA-256 odtlačkom príslušného JUMBF podboxu (vrátane 16-bajtovej soli c2sh):
    • self#jumbf=c2pa.assertions/c2pa.icon → a23b64c97ce9a8e29c5ce1c1262949de8d63db8fb7b8a9448349fd840f1b5d33 (ZHODA)
    • self#jumbf=c2pa.assertions/c2pa.actions.v2 → 3c8876c4ea509e4f8c601e8e57632a016ef5d8735f07f1bd91d662254b4bc8b5 (ZHODA)
    • self#jumbf=c2pa.assertions/c2pa.hash.data → ccaf73e7d03dfded8961c0d64e89cf09104f21637e996ee62b01177b8753aca3 (ZHODA)
  3. Dekódovanie generatívnych akcií v c2pa.actions.v2:
    CBOR štruktúra v c2pa.actions.v2 obsahuje tri deklarované operácie:
    • action = "c2pa.created", when = "2026-09-11T00:00:00Z", softwareAgent = {"name": "gpt-image", "version": "2.0"}, digitalSourceType = "http://cv.iptc.org/newscodes/digitalsourcetype/trainedAlgorithmicMedia"
    • action = "c2pa.converted", when = "2026-09-11T00:00:00Z"
    • action = "c2pa.watermarked.unbound", when = "2026-09-11T00:00:00Z", allActionsIncluded = true
  4. Overenie podpisu COSE_Sign1 (RSASSA-PSS / PS256, alg = -37):
    Podbox c2pa.signature obsahuje COSE_Sign1 štruktúru (CBOR tag 18) s 3 048-bajtovou chránenou hlavičkou (obsahujúcou reťazec certifikátov x5chain v kľúči 33) a 256-bajtovým podpisom RSA-PSS nad kanonickou štruktúrou Sig_structure = ["Signature1", body_protected, b"", c2pa_claim_v2_bytes] (SHA-256 = f8f6c9dbf9ff1439b1491857c3db7e7a090e6724a4ce3d15783c97d02a7cec26). Verifikácia cez openssl dgst -sha256 -sigopt rsa_padding_mode:pss -sigopt rsa_pss_saltlen:32 voči verejnému kľúču certifikátu č. 1 (CN=OpenAI Media Service): Verified OK.

C. Kompletný register 6 certifikátov X.509 a kryptografických časových autorít (RFC 3161 TSA & OCSP) v caBX

# Rola v PKI architektúre C2PA Subjekt (Subject) & Vydavateľ (Issuer) Sériové číslo (Hex) & Platnosť SHA-256 Fingerprint certifikátu
1 Podpisový certifikát manifestu OpenAI
(x5chain[0], offset 4045)
S: C=US, O=OpenAI OpCo, LLC, CN=OpenAI Media Service
I: CN=SSL.com C2PA ICA R1 2025, O=SSL Corporation, C=US
0BA5FCE90E708CF2058031EE441C6473
2026-04-22 → 2027-04-23
A6:D2:82:BC:CE:BC:7A:56:48:DE:34:00:D9:E6:33:37...
2 Sprostredkujúca CA pre C2PA
(x5chain[1], offset 5464)
S: CN=SSL.com C2PA ICA R1 2025, O=SSL Corporation, C=US
I: CN=SSL.com C2PA RSA Root CA 2025, O=SSL Corporation, C=US
272B63C8CC1D4D2D9B8451726CF49C5E3251AEDE
2025-12-22 → 2030-12-21
D5:48:96:BE:1E:48:E0:91:09:E0:2C:75:96:D0:37:16...
3 Časová autorita OpenAI TSA (Leaf)
(sigTst2, offset 7298)
S: C=US, ST=CA, L=San Francisco, O=OpenAI OpCo, LLC, OU=TSA, CN=OpenAI TSA Leaf
I: CN=OpenAI TSA Issuing CA
61DB4628328A8C8D4A06B7BFFE60E3026C3F71B7
2026-04-08 → 2037-07-09
BD:4F:B9:B2:90:4C:81:36:67:88:6E:EF:41:E1:6D:FE...
4 Časová autorita OpenAI TSA (Issuing CA)
(sigTst2, offset 8572)
S: CN=OpenAI TSA Issuing CA, OU=TSA, O=OpenAI OpCo, LLC
I: CN=OpenAI TSA Root CA, OU=TSA, O=OpenAI OpCo, LLC
048D04CAC6C50BC5DA19B0BCF14E1195A5EABC19
2026-04-08 → 2126-04-09
72:59:51:2C:FD:C5:05:11:F3:4A:E9:A1:31:53:80:0B...
5 Koreňová časová autorita OpenAI TSA (Root CA)
(sigTst2, offset 9982)
S: CN=OpenAI TSA Root CA, OU=TSA, O=OpenAI OpCo, LLC
I: CN=OpenAI TSA Root CA (Self-Signed)
13503B6C898CF02403332C8FF74F8EFB7D82EC1B
2026-04-08 → 2126-04-09
E1:28:FE:87:DE:14:01:A8:EF:2E:D7:AC:CA:A1:6F:6C...
6 OCSP Responder certifikát
(rVals → ocspVals, offset 13074)
S: C=US, O=SSL Corp, CN=SSL.com C2PA ICA R1 OCSP Responder
I: CN=SSL.com C2PA ICA R1 2025, O=SSL Corporation, C=US
2F090E9BE8C4481AA8454DD1672B611E
2026-01-02 → 2027-01-02
9A:FF:BC:BA:85:FF:91:FB:81:4F:97:3B:0D:6B:03:B8...
Kryptografický dôkaz presného času vzniku (RFC 3161 Time-Stamp Token 0x99272CFA5020A6CD):
Dekódovaním 5 260-bajtového CMS kontajnera v unprotected_header["sigTst2"]["tstTokens"][0]["val"] (Policy OID 1.3.6.1.4.1.57264.1.1, Nonce 0xC3E7F53952FCB1C2, MessageImprint SHA-256 a0c6b4f4b6f62fb489d3953b6b1a408d23c7c648273aa46b29adbf76b326e364) a overením jeho digitálneho podpisu (openssl cms -verify → CMS Verification successful) je s presnosťou na mikrosekundu dokázané, že plagát bol vygenerovaný na serveri OpenAI dňa:
genTime = 20260911220250.864283Z  ≡  11. 9. 2026 o 22:02:50,864283 UTC  ≡  12. 9. 2026 o 00:02:50,864283 SELČ

D. Priestorovo-signálová a štatistická analýza 3 generácií plagátu (1. Gen PNG vs. 2. Gen FB JPG vs. 3. Gen 27555.jpg)

Nech $I_1, I_2, I_3 \in \{0, \dots, 255\}^{1536 imes 1024 imes 3}$ označujú dekódované tenzory jasovo-farebných hodnôt RGB pre 1. generáciu (ChatGPT Image 14. 9. 2026, 15_21_34.png), 2. generáciu (819103750_..._n.jpg z Facebooku) a 3. generáciu (27555.jpg z e-mailu Redaktora súkromnej televízie). Definujme tiež index diskontinuity $8 imes 8$ blokovej mriežky $B_{8 imes 8}(I)$ ako priemerný pomer absolútnych diferencií susedných pixelov na hraniciach $8 imes 8$ DCT blokov ($ ext{index} \equiv 7 \pmod 8$) voči diferenciám vo vnútri blokov ($ ext{index} ot\equiv 7 \pmod 8$). Výsledky merania na ploche $1\,572\,864$ pixelov ($4\,718\,592$ farebných zložiek):

Signálová metrika / Parameter Porovnanie $I_1$ (1. Gen ChatGPT PNG) vs. $I_2$ (2. Gen Facebook JPG) Porovnanie $I_2$ (2. Gen Facebook JPG) vs. $I_3$ (3. Gen Redaktorov 27555.jpg) Forenzná interpretácia
Stredná absolútna odchýlka ($ ext{MAD}$) $5,1855$ úrovní RGB
(hladké plochy $\| abla I\| < 2$: $2,3976$; ostré hrany písma $\| abla I\| \ge 15$: $13,0946$)
$0,000000$ úrovní RGB Prechod z 1. do 2. generácie vniesol do obrazu nevratné stratové skreslenie JPEG (najmä na ostrých hranách písma kvôli 4:2:0 podvzorkovaniu a kvantizácii Meta). Medzi 2. a 3. generáciou je skreslenie nulové.
Koreň zo strednej kvadratickej chyby ($ ext{RMSE}$) a $ ext{PSNR}$ $ ext{RMSE} = \mathbf{9,7495}$, $ ext{PSNR} = \mathbf{28,35\; ext{dB}}$
($ ext{Max diff} = 151$, Pearson $r = 0,995143$)
$ ext{RMSE} = \mathbf{0,000000}$, $ ext{PSNR} = \mathbf{\infty\; ext{dB}}$
($ ext{Max diff} = 0$, Pearson $r = 1,000000$)
Dokazuje, že PNG nemohlo vzniknúť dekódovaním JPG (v takom prípade by malo $ ext{RMSE} = 0$ voči JPG). Naopak, 27555.jpg má 100 % identické dekódované pixely s Facebook JPG.
Podiel pixelov s nulovou odchýlkou ($\|I_a(y,x) - I_b(y,x)\|_1 = 0$) Len $2,807\;\%$ ($44\,150$ z $1\,572\,864$ px)
(kompresia Meta zmenila $97,193\;\%$ pixelov!)
$100,0000\;\%$ ($1\,572\,864$ z $1\,572\,864$ px) Priama experimentálna verifikácia: 27555.jpg obsahuje na bajt presne ten istý skomprimovaný obrazový prúd (259 365 B) ako súbor na Facebooku.
Index $8 imes 8$ DCT mriežky ($B_{8 imes 8}$) $B_{8 imes 8}(I_1) = \mathbf{1,026254}$
(vertikálne hranice $10,9120$ vs. vnútro $10,9264 \implies 0,9987$)
$B_{8 imes 8}(I_2) = B_{8 imes 8}(I_3) = \mathbf{1,2433651477}$
(vertikálne hranice $13,1460$ vs. vnútro $11,1930 \implies 1,1745$)
Súbor $I_1$ (PNG) vykazuje nulovú prítomnosť $8 imes 8$ JPEG blokovej mriežky – nikdy v histórii neprešiel JPEG kompresiou. Súbory $I_2$ a $I_3$ nesú identickú $8 imes 8$ mriežku enkodéra Meta.

12. Metodika pre odbornú komunitu: Nezávislá replikácia výskumu a kompletný verifikačný kód

Otvorená veda a 100 % reprodukovateľnosť (Open-Science Forensics):
Na konci článku poskytujeme čitateľom a odbornej komunite na stiahnutie 3 skúmané obrazové súbory (prvotný bezstratový originál ChatGPT Image 14. 9. 2026, 15_21_34.png a súbory 27554.jpg a 27555.jpg) v 100 % pôvodnom binárnom stave pre vlastný výskum. Nižšie zároveň zverejňujeme kompletný zdrojový kód verifikačného skriptu forensic_analyzer.py (vrátane zrekonštruovaného injektora build_injected_headers()) a príkazy shasum / exiftool, pomocou ktorých si môže ktokoľvek nezávisle overiť všetky naše zistenia.

A. Rýchle príkazy shasum a exiftool pre okamžitú nezávislú verifikáciu v termináli:

# 1. Overenie kontrolných súčtov MD5 a SHA-256 na 3 stiahnutých obrazových súboroch:
md5 "ChatGPT Image 14. 9. 2026, 15_21_34.png" "27554.jpg" "27555.jpg"
shasum -a 256 "ChatGPT Image 14. 9. 2026, 15_21_34.png" "27554.jpg" "27555.jpg"

# 2. Výpis 23 617 B kryptografického C2PA v2.2 manifestu OpenAI a RFC 3161 pečiatky v PNG origináli:
exiftool -a -G1 -s "ChatGPT Image 14. 9. 2026, 15_21_34.png"

# 3. Výpis 961 B hlavičky, varovaní nepárneho offsetu TIFF 6.0 (0x61) a dôkaz 0 časových pečiatok v 27554.jpg a 27555.jpg:
exiftool -a -G1 -s -v3 "27554.jpg" "27555.jpg"

# 4. Overenie 100 % bitovej identity obrazového jadra DQT..EOI (od offsetu 961 v 27554.jpg a 27555.jpg voči offsetu 154 z Facebooku):
tail -c +962 "27554.jpg" | shasum -a 256
tail -c +962 "27555.jpg" | shasum -a 256

B. Automatizovaný výpis všetkých 10 experimentov (python3 forensic_analyzer.py):

================================================================================
EXPERIMENT 1: KRYPTOGRAFICKÉ ODTLAČKY A 1 100-BAJTOVÁ IDENTITA HLAVIČIEK
================================================================================
Súbor 27554.jpg (265194 B):
  MD5:    4f71f083384c77c2548301e18644953b
  SHA1:   a0691e5ae56e0e58828bc3b89696800c6fdf037b
  SHA256: 0a2a55852f502ff6af2ae6b8ed09ccdcbfaa893cfc2993a9e9aa393791d0e126
Súbor 27555.jpg (260326 B):
  MD5:    c3473d39162e7f7818d7c3676846f90e
  SHA1:   8ab4db2e462eda42405f3a49ebeceeae1cf1cd43
  SHA256: d2d6f7d09ca8ae362acf47b6c98ec80506f5c3b863f0fe249d276b0d0d751516

Počet po sebe idúcich identických bajtov od začiatku súboru: 1100 B (0x000000 - 0x00044c)
MD5 prvých 1100 B (27554.jpg): 4a4674396dc500151f17977a62086bbf
MD5 prvých 1100 B (27555.jpg): 4a4674396dc500151f17977a62086bbf

================================================================================
EXPERIMENT 2: REVERZNÉ INŽINIERSTVO INJEKTORA METADÁT (961 BAJTOV)
================================================================================
Dĺžka zrekonštruovanej hlavičky (SOI + APP1 Exif + APP1 XMP + APP13 IPTC): 961 B
MD5 zrekonštruovanej hlavičky: bb48e5938d7ef8268b4285eb8d366d57
MD5 hlavičky v 27554.jpg:      bb48e5938d7ef8268b4285eb8d366d57
MD5 hlavičky v 27555.jpg:      bb48e5938d7ef8268b4285eb8d366d57
100 % bajtová zhoda s 27554.jpg a 27555.jpg: True

================================================================================
EXPERIMENT 3: DÔKAZ KOMPRESIE META (FACEBOOK / MESSENGER)
================================================================================
27554.jpg:
  Zhoda Luma DQT s tabuľkou Meta (min=5, max=25, mean=15.8): True
  Zhoda Chroma DQT s tabuľkou Meta (koncový prvok=156):      True
27555.jpg:
  Zhoda Luma DQT s tabuľkou Meta (min=5, max=25, mean=15.8): True
  Zhoda Chroma DQT s tabuľkou Meta (koncový prvok=156):      True

================================================================================
EXPERIMENT 4: TEST OPÄTOVNEJ KOMPRESIE NA FACEBOOKU (DVOJITÁ KOMPRESIA META)
  (Dôkaz, prečo súbory 27554.jpg a 27555.jpg nemohli byť nahrané na Facebook,
   ale museli byť z Facebooku stiahnuté a až následne opatrené 961 B hlavičkou)
================================================================================
795431264_122105055213478317_1067664476719443742_n.jpg (Dodávka / 27554.jpg) (1774x887 = 1573538 px):
  Pôvodný súbor z Facebooku:                        264387 B (jadro DQT..EOI: 264233 B | MD5: 735fcd1dd26263a676e02e53aad2932a)
  Po opätovnej kompresii Facebookom (stiahnutý):    255190 B (pokles o -9197 B! | MD5: 991dbe93b1d574dc652f0aa5039213c4)
  Nové obrazové jadro DQT..EOI po 2. kompresii FB:  255036 B (pokles o -9197 B! | MD5: fc429fae8c85caf2e4c4367bcbcd749a)
  Počet zmenených pixelov pri opätovnej kompresii:  523640 px (33.28 % obrazu sa zmenilo!)
  -> DÔKAZ: Ak by niekto nahral obrázok (aj zmenšený) na Facebook, stiahol by sa ešte viac
     skomprimovaný a zmenšený (255 190 B a 256 047 B). Keďže jadro v 27554.jpg a 27555.jpg
     má 0 zmenených pixelov a 100 % identický počet bajtov ako súbor na Facebooku, obraz
     musel byť najprv stiahnutý z Facebooku a až potom doň bola vložená 961 B hlavička!
819103750_122105608545478317_6474924531061147815_n.jpg (Plagát  / 27555.jpg) (1024x1536 = 1572864 px):
  Pôvodný súbor z Facebooku:                        259519 B (jadro DQT..EOI: 259365 B | MD5: 3737ad185bbb0d006975612dc5c3be6e)
  Po opätovnej kompresii Facebookom (stiahnutý):    256047 B (pokles o -3472 B! | MD5: 9f7d75e0be45ad6192b80499df477904)
  Nové obrazové jadro DQT..EOI po 2. kompresii FB:  255893 B (pokles o -3472 B! | MD5: 12a94234fd737b3a640ad89ab3c9a30e)
  Počet zmenených pixelov pri opätovnej kompresii:  675583 px (42.95 % obrazu sa zmenilo!)
  -> DÔKAZ: Ak by niekto nahral obrázok (aj zmenšený) na Facebook, stiahol by sa ešte viac
     skomprimovaný a zmenšený (255 190 B a 256 047 B). Keďže jadro v 27554.jpg a 27555.jpg
     má 0 zmenených pixelov a 100 % identický počet bajtov ako súbor na Facebooku, obraz
     musel byť najprv stiahnutý z Facebooku a až potom doň bola vložená 961 B hlavička!

================================================================================
EXPERIMENT 5: DEKÓDOVANIE ČASOVÝCH PEČIATOK (GMAIL CONTENT-ID)
================================================================================
  Podpis Súkromná televízia PNG (ii_1a159699b768b65ce8b2) -> 1792501455734 ms -> 2026-10-20 15:04:15.734 SELČ
  Podpis QR vCard PNG (ii_1a159699b76ca72943e1) -> 1792501455734 ms -> 2026-10-20 15:04:15.734 SELČ
  Príloha 27555.jpg  (1a159699b7797dad2233) -> 1792501455735 ms -> 2026-10-20 15:04:15.735 SELČ
  Príloha 27554.jpg  (1a159699b7797ccbaa24) -> 1792501455735 ms -> 2026-10-20 15:04:15.735 SELČ

================================================================================
EXPERIMENT 6: KONTROLNÁ REPRODUKCIA ('Testovací_Subjekt_X')
================================================================================
Súbor 27556_Testovaci_Subjekt_X.jpg (392436 B, MD5: 835dfe6967ab99874bec91103ab33225):
  100 % zhoda vygenerovanej hlavičky (911 B): True
  Nepárny offset tagu 0x9c9d XPAuthor (podľa 53 + 2*N): 85 (0x55)

================================================================================
EXPERIMENT 7: DÔKAZ ABSENCIE ČASOVÝCH PEČIATOK V 961-BAJTOVEJ HLAVIČKE
================================================================================
Celková dĺžka vloženej hlavičky metadát (0x0002..0x03c0): 961 bajtov
Hľadané časové značky v EXIF / XMP / IPTC: ['DateTime', 'CreateDate', 'ModifyDate', 'DateCreated', 'TimeCreated', 'xmp:CreateDate', 'xmp:ModifyDate', 'xmp:MetadataDate', 'photoshop:DateCreated', '2026:', '2026-']
Nájdené časové pečiatky v 27554.jpg a 27555.jpg: 0 ([])
ZÁVER: V celej 961-bajtovej hlavičke sa nenachádza ANI JEDNA časová pečiatka ani názov softvéru!

================================================================================
EXPERIMENT 8: KRYPTOGRAFICKÁ VERIFIKÁCIA ORIGINÁLNEHO E-MAILU (Fotografie.eml)
================================================================================
Súbor Fotografie.eml: 759419 B | MD5: 6abb8df143e71287ae4575a6218f10ac
RFC 6376 SHA-256 Body Hash (bh) v DKIM [sukromna-tv.tld] / microsoft.com / google.com: LM1ar82XS8QH3mpfI8V/OYvYY6rhU84Tk1fv1FlaPRA=
Vypočítaný SHA-256 Body Hash (bh) zo surového tela Fotografie.eml:               LM1ar82XS8QH3mpfI8V/OYvYY6rhU84Tk1fv1FlaPRA=
100 % zhoda kryptografického odtlačku tela správy a príloh (DKIM bh):           True
Dekódovaný Exchange Thread-Index (začiatok konceptu v Outlook Mobile):           2026-10-18T09:43:22.392986+02:00
Príloha v Fotografie.eml: 27555.jpg | 260326 B | MD5=c3473d39162e7f7818d7c3676846f90e | Zhoda s analyzovaným súborom: True
  MIME Content-Disposition: attachment; filename="27555.jpg"; size=260326;  creation-date="Sun, 18 Oct 2026 07:46:28 GMT";  modification-date="Sun, 18 Oct 2026 07:46:28 GMT"
Príloha v Fotografie.eml: 27554.jpg | 265194 B | MD5=4f71f083384c77c2548301e18644953b | Zhoda s analyzovaným súborom: True
  MIME Content-Disposition: attachment; filename="27554.jpg"; size=265194;  creation-date="Sun, 18 Oct 2026 07:46:29 GMT";  modification-date="Sun, 18 Oct 2026 07:46:29 GMT"

================================================================================
EXPERIMENT 9: ARCHITEKTÚRA KONTAJNERA JPEG A POROVNANIE DVOCH SAMOSTATNÝCH
              VIZUÁLOV STIAHNUTÝCH Z FACEBOOKU S 27554.jpg A 27555.jpg
================================================================================
Vysvetlenie k dvom rôznym číslam (264 233 B vs. 259 365 B):
  - Vizuál A (Dodávka, 1774x887 px) má obrazové jadro DQT..EOI s dĺžkou 264 233 B.
    Porovnávame Dodávku z Facebooku (264 233 B) voči Dodávke 27554.jpg (264 233 B) -> 100 % ZHODA!
  - Vizuál B (Plagát,  1024x1536 px) má obrazové jadro DQT..EOI s dĺžkou 259 365 B.
    Porovnávame Plagát z Facebooku  (259 365 B) voči Plagátu 27555.jpg (259 365 B) -> 100 % ZHODA!

[VIZUÁL A: FB Dodávka (818261312_..._n.jpg, 1774x887) vs. 27554.jpg]
  Obsahuje FB súbor meno Annamária S.?:            False (obsahuje iba 154 B hlavičku JFIF 1x1 + IPTC FBMD)
  Dekódovaná tabuľka skenov FBMD (vrátane EOF):          [590, 24322, 54412, 61834, 71859, 109546, 175722, 180464, 184783, 189085, 264387]
  Veľkosť FB kontajnera pred úpravou:                    264387 B (264.4 kB) | MD5: 08292f83ede7748e8bf2f04c974d65ea
  Metadátová hlavička pred DQT (FB vs. 27554.jpg):       154 B (FBMD) vs. 961 B (EXIF+XMP+IPTC, rozdiel +807 B)
  Obrazový kontajner DQT..EOI vo FB súbore:              264233 B | MD5: 735fcd1dd26263a676e02e53aad2932a
  Obrazový kontajner DQT..EOI v 27554.jpg:                264233 B | MD5: 735fcd1dd26263a676e02e53aad2932a
  100 % bitová zhoda obrazového kontajnera (264233 == 264233): True
  Po výmene hlavičky kontajnera (-154 B + 961 B):        265194 B (265.2 kB) | MD5: 4f71f083384c77c2548301e18644953b
  Veľkosť a MD5 skúmaného súboru 27554.jpg:               265194 B (265.2 kB) | MD5: 4f71f083384c77c2548301e18644953b
  100 % IDENTICKÝ SÚBOR PO VÝMENE HLAVIČKY V KONTAJNERI?: True
  Po očistení metadát (exiftool -all=) z oboch súborov:  264235 B (264.2 kB) | MD5: 5c03923602de681ecfd2f07bfa99903a (zhoda: True)

[VIZUÁL B: FB Plagát  (819103750_..._n.jpg, 1024x1536) vs. 27555.jpg]
  Obsahuje FB súbor meno Annamária S.?:            False (obsahuje iba 154 B hlavičku JFIF 1x1 + IPTC FBMD)
  Dekódovaná tabuľka skenov FBMD (vrátane EOF):          [604, 27442, 63123, 73849, 87665, 140806, 197118, 201806, 206485, 211416, 259519]
  Veľkosť FB kontajnera pred úpravou:                    259519 B (259.5 kB) | MD5: 58b65023baa65439aaf8bbc88677e902
  Metadátová hlavička pred DQT (FB vs. 27555.jpg):       154 B (FBMD) vs. 961 B (EXIF+XMP+IPTC, rozdiel +807 B)
  Obrazový kontajner DQT..EOI vo FB súbore:              259365 B | MD5: 3737ad185bbb0d006975612dc5c3be6e
  Obrazový kontajner DQT..EOI v 27555.jpg:                259365 B | MD5: 3737ad185bbb0d006975612dc5c3be6e
  100 % bitová zhoda obrazového kontajnera (259365 == 259365): True
  Po výmene hlavičky kontajnera (-154 B + 961 B):        260326 B (260.3 kB) | MD5: c3473d39162e7f7818d7c3676846f90e
  Veľkosť a MD5 skúmaného súboru 27555.jpg:               260326 B (260.3 kB) | MD5: c3473d39162e7f7818d7c3676846f90e
  100 % IDENTICKÝ SÚBOR PO VÝMENE HLAVIČKY V KONTAJNERI?: True
  Po očistení metadát (exiftool -all=) z oboch súborov:  259367 B (259.4 kB) | MD5: d200159a1090b429024dc31b20a97a7d (zhoda: True)

================================================================================
EXPERIMENT 10: KRYPTOGRAFICKÁ C2PA A SIGNÁLOVÁ ANALÝZA 1. GENERAČNÉHO ORIGINÁLU Z CHATGPT
================================================================================
Súbor: ChatGPT Image 14. 9. 2026, 15_21_34.png
  Veľkosť: 2169845 B | MD5: 589a9c0d78b5980f4280ef1cb0fb1ac2 | SHA256: 10978e798d6be2296c61eb86aa90449e74ccf16989ad2b8861faef7c2776841e
  Výskyt mena 'Annamária S.' v surovom origináli:  False (0 výskytov)

  [A] Štruktúra PNG chunkov a kontrola CRC-32:
      Offset        8 | Chunk IHDR | Dĺžka:       13 B | CRC-32: 0x67e0adfd (platné=True)
      Offset       33 | Chunk caBX | Dĺžka:    23617 B | CRC-32: 0xf0aa8f0d (platné=True)
      Offset    23662 | Chunk IDAT | Dĺžka:  2146159 B | CRC-32: 0xe83e3467 (platné=True)
      Offset  2169833 | Chunk IEND | Dĺžka:        0 B | CRC-32: 0xae426082 (platné=True)

  [B] Kryptografické overenie C2PA manifestu (urn:c2pa:3472c0b4-6f6a-4897-b620-6d3739466663):
      Očakávaný SHA-256 v c2pa.hash.data: a97d50d1086bbab04ac6fa9f5069132e1a806f70e6db3710944aacc50c1e0759
      Vypočítaný SHA-256 PNG (bez caBX):  a97d50d1086bbab04ac6fa9f5069132e1a806f70e6db3710944aacc50c1e0759
      100 % integrita obrazových dát PNG: True
      Generátor (c2pa.actions.v2):        gpt-image v2.0 (OpenAI Media Service API, c2pa_rs 0.79.2)
      IPTC DigitalSourceType:             http://cv.iptc.org/newscodes/digitalsourcetype/trainedAlgorithmicMedia
      OCSP kontrola certifikátu:          2026-09-11 21:38:25 UTC (11. 9. 2026 23:38:25 SELČ)
      RFC 3161 Time-Stamp (OpenAI TSA):   2026-09-11 22:02:50.864283 UTC (12. 9. 2026 00:02:50.864283 SELČ, Serial 0x99272CFA5020A6CD)
      Čas stiahnutia z ChatGPT UI:        2026-09-14 15:21:34 SELČ (z názvu 'ChatGPT Image 14. 9. 2026, 15_21_34.png')

  [C] Signálové a pixelové porovnanie 3 generácií plagátu (1024x1536 = 1 572 864 px):
      1. Gen (ChatGPT PNG) vs. 2. Gen (FB JPG): MAD = 5.1855, RMSE = 9.7495, PSNR = 28.35 dB, r = 0.995143
         Presne zhodných RGB pixelov (diff=0):  2.81 % (stratová kompresia Meta zmenila 97.19 % pixelov)
      2. Gen (FB JPG) vs. 3. Gen (27555.jpg):   MAD = 0.0000, Max diff = 0, Zhoda pixelov = 100.0000 %
      Index 8x8 JPEG DCT mriežky (Blockiness):
         1. Gen ChatGPT PNG:  B_8x8 = 1.026254 (vert. hranice 10.91 vs. vnútro 10.93 -> ŽIADNA JPEG MRIEŽKA)
         2. Gen Facebook JPG: B_8x8 = 1.243365 (vert. hranice 13.15 vs. vnútro 11.19 -> SILNÁ JPEG MRIEŽKA META)
         3. Gen 27555.jpg:    B_8x8 = 1.243365 (vert. hranice 13.15 vs. vnútro 11.19 -> 100 % IDENTICKÁ S FACEBOOKOM)

C. Kompletný zdrojový kód verifikačného skriptu (forensic_analyzer.py):

#!/usr/bin/env python3
"""
================================================================================
VEREJNÝ REPRODUKOVATEĽNÝ FORENZNÝ EXPERIMENT A VERIFIKAČNÝ SKRIPT (v2.0)
Prípad: Digitálna forenzná analýza súborov 27554.jpg, 27555.jpg, Fotografie.eml,
        verejných Facebook súborov a 1. generačného originálu z OpenAI ChatGPT
================================================================================
Tento skript slúži ako nezávisle overiteľný dôkazový experiment pre súdnych
znalcov, vyšetrovateľov, akademickú obec, IT špecialistov a novinárov.
Funguje automaticky v rozbalenom archíve FORENZNA_ANALYZA_KOMPLET_BALIK.zip
na akomkoľvek počítači (macOS / Linux / Windows).

Spustenie:
    python3 forensic_analyzer.py

Skript automaticky vykoná 10 exaktných matematických, kryptografických a binárnych experimentov:
  1. Overenie kryptografických odtlačkov (MD5, SHA-1, SHA-256) a 1 100-bajtovej
     binárnej identity začiatku súborov 27554.jpg a 27555.jpg (0x000000 až 0x00044c).
  2. Reverzné inžinierstvo nástroja páchateľa: Zostavenie 961-bajtovej hlavičky
     (EXIF + XMP + IPTC) pre meno "Annamária S." od nuly a dôkaz 100 %
     zhody (MD5: bb48e5938d7ef8268b4285eb8d366d57) vrátane neštandardného
     nepárneho TIFF offsetu 0x61 (97) na tagu 0x9c9d (XPAuthor) podľa vzorca
     off3 = 53 + 2*N (vždy nepárne číslo pre akékoľvek meno).
  3. Dôkaz prechodu cez infraštruktúru Meta (Facebook / Messenger): Porovnanie
     kvantizačných tabuliek (DQT) a 10-skenovej progresívnej štruktúry (SOS/DHT).
  4. Analýza jednorazovej kompresie (Self-QTable Re-encoding & 8x8 DCT mriežka).
  5. Dekódovanie skrytých časových pečiatok z Gmail Content-ID (presnosť 1 ms)
     a macOS Quarantine.
  6. Experimentálna kontrolná reprodukcia ("Testovací_Subjekt_X"): Dôkaz, že náš
     zrekonštruovaný skript vytvorí identickú binárnu štruktúru a identické
     varovanie TIFF 6.0 (nepárny offset 0x57 = 87).
  7. Dôkaz nulového počtu časových pečiatok (0 tagov dátumu/času) v 961 B hlavičke.
  8. Kryptografická verifikácia originálneho e-mailu Fotografie.eml (RSA-SHA256
     DKIM-Signature d=[sukromna-tv.tld] -> Verified OK, bh=LM1ar82XS8QH3mpfI8V/OYvYY6rhU84Tk1fv1FlaPRA=).
  9. Priame porovnanie so surovými súbormi z verejného Facebooku Kandidáta B (Subjektu B):
     100 % bitová zhoda obrazového jadra DQT..EOI (264 233 B a 259 365 B) a
     reprodukcia 27554.jpg a 27555.jpg nahradením 154 B FBMD hlavičky 961 B hlavičkou.
 10. Kryptografická C2PA (JUMBF / COSE_Sign1 RSA-PSS / RFC 3161 TSA) a signálová
     analýza 1. generačného bezstratového originálu priamo z OpenAI ChatGPT
     ("ChatGPT Image 14. 9. 2026, 15_21_34.png", vygenerovaného 11. 9. 2026 o
     22:02:50.864283 UTC = 12. 9. 2026 o 00:02:50.864283 SELČ) voči 2. generácii
     (Facebook JPG) a 3. generácii (27555.jpg).
================================================================================
"""

import base64
import datetime
import email
import hashlib
import io
import os
import re
import struct
import subprocess
import tempfile
import zlib
from PIL import Image
import numpy as np

BASE_DIR = os.path.dirname(os.path.abspath(__file__))


def resolve_path(rel_candidates: list[str], abs_fallback: str) -> str:
    for rel in rel_candidates:
        p = os.path.join(BASE_DIR, rel)
        if os.path.exists(p):
            return p
    return abs_fallback


FILE_27554 = resolve_path(["dokazy/27554.jpg", "27554.jpg"], "/Users/analytik/Desktop/FOTO/27554.jpg")
FILE_27555 = resolve_path(["dokazy/27555.jpg", "27555.jpg"], "/Users/analytik/Desktop/FOTO/27555.jpg")
FILE_REPRO = resolve_path(
    ["reprodukcia/27556_Testovaci_Subjekt_X.jpg", "27556_Testovaci_Subjekt_X.jpg"],
    "/Users/analytik/Documents/FOTO PROJEKT/27556_Testovaci_Subjekt_X.jpg",
)
FILE_EML = resolve_path(["dokazy/Fotografie.eml", "Fotografie.eml"], "/Users/analytik/Desktop/Fotografie.eml")
FILE_FB_VAN = resolve_path(
    [
        "dokazy_facebook_lorincz/818261312_122105609055478317_1412334835344542713_n.jpg",
        "818261312_122105609055478317_1412334835344542713_n.jpg",
    ],
    "/Users/analytik/Documents/FOTO PROJEKT/818261312_122105609055478317_1412334835344542713_n.jpg",
)
FILE_FB_POSTER = resolve_path(
    [
        "dokazy_facebook_lorincz/819103750_122105608545478317_6474924531061147815_n.jpg",
        "819103750_122105608545478317_6474924531061147815_n.jpg",
    ],
    "/Users/analytik/Documents/FOTO PROJEKT/819103750_122105608545478317_6474924531061147815_n.jpg",
)
FILE_CHATGPT_PNG = resolve_path(
    [
        "dokazy_orig_chatgpt/ChatGPT Image 14. 9. 2026, 15_21_34.png",
        "ChatGPT Image 14. 9. 2026, 15_21_34.png",
    ],
    "/Users/analytik/Desktop/ChatGPT Image 14. 9. 2026, 15_21_34.png",
)

META_LUMA_DQT_ZIGZAG = [
    5, 6, 6, 11, 8, 11, 11, 11, 11, 11, 13, 11, 11, 11, 13, 14,
    14, 13, 13, 14, 14, 15, 13, 14, 14, 14, 13, 15, 16, 16, 16, 17,
    17, 16, 16, 16, 16, 15, 19, 18, 19, 15, 16, 17, 19, 20, 20, 19,
    17, 19, 22, 22, 22, 19, 22, 21, 21, 22, 25, 22, 25, 22, 22, 18,
]

META_CHROMA_DQT_ZIGZAG = [
    5, 5, 5, 10, 7, 10, 8, 9, 9, 8, 11, 8, 10, 8, 11, 10,
    10, 9, 9, 10, 10, 12, 9, 10, 9, 10, 9, 12, 13, 11, 10, 11,
    11, 10, 11, 13, 12, 11, 11, 8, 11, 11, 12, 12, 12, 13, 13, 12,
    12, 13, 10, 11, 10, 13, 12, 13, 13, 12, 19, 20, 19, 19, 19, 156,
]


def build_injected_headers(author: str) -> bytes:
    """
    Presná rekonštrukcia algoritmu, ktorým boli do súborov 27554.jpg a 27555.jpg
    vložené metadáta (APP1 Exif + APP1 XMP + APP13 Photoshop IPTC).
    """
    copyright_str = f"© {author}"

    # 1. APP1 EXIF (Big-Endian MM, 3 tagy: 0x013B Artist, 0x8298 Copyright, 0x9C9D XPAuthor)
    v_artist = author.encode("utf-8") + b"\x00"
    v_copy = copyright_str.encode("utf-8") + b"\x00"
    v_xp = author.encode("utf-16le") + b"\x00\x00"

    # Algebraický dôkaz chyby zarovnania:
    # off1 = 50, len(v_artist) = N, len(v_copy) = N + 3 (keďže "© " v UTF-8 má 3 bajty: C2 A9 20)
    # Preto off3 = 50 + N + (N + 3) = 53 + 2*N -> VŽDY NEPÁRNE ČÍSLO pre akékoľvek meno!
    off1 = 50
    off2 = off1 + len(v_artist)
    off3 = off2 + len(v_copy)

    tiff = (
        b"MM\x00*\x00\x00\x00\x08"
        + struct.pack(">H", 3)
        + struct.pack(">HHI4s", 0x013B, 2, len(v_artist), struct.pack(">I", off1))
        + struct.pack(">HHI4s", 0x8298, 2, len(v_copy), struct.pack(">I", off2))
        + struct.pack(">HHI4s", 0x9C9D, 1, len(v_xp), struct.pack(">I", off3))
        + b"\x00\x00\x00\x00"
        + v_artist
        + v_copy
        + v_xp
    )
    exif_payload = b"Exif\x00\x00" + tiff
    seg_exif = b"\xff\xe1" + struct.pack(">H", len(exif_payload) + 2) + exif_payload

    # 2. APP1 XMP (kompaktná šablóna bez x:xmptk a bez paddingu)
    xmp_xml = (
        '<?xpacket begin="\ufeff" id="W5M0MpCehiHzreSzNTczkc9d"?>\n'
        '<x:xmpmeta xmlns:x="adobe:ns:meta/"><rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">\n'
        '<rdf:Description rdf:about="" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:xmpRights="http://ns.adobe.com/xap/1.0/rights/" xmlns:photoshop="http://ns.adobe.com/photoshop/1.0/">\n'
        f"<dc:creator><rdf:Seq><rdf:li>{author}</rdf:li></rdf:Seq></dc:creator>\n"
        f'<dc:rights><rdf:Alt><rdf:li xml:lang="x-default">{copyright_str}</rdf:li></rdf:Alt></dc:rights>\n'
        "<xmpRights:Marked>True</xmpRights:Marked>\n"
        f"<photoshop:Credit>{author}</photoshop:Credit>\n"
        "</rdf:Description></rdf:RDF></x:xmpmeta>\n"
        '<?xpacket end="w"?>'
    ).encode("utf-8")
    xmp_payload = b"http://ns.adobe.com/xap/1.0/\x00" + xmp_xml
    seg_xmp = b"\xff\xe1" + struct.pack(">H", len(xmp_payload) + 2) + xmp_payload

    # 3. APP13 IPTC (Photoshop 3.0 -> 8BIM 0x0404 bez 0x0425 IPTCDigest)
    b_author = author.encode("utf-8")
    b_copy = copyright_str.encode("utf-8")
    iptc = (
        b"\x1c\x01\x5a\x00\x03\x1b%G"
        + b"\x1c\x02\x50" + struct.pack(">H", len(b_author)) + b_author
        + b"\x1c\x02\x74" + struct.pack(">H", len(b_copy)) + b_copy
    )
    pad = b"\x00" if len(iptc) % 2 == 1 else b""
    irb = b"Photoshop 3.0\x008BIM\x04\x04\x00\x00" + struct.pack(">I", len(iptc)) + iptc + pad
    seg_iptc = b"\xff\xed" + struct.pack(">H", len(irb) + 2) + irb

    return b"\xff\xd8" + seg_exif + seg_xmp + seg_iptc


def blockiness_ratio(im: Image.Image) -> tuple[float, float, float]:
    """Vypočíta index diskontinuity 8x8 JPEG DCT mriežky (1.00 = bez JPEG kompresie, >1.15 = silná JPEG mriežka)."""
    arr = np.array(im.convert("L"), dtype=np.float64)
    diffs_x = np.abs(arr[:, 1:] - arr[:, :-1])
    b_x = float(diffs_x[:, 7::8].mean())
    nb_x = float(np.delete(diffs_x, np.arange(7, diffs_x.shape[1], 8), axis=1).mean())
    diffs_y = np.abs(arr[1:, :] - arr[:-1, :])
    b_y = float(diffs_y[7::8, :].mean())
    nb_y = float(np.delete(diffs_y, np.arange(7, diffs_y.shape[0], 8), axis=0).mean())
    return float((b_x / nb_x + b_y / nb_y) / 2.0), b_x, nb_x


def run_experiments() -> None:
    with open(FILE_27554, "rb") as f1, open(FILE_27555, "rb") as f2:
        d1 = f1.read()
        d2 = f2.read()

    print("=" * 80)
    print("EXPERIMENT 1: KRYPTOGRAFICKÉ ODTLAČKY A 1 100-BAJTOVÁ IDENTITA HLAVIČIEK")
    print("=" * 80)
    for name, d in [("27554.jpg", d1), ("27555.jpg", d2)]:
        print(f"Súbor {name} ({len(d)} B):")
        print(f"  MD5:    {hashlib.md5(d).hexdigest()}")
        print(f"  SHA1:   {hashlib.sha1(d).hexdigest()}")
        print(f"  SHA256: {hashlib.sha256(d).hexdigest()}")

    prefix_len = 0
    for a, b in zip(d1, d2):
        if a == b:
            prefix_len += 1
        else:
            break
    print(f"\nPočet po sebe idúcich identických bajtov od začiatku súboru: {prefix_len} B (0x000000 - 0x{prefix_len:06x})")
    print(f"MD5 prvých {prefix_len} B (27554.jpg): {hashlib.md5(d1[:prefix_len]).hexdigest()}")
    print(f"MD5 prvých {prefix_len} B (27555.jpg): {hashlib.md5(d2[:prefix_len]).hexdigest()}")
    assert d1[:prefix_len] == d2[:prefix_len]

    print("\n" + "=" * 80)
    print("EXPERIMENT 2: REVERZNÉ INŽINIERSTVO INJEKTORA METADÁT (961 BAJTOV)")
    print("=" * 80)
    reconstructed = build_injected_headers("Annamária S.")
    print(f"Dĺžka zrekonštruovanej hlavičky (SOI + APP1 Exif + APP1 XMP + APP13 IPTC): {len(reconstructed)} B")
    print(f"MD5 zrekonštruovanej hlavičky: {hashlib.md5(reconstructed).hexdigest()}")
    print(f"MD5 hlavičky v 27554.jpg:      {hashlib.md5(d1[:961]).hexdigest()}")
    print(f"MD5 hlavičky v 27555.jpg:      {hashlib.md5(d2[:961]).hexdigest()}")
    print(f"100 % bajtová zhoda s 27554.jpg a 27555.jpg: {reconstructed == d1[:961] == d2[:961]}")
    assert reconstructed == d1[:961] == d2[:961]

    print("\n" + "=" * 80)
    print("EXPERIMENT 3: DÔKAZ KOMPRESIE META (FACEBOOK / MESSENGER)")
    print("=" * 80)
    for name, d in [("27554.jpg", d1), ("27555.jpg", d2)]:
        dqt_seg = d[0x3C1 + 4 : 0x3C1 + 134]
        t0 = list(dqt_seg[1:65])
        t1 = list(dqt_seg[66:130])
        print(f"{name}:")
        print(f"  Zhoda Luma DQT s tabuľkou Meta (min=5, max=25, mean=15.8): {t0 == META_LUMA_DQT_ZIGZAG}")
        print(f"  Zhoda Chroma DQT s tabuľkou Meta (koncový prvok=156):      {t1 == META_CHROMA_DQT_ZIGZAG}")

    print("\n" + "=" * 80)
    print("EXPERIMENT 4: TEST OPÄTOVNEJ KOMPRESIE NA FACEBOOKU (DVOJITÁ KOMPRESIA META)")
    print("  (Dôkaz, prečo súbory 27554.jpg a 27555.jpg nemohli byť nahrané na Facebook,")
    print("   ale museli byť z Facebooku stiahnuté a až následne opatrené 961 B hlavičkou)")
    print("=" * 80)
    reupload_pairs = [
        ("795431264_122105055213478317_1067664476719443742_n.jpg (Dodávka / 27554.jpg)", FILE_FB_VAN, os.path.join(BASE_DIR, "opatovne2.jpg")),
        ("819103750_122105608545478317_6474924531061147815_n.jpg (Plagát  / 27555.jpg)", FILE_FB_POSTER, os.path.join(BASE_DIR, "opatovne1.jpg")),
    ]
    for label_re, orig_fb_path, re_fb_path in reupload_pairs:
        if os.path.exists(orig_fb_path) and os.path.exists(re_fb_path):
            raw_orig = open(orig_fb_path, "rb").read()
            raw_re = open(re_fb_path, "rb").read()
            orig_core = raw_orig[raw_orig.find(b"\xff\xdb"):]
            re_core = raw_re[raw_re.find(b"\xff\xdb"):]
            im_orig = Image.open(orig_fb_path).convert("RGB")
            im_re = Image.open(re_fb_path).convert("RGB")
            diff = np.abs(np.array(im_orig, dtype=np.float32) - np.array(im_re, dtype=np.float32))
            changed_px = int((diff.sum(axis=2) > 0).sum())
            print(f"{label_re} ({im_orig.width}x{im_orig.height} = {im_orig.width * im_orig.height} px):")
            print(f"  Pôvodný súbor z Facebooku:                        {len(raw_orig)} B (jadro DQT..EOI: {len(orig_core)} B | MD5: {hashlib.md5(orig_core).hexdigest()})")
            print(f"  Po opätovnej kompresii Facebookom (stiahnutý):    {len(raw_re)} B (pokles o {len(raw_re) - len(raw_orig)} B! | MD5: {hashlib.md5(raw_re).hexdigest()})")
            print(f"  Nové obrazové jadro DQT..EOI po 2. kompresii FB:  {len(re_core)} B (pokles o {len(re_core) - len(orig_core)} B! | MD5: {hashlib.md5(re_core).hexdigest()})")
            print(f"  Počet zmenených pixelov pri opätovnej kompresii:  {changed_px} px ({changed_px / (im_orig.width * im_orig.height) * 100:.2f} % obrazu sa zmenilo!)")
            print("  -> DÔKAZ: Ak by niekto nahral obrázok (aj zmenšený) na Facebook, stiahol by sa ešte viac")
            print("     skomprimovaný a zmenšený (255 190 B a 256 047 B). Keďže jadro v 27554.jpg a 27555.jpg")
            print("     má 0 zmenených pixelov a 100 % identický počet bajtov ako súbor na Facebooku, obraz")
            print("     musel byť najprv stiahnutý z Facebooku a až potom doň bola vložená 961 B hlavička!")

    print("\n" + "=" * 80)
    print("EXPERIMENT 5: DEKÓDOVANIE ČASOVÝCH PEČIATOK (GMAIL CONTENT-ID)")
    print("=" * 80)
    cids = [
        ("Podpis Súkromná televízia PNG (ii_1a159699b768b65ce8b2)", "1a159699b768b65ce8b2"),
        ("Podpis QR vCard PNG (ii_1a159699b76ca72943e1)", "1a159699b76ca72943e1"),
        ("Príloha 27555.jpg  (1a159699b7797dad2233)", "1a159699b7797dad2233"),
        ("Príloha 27554.jpg  (1a159699b7797ccbaa24)", "1a159699b7797ccbaa24"),
    ]
    for label, cid in cids:
        ms = int(cid[:11], 16)
        dt = datetime.datetime.fromtimestamp(ms / 1000.0)
        print(f"  {label} -> {ms} ms -> {dt.strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]} SELČ")

    if os.path.exists(FILE_REPRO):
        print("\n" + "=" * 80)
        print("EXPERIMENT 6: KONTROLNÁ REPRODUKCIA ('Testovací_Subjekt_X')")
        print("=" * 80)
        with open(FILE_REPRO, "rb") as fr:
            dr = fr.read()
        expected_janko = build_injected_headers("Testovací_Subjekt_X")
        n_janko = len("Testovací_Subjekt_X".encode("utf-8")) + 1
        odd_offset_janko = 53 + 2 * n_janko
        print(f"Súbor 27556_Testovaci_Subjekt_X.jpg ({len(dr)} B, MD5: {hashlib.md5(dr).hexdigest()}):")
        print(f"  100 % zhoda vygenerovanej hlavičky ({len(expected_janko)} B): {dr[:len(expected_janko)] == expected_janko}")
        print(f"  Nepárny offset tagu 0x9c9d XPAuthor (podľa 53 + 2*N): {odd_offset_janko} (0x{odd_offset_janko:02x})")

    print("\n" + "=" * 80)
    print("EXPERIMENT 7: DÔKAZ ABSENCIE ČASOVÝCH PEČIATOK V 961-BAJTOVEJ HLAVIČKE")
    print("=" * 80)
    header_bytes = d1[2:963]
    timestamp_keywords = [
        b"DateTime", b"CreateDate", b"ModifyDate", b"DateCreated", b"TimeCreated",
        b"xmp:CreateDate", b"xmp:ModifyDate", b"xmp:MetadataDate", b"photoshop:DateCreated",
        b"2026:", b"2026-",
    ]
    found_any = [kw.decode("ascii") for kw in timestamp_keywords if kw in header_bytes]
    print(f"Celková dĺžka vloženej hlavičky metadát (0x0002..0x03c0): {len(header_bytes)} bajtov")
    print(f"Hľadané časové značky v EXIF / XMP / IPTC: {[k.decode('ascii') for k in timestamp_keywords]}")
    print(f"Nájdené časové pečiatky v 27554.jpg a 27555.jpg: {len(found_any)} ({found_any})")
    print("ZÁVER: V celej 961-bajtovej hlavičke sa nenachádza ANI JEDNA časová pečiatka ani názov softvéru!")

    if os.path.exists(FILE_EML):
        print("\n" + "=" * 80)
        print("EXPERIMENT 8: KRYPTOGRAFICKÁ VERIFIKÁCIA ORIGINÁLNEHO E-MAILU (Fotografie.eml)")
        print("=" * 80)
        with open(FILE_EML, "rb") as feml:
            raw_eml = feml.read()
        print(f"Súbor Fotografie.eml: {len(raw_eml)} B | MD5: {hashlib.md5(raw_eml).hexdigest()}")
        hdr_end = raw_eml.find(b"\r\n\r\n")
        body_eml = raw_eml[hdr_end + 4 :]
        canon_lines = [re.sub(b"[ \t]+", b" ", l).rstrip(b" ") for l in body_eml.split(b"\r\n")]
        while canon_lines and canon_lines[-1] == b"":
            canon_lines.pop()
        canon_body = b"\r\n".join(canon_lines) + b"\r\n"
        bh_calc = base64.b64encode(hashlib.sha256(canon_body).digest()).decode("ascii")
        expected_bh = "LM1ar82XS8QH3mpfI8V/OYvYY6rhU84Tk1fv1FlaPRA="
        print(f"RFC 6376 SHA-256 Body Hash (bh) v DKIM [sukromna-tv.tld] / microsoft.com / google.com: {expected_bh}")
        print(f"Vypočítaný SHA-256 Body Hash (bh) zo surového tela Fotografie.eml:               {bh_calc}")
        print(f"100 % zhoda kryptografického odtlačku tela správy a príloh (DKIM bh):           {bh_calc == expected_bh}")

        ti_b = base64.b64decode("AQHdXtRZ0bfgNPLmyU2ADjSK028oBQ==")
        ft_ticks = struct.unpack(">Q", ti_b[1:7] + b"\x00\x00")[0]
        unix_ts = (ft_ticks - 116444736000000000) / 1e7
        dt_selc = datetime.datetime.fromtimestamp(unix_ts, datetime.timezone(datetime.timedelta(hours=2)))
        print(f"Dekódovaný Exchange Thread-Index (začiatok konceptu v Outlook Mobile):           {dt_selc.isoformat()}")

        msg = email.message_from_bytes(raw_eml)
        for part in msg.walk():
            fn = part.get_filename()
            if fn in ("27554.jpg", "27555.jpg"):
                pl = part.get_payload(decode=True)
                md5_p = hashlib.md5(pl).hexdigest()
                cd = part.get("Content-Disposition", "").replace("\r\n", " ").replace("\t", " ")
                ref_md5 = hashlib.md5(d1 if fn == "27554.jpg" else d2).hexdigest()
                print(f"Príloha v Fotografie.eml: {fn} | {len(pl)} B | MD5={md5_p} | Zhoda s analyzovaným súborom: {md5_p == ref_md5}")
                print(f"  MIME Content-Disposition: {cd}")

    if os.path.exists(FILE_FB_VAN) and os.path.exists(FILE_FB_POSTER):
        print("\n" + "=" * 80)
        print("EXPERIMENT 9: ARCHITEKTÚRA KONTAJNERA JPEG A POROVNANIE DVOCH SAMOSTATNÝCH")
        print("              VIZUÁLOV STIAHNUTÝCH Z FACEBOOKU S 27554.jpg A 27555.jpg")
        print("=" * 80)
        print("Vysvetlenie k dvom rôznym číslam (264 233 B vs. 259 365 B):")
        print("  - Vizuál A (Dodávka, 1774x887 px) má obrazové jadro DQT..EOI s dĺžkou 264 233 B.")
        print("    Porovnávame Dodávku z Facebooku (264 233 B) voči Dodávke 27554.jpg (264 233 B) -> 100 % ZHODA!")
        print("  - Vizuál B (Plagát,  1024x1536 px) má obrazové jadro DQT..EOI s dĺžkou 259 365 B.")
        print("    Porovnávame Plagát z Facebooku  (259 365 B) voči Plagátu 27555.jpg (259 365 B) -> 100 % ZHODA!")
        fb_van = open(FILE_FB_VAN, "rb").read()
        fb_poster = open(FILE_FB_POSTER, "rb").read()
        inj_sykorova = build_injected_headers("Annamária S.")

        for label, fb_data, dem_data, dem_name in [
            ("VIZUÁL A: FB Dodávka (818261312_..._n.jpg, 1774x887)", fb_van, d1, "27554.jpg"),
            ("VIZUÁL B: FB Plagát  (819103750_..._n.jpg, 1024x1536)", fb_poster, d2, "27555.jpg"),
        ]:
            has_sykorova = b"S\xc3\xbdkorov\xc3\xa1" in fb_data or b"Sykorova" in fb_data
            dqt_fb = fb_data.find(b"\xff\xdb")
            dqt_dem = dem_data.find(b"\xff\xdb")
            fb_core = fb_data[dqt_fb:]
            dem_core = dem_data[dqt_dem:]
            body_match = fb_core == dem_core
            body_md5 = hashlib.md5(fb_core).hexdigest()

            idx_fbmd = fb_data.find(b"FBMD")
            fbmd_str = fb_data[idx_fbmd : idx_fbmd + 98].decode("ascii")
            raw_fbmd = bytes.fromhex(fbmd_str[4:])
            fbmd_offsets = [struct.unpack("<I", raw_fbmd[i : i + 4])[0] for i in range(3, len(raw_fbmd), 4)]

            reconstructed = inj_sykorova + fb_core
            rec_md5 = hashlib.md5(reconstructed).hexdigest()
            dem_md5 = hashlib.md5(dem_data).hexdigest()

            terminated_fb = b"\xff\xd8" + fb_core
            terminated_dem = b"\xff\xd8" + dem_core
            term_md5 = hashlib.md5(terminated_fb).hexdigest()

            print(f"\n[{label} vs. {dem_name}]")
            print(f"  Obsahuje FB súbor meno Annamária S.?:            {has_sykorova} (obsahuje iba 154 B hlavičku JFIF 1x1 + IPTC FBMD)")
            print(f"  Dekódovaná tabuľka skenov FBMD (vrátane EOF):          {fbmd_offsets}")
            print(f"  Veľkosť FB kontajnera pred úpravou:                    {len(fb_data)} B ({len(fb_data)/1000:.1f} kB) | MD5: {hashlib.md5(fb_data).hexdigest()}")
            print(f"  Metadátová hlavička pred DQT (FB vs. {dem_name}):       {dqt_fb} B (FBMD) vs. {dqt_dem} B (EXIF+XMP+IPTC, rozdiel +{dqt_dem - dqt_fb} B)")
            print(f"  Obrazový kontajner DQT..EOI vo FB súbore:              {len(fb_core)} B | MD5: {body_md5}")
            print(f"  Obrazový kontajner DQT..EOI v {dem_name}:                {len(dem_core)} B | MD5: {hashlib.md5(dem_core).hexdigest()}")
            print(f"  100 % bitová zhoda obrazového kontajnera ({len(fb_core)} == {len(dem_core)}): {body_match}")
            print(f"  Po výmene hlavičky kontajnera (-154 B + 961 B):        {len(reconstructed)} B ({len(reconstructed)/1000:.1f} kB) | MD5: {rec_md5}")
            print(f"  Veľkosť a MD5 skúmaného súboru {dem_name}:               {len(dem_data)} B ({len(dem_data)/1000:.1f} kB) | MD5: {dem_md5}")
            print(f"  100 % IDENTICKÝ SÚBOR PO VÝMENE HLAVIČKY V KONTAJNERI?: {reconstructed == dem_data}")
            print(f"  Po očistení metadát (exiftool -all=) z oboch súborov:  {len(terminated_fb)} B ({len(terminated_fb)/1000:.1f} kB) | MD5: {term_md5} (zhoda: {terminated_fb == terminated_dem})")

    if os.path.exists(FILE_CHATGPT_PNG):
        print("\n" + "=" * 80)
        print("EXPERIMENT 10: KRYPTOGRAFICKÁ C2PA A SIGNÁLOVÁ ANALÝZA 1. GENERAČNÉHO ORIGINÁLU Z CHATGPT")
        print("=" * 80)
        png_bytes = open(FILE_CHATGPT_PNG, "rb").read()
        print(f"Súbor: {os.path.basename(FILE_CHATGPT_PNG)}")
        print(f"  Veľkosť: {len(png_bytes)} B | MD5: {hashlib.md5(png_bytes).hexdigest()} | SHA256: {hashlib.sha256(png_bytes).hexdigest()}")
        has_syk_png = (b"S\xc3\xbdkorov\xc3\xa1" in png_bytes) or (b"Sykorova" in png_bytes)
        print(f"  Výskyt mena 'Annamária S.' v surovom origináli:  {has_syk_png} (0 výskytov)")

        # Parse PNG chunks
        pos = 8
        print("\n  [A] Štruktúra PNG chunkov a kontrola CRC-32:")
        cabx_payload = b""
        while pos < len(png_bytes):
            clen, ctype = struct.unpack(">I4s", png_bytes[pos : pos + 8])
            cdata = png_bytes[pos + 8 : pos + 8 + clen]
            crc = struct.unpack(">I", png_bytes[pos + 8 + clen : pos + 12 + clen])[0]
            calc_crc = zlib.crc32(ctype + cdata) & 0xFFFFFFFF
            print(f"      Offset {pos:8d} | Chunk {ctype.decode('latin1')} | Dĺžka: {clen:8d} B | CRC-32: 0x{crc:08x} (platné={crc == calc_crc})")
            if ctype == b"caBX":
                cabx_payload = cdata
            pos += 12 + clen

        # Verify C2PA Data Hash (exclusion: start=33, length=23629)
        excluded_png = png_bytes[:33] + png_bytes[33 + 23629 :]
        calc_data_hash = hashlib.sha256(excluded_png).hexdigest()
        expected_data_hash = "a97d50d1086bbab04ac6fa9f5069132e1a806f70e6db3710944aacc50c1e0759"
        print("\n  [B] Kryptografické overenie C2PA manifestu (urn:c2pa:3472c0b4-6f6a-4897-b620-6d3739466663):")
        print(f"      Očakávaný SHA-256 v c2pa.hash.data: {expected_data_hash}")
        print(f"      Vypočítaný SHA-256 PNG (bez caBX):  {calc_data_hash}")
        print(f"      100 % integrita obrazových dát PNG: {calc_data_hash == expected_data_hash}")
        print("      Generátor (c2pa.actions.v2):        gpt-image v2.0 (OpenAI Media Service API, c2pa_rs 0.79.2)")
        print("      IPTC DigitalSourceType:             http://cv.iptc.org/newscodes/digitalsourcetype/trainedAlgorithmicMedia")
        print("      OCSP kontrola certifikátu:          2026-09-11 21:38:25 UTC (11. 9. 2026 23:38:25 SELČ)")
        print("      RFC 3161 Time-Stamp (OpenAI TSA):   2026-09-11 22:02:50.864283 UTC (12. 9. 2026 00:02:50.864283 SELČ, Serial 0x99272CFA5020A6CD)")
        print("      Čas stiahnutia z ChatGPT UI:        2026-09-14 15:21:34 SELČ (z názvu 'ChatGPT Image 14. 9. 2026, 15_21_34.png')")

        # Signal & pixel comparison across all 3 generations
        if os.path.exists(FILE_FB_POSTER):
            im_png = Image.open(FILE_CHATGPT_PNG).convert("RGB")
            im_fb = Image.open(FILE_FB_POSTER).convert("RGB")
            im_dem = Image.open(FILE_27555).convert("RGB")

            arr_png = np.array(im_png, dtype=np.float64)
            arr_fb = np.array(im_fb, dtype=np.float64)
            arr_dem = np.array(im_dem, dtype=np.float64)

            diff_fb_dem = np.abs(arr_fb - arr_dem)
            diff_png_fb = np.abs(arr_png - arr_fb)
            mse_pf = float(np.mean((arr_png - arr_fb) ** 2))
            psnr_pf = float(10.0 * np.log10((255.0 ** 2) / mse_pf))
            corr_pf = float(np.corrcoef(arr_png.flatten(), arr_fb.flatten())[0, 1])

            b_png, bx_p, nbx_p = blockiness_ratio(im_png)
            b_fb, bx_f, nbx_f = blockiness_ratio(im_fb)
            b_dem, bx_d, nbx_d = blockiness_ratio(im_dem)

            print("\n  [C] Signálové a pixelové porovnanie 3 generácií plagátu (1024x1536 = 1 572 864 px):")
            print(f"      1. Gen (ChatGPT PNG) vs. 2. Gen (FB JPG): MAD = {diff_png_fb.mean():.4f}, RMSE = {np.sqrt(mse_pf):.4f}, PSNR = {psnr_pf:.2f} dB, r = {corr_pf:.6f}")
            print(f"         Presne zhodných RGB pixelov (diff=0):  {(diff_png_fb.sum(axis=2) == 0).mean() * 100:.2f} % (stratová kompresia Meta zmenila 97.19 % pixelov)")
            print(f"      2. Gen (FB JPG) vs. 3. Gen (27555.jpg):   MAD = {diff_fb_dem.mean():.4f}, Max diff = {int(diff_fb_dem.max())}, Zhoda pixelov = {(diff_fb_dem.sum(axis=2) == 0).mean() * 100:.4f} %")
            print(f"      Index 8x8 JPEG DCT mriežky (Blockiness):")
            print(f"         1. Gen ChatGPT PNG:  B_8x8 = {b_png:.6f} (vert. hranice {bx_p:.2f} vs. vnútro {nbx_p:.2f} -> ŽIADNA JPEG MRIEŽKA)")
            print(f"         2. Gen Facebook JPG: B_8x8 = {b_fb:.6f} (vert. hranice {bx_f:.2f} vs. vnútro {nbx_f:.2f} -> SILNÁ JPEG MRIEŽKA META)")
            print(f"         3. Gen 27555.jpg:    B_8x8 = {b_dem:.6f} (vert. hranice {bx_d:.2f} vs. vnútro {nbx_d:.2f} -> 100 % IDENTICKÁ S FACEBOOKOM)")


if __name__ == "__main__":
    run_experiments()
Otvorená veda • Nezávislá verifikácia (Open-Science Forensics)

Stiahnite si 3 pôvodné nedotknuté obrázky a urobte si vlastnú analýzu

Na stiahnutie dávame k dispozícii 3 skúmané obrazové súbory (ChatGPT Image 14. 9. 2026, 15_21_34.png, 27554.jpg a 27555.jpg) v 100 % pôvodnom binárnom stave (do posledného bitu a kontrolného súčtu MD5/SHA-256), aby si ich každý čitateľ, programátor, dátový analytik alebo súdny znalec mohol stiahnuť pre vlastný výskum a nezávisle overiť všetky naše zistenia.

📦 Stiahnuť 3 skúmané obrázky pre vlastný výskumhttps://we.tl/t-H150833f29d8L0H9

Záverečné zhrnutie: Dáta a matematika neklamú

Forenzná analýza preukázala s matematickou istotou, že súbory 27554.jpg a 27555.jpg nie sú prvotnými zdrojovými súbormi, z ktorých by vychádzal príspevok na sociálnej sieti. Naopak, sú to súbory, ktoré už prešli špecifickou kompresiou serverov Facebooku (264 233 B a 259 365 B), z ktorých bola odstránená 154-bajtová hlavička FBMD a nahradená 961-bajtovou hlavičkou s menom Annamárie S. a nulovým počtom časových pečiatok.

Jediným autentickým prvotným originálom v celom skúmanom súbore dát je bezstratový súbor ChatGPT Image 14. 9. 2026, 15_21_34.png, ktorého pôvod v modeli OpenAI gpt-image v2.0 a čas vzniku (11. 9. 2026 22:02:50 UTC) sú chránené nefalšovateľným kryptografickým podpisom autority DigiCert.

Ladislav Miko

Šéfredaktor KOŠICE: DNES