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. Stiahli sme si tie isté obrázky z Facebooku kandidáta – ich obrazová veľkosť je na bajt rovnaká, líši sa len vonkajší kontajner s kódom hlavičky: Každý súbor JPEG (podľa štandardu ISO/IEC 10918-1) funguje ako digitálny kontajner zložený z vymeniteľnej textovej hlavičky metadát (pred značkou
DQT) a zo samotného obrazového kontajnera (stlačených pixelov od značkyDQTpo koniec súboruEOI). Keď sme si stiahli zverejnené obrázky priamo z Facebooku kandidáta a porovnali ich so súbormi od redaktora (27554.jpga27555.jpg), zistili sme, že ich obrazová časť má na bajt presne rovnakú veľkosť aj 100 % totožný binárny obsah (pri dodávke264 233 B = 264 233 Ba pri plagáte259 365 B = 259 365 B; po odstránení metadát príkazomexiftool -all=majú celé súbory z Facebooku aj od redaktora na bajt identickú veľkosť264 235 Ba259 367 Baj totožný kontrolný súčet MD5). Iný je iba ich vonkajší kontajner s kódom metadát: keďže Facebook pri nahrávaní automaticky maže pôvodné metadáta a nahrádza ich vlastnou154-bajtovouhlavičkou (FBMD), v súboroch od redaktora bola táto154 Bhlavička Facebooku odstrihnutá a nahradená961 Bhlavičkou s menom Annamárie S. - 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 súbory
27554.jpga27555.jpg(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 (prepočítali a zmenšili), čím by sa okamžite zmenili státisíce pixelov (pri našom teste opätovnej kompresie sa v dodávke zmenilo 18,68 % pixelov a v plagáte až 37,96 % pixelov) a zmenila by sa aj veľkosť a haš obrazového kontajnera. To, že medzi súbormi na Facebooku a súbormi od redaktora nie je v obrazovom kontajneri zmenený ani jediný bit, 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 первой 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.jpga27555.jpgsa nachádza presne 0 dátumov a 0 časových pečiatok (poliaDateTime,CreateDateajDateCreatedsú 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 offset0x61 = 97podľa vzorca53 + 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 – tvrdili, že v PNG súbore z USB kľúča „chýbajú metadáta“ a „boli zmazané AI modelom“, hoci mali na vlastnom monitore jeho platný kryptografický rodný list z ChatGPT: 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“. Toto tvrdenie je v priamom rozpore s realitou: priamo vo vnútri tohto PNG súboru z USB kľúča (na 33. bajte) sa totiž 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 úradnou časovou pečiatkou RFC 3161 TSA z 12. 9. 2026 o 00:02:50,864283 SELČ (a s 0 výskytmi mena Annamárie S.). Čo je však najšokujúcejšie: v čase01:51 – 01:57druhej reportáže kamera zaberie monitor samotného experta, kde v termináli svieti práve tento platný C2PA certifikát OpenAI (trainedAlgorithmicMedia,c2pa.actions.v2,c2pa.hash.data,SSL.com C2PA RSA Root CA)! Expert teda buď vôbec nerozumel výpisu na vlastnej obrazovke a pomýlil si kryptografický podpis vytvorenia obrazu v AI (c2pa.createdv modeligpt-image v2.0) so „zmazaním metadát pomocou AI“, alebo vedome zavádzal verejnosť, keď kryptograficky zapečatený prvotný originál z 12. septembra 2026 označil za zmanipulovaný neoriginál!

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ť:
- 100 % zhoda obrazového kontajnera s Facebookom pri oboch skúmaných vizuáloch: Súbory
27554.jpg(dodávka) a27555.jpg(plagát), v ktorých je zapísané meno Annamárie S., nie sú pôvodnými originálmi. Ide o dva rôzne vizuály s rôznymi rozmermi, pričom vnútorný obrazový kontajner každého z nich je do posledného bitu totožný s príslušným súborom na Facebooku (scontent-vie1-1.xx.fbcdn.net): pri dodávke má obrazové jadro na Facebooku aj v súbore27554.jpgzhodne presne264 233 B(264 233 = 264 233) a pri plagáte má obrazové jadro na Facebooku aj v súbore27555.jpgzhodne presne259 365 B(259 365 = 259 365). - 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
FBMDa 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, Facebook by ich pri nahrávaní automaticky ešte viac skomprimoval a zmenšil (zmenilo by sa 18,68 % až 37,96 % pixelov aj počet bajtov). 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.jpga27555.jpgobsahujú 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 (DateTimeOriginalajCreateDateú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 12. 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 (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).
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.
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:
Porovnanie bajtov: Facebook vs. 27554.jpg
SHA-256: a0fb0ea8c229e6fb...d1bd299c
Porovnanie bajtov: Facebook vs. 27555.jpg
SHA-256: a5b4deab3dc41f3f...91093594
Overenie a porovnanie: Obrázky stiahnuté z Facebooku majú na bajt rovnakú veľkosť obrazu, líši sa len ich kontajner s kódom metadát
Stiahli sme si tieto obrázky priamo z verejného Facebooku Kandidáta B a podrobili ich priamemu binárnemu porovnaniu so súbormi 27554.jpg a 27555.jpg, ktorými disponoval redaktor súkromnej televízie. Výsledok exaktného merania je jednoznačný: samotný obraz je v oboch dvojiciach súborov na bajt rovnako veľký a stopercentne totožný, líši sa len ich vonkajší kontajner s kódom metadát (keďže Facebook pri nahrávaní automaticky maže všetky pôvodné metadáta):
- 1. Koláž s dodávkou (264 233 B === 264 233 B): Keď zo súboru stiahnutého z Facebooku (
264 387 B) oddelíme vonkajší metadátový kontajner Facebooku (154 BhlavičkaFBMD), samotné obrazové dáta majú presne 264 233 bajtov. Keď zo súboru od redaktora (27554.jpg,265 194 B) oddelíme vložený961 Bkontajner s menomAnnamária S., samotné obrazové dáta majú taktiež na bajt presne 264 233 bajtov (MD5: 735fcd1dd26263a676e02e53aad2932a). Rovnako po očistení metadát štandardným forenzným príkazomexiftool -all=majú oba súbory na bajt identickú veľkosť 264 235 B (MD5: d9272b859a8e7cfddbe0cdccaa0d4eb1). - 2. Vertikálny plagát (259 365 B === 259 365 B): Keď zo súboru stiahnutého z Facebooku (
259 519 B) oddelíme vonkajší metadátový kontajner Facebooku (154 BhlavičkaFBMD), samotné obrazové dáta majú presne 259 365 bajtov. Keď zo súboru od redaktora (27555.jpg,260 326 B) oddelíme vložený961 Bkontajner s menomAnnamária S., samotné obrazové dáta majú taktiež na bajt presne 259 365 bajtov (MD5: 3737ad185bbb0d006975612dc5c3be6e). Po očistení príkazomexiftool -all=majú oba súbory na bajt identickú veľkosť 259 367 B (MD5: 4e84c5c8ef49675405f06e623f2592c3). - 3. Prečo sa líši len kontajner s kódom o +807 bajtov: Keďže Facebook pri nahrávaní maže všetky pôvodné metadáta a necháva len
154 BhlavičkuFBMD, výmena tejto hlavičky za961 Bkontajner s menom (961 − 154 = +807 B) zväčšila celkový súbor v oboch prípadoch presne o 807 bajtov (264 387 + 807 = 265 194 Ba259 519 + 807 = 260 326 B), pričom vnútorný obrazový kontajner zostal na 100 % nedotknutý.
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?
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 opäť zmenené, ešte viac skomprimované a s úplne iným počtom bajtov aj 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.
Prečo nemohli súbory 27554.jpg a 27555.jpg vzniknúť pred nahrávaním na Facebook?
Keby boli súbory 27554.jpg a 27555.jpg vytvorené pred Facebookom a niekto by ich následne nahral na Facebook:
- 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).
- 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.
- 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.
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 (t. j. 12. 9. 2026 o 00:02:50 SELČ).
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.
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.
Č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.
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?
- 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.pngsa nachádza obrovský binárny kontajnercaBX(JUMBF C2PA manifesturn: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! - Ž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 12. 9. 2026 o 00:02:50,864283 SELČ deklarovaná akciac2pa.createdso zdrojomtrainedAlgorithmicMediaa agentomgpt-image v2.0. Zároveň obsahuje kryptografický odtlačok samotných pixelovc2pa.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! - Usvedčenie priamo zo záberov televíznej kamery (čas 01:51 – 01:57 druhej reportáže): Keď kamera v druhej reportáži v čase
01:51 – 01:57sníma monitor samotného experta pri analýze súboru z USB kľúča, na jeho čiernej obrazovke svieti práve rozbalený strom tohto platného C2PA manifestu OpenAI (digitalSourceType: trainedAlgorithmicMedia,claim_generator_info: ChatGPT,c2pa.actions.v2,c2pa.hash.dataa certifikačná autoritaSSL.com C2PA RSA Root CA)! Expert teda mal priamo pred očami kryptografický dôkaz, že súbor na USB kľúči je neporušený prvotný originál vygenerovaný v ChatGPT dňa 12. 9. 2026, no divákom do kamery tvrdil pravý opak – že „nejde o originál“ a že „pôvodné metadáta boli zmazané využitím AI modelu“!
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)!
Celý tento 961-bajtový injektor sme vo forenznom skripte forensic_analyzer.py (funkcia build_injected_headers()) zrekonštruovali so 100-percentnou bajtovou presnosťou. Ako kontrolný vedecký experiment sme rovnakým algoritmom vložili do kontrolných súborov meno „© Janko Mrkvička“ (súbor 27556_Janko_Mrkvicka.jpg), 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 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:
- 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)
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).
Bezstratový PNG originál vs. rekomprimovaný JPEG
Hodnota B ≈ 1.00 v PNG súbore exaktným spôsobom dokazuje, že prvotný PNG nikdy predtým neprešiel stratovou JPEG kompresiou.
Nefalšovateľný reťazec certifikačnej autority
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úbor | Celková veľkosť | Začiatok DQT (Hlavička) | Obrazové jadro (DQT..EOI) | Kryptografia / Pečiatka |
|---|---|---|---|---|
| 1. Gen: ChatGPT PNG Originál | 2 169 845 B | caBX C2PA (23 617 B) | Bezstratový PNG (B=1.0263) | DigiCert TSA: 12. 9. 2026 00:02:50 SELČ |
| 2. Gen: Facebook Koláž (.jpg) | 264 387 B | 154 B (FBMD) | 264 233 B | Meta 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 B | 154 B (FBMD) | 259 365 B | Meta 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:
Každý obrázok vo formáte JPEG sa vo vnútri počítača skladá z dvoch striktne oddelených častí:
- „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. - „Strany knihy“ (Obrazové jadro od značky
DQTaž 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×8JPEG 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 387bajtov - Začiatok obrazu (
DQT):154bajtov (štandardná nálepka FacebookuFBMD, 0× meno S.) - Samotný obraz (od
DQTpo koniec):264 233bajtov
2. Súbor od redaktora Redaktora (27554.jpg):
- Celý súbor:
265 194bajtov - Začiatok obrazu (
DQT):961bajtov (obálka s 5× vloženým menomAnnamária S.) - Samotný obraz (od
DQTpo koniec):264 233bajtov
→ 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 519bajtov - Začiatok obrazu (
DQT):154bajtov (štandardná nálepka FacebookuFBMD, 0× meno S.) - Samotný obraz (od
DQTpo koniec):259 365bajtov
2. Súbor od redaktora Redaktora (27555.jpg):
- Celý súbor:
260 326bajtov - Začiatok obrazu (
DQT):961bajtov (obálka s 5× vloženým menomAnnamária S.) - Samotný obraz (od
DQTpo koniec):259 365bajtov
→ 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 864bodov obrazu sme však zistili, že medzi PNG súborom a Facebook JPG sa líši97,19 %všetkých pixelov! PNG súbor má dokonale ostré a čisté hrany písmen bez komprimačných štvorčekov (index mriežky1,026), kým Facebook JPG aj27555.jpgmajú okolo písmen výrazný „šum“ a mriežku zo stratovej kompresie Facebooku (index mriežky1,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 o00:02:50,864283SELČ (2026-09-11 22:02:50.864283 UTC) a z rozhrania ChatGPT bol stiahnutý 14. septembra 2026 o15:21:34SELČ! - 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 (
0vý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)
- 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 845B,1024 × 1536px, MD5:589a9c0d78b5980f4280ef1cb0fb1ac2) obsahuje na offsete33neporušený23 617-bajtový C2PA v2.2 JUMBF manifest (urn:c2pa:3472c0b4-6f6a-4897-b620-6d3739466663), kryptograficky podpísaný algoritmomRSASSA-PSS (PS256)certifikátomCN=OpenAI Media Service, O=OpenAI OpCo, LLC(vydanýmSSL.com C2PA ICA R1 2025) a opatrený kryptografickou časovou pečiatkouRFC 3161autorityOpenAI TSA Leaf(sériové číslo0x99272CFA5020A6CD) z2026-09-11 22:02:50.864283 UTC(12. 9. 2026 o 00:02:50,864283 SELČ). Súbor deklaruje generátorgpt-image v2.0, typ zdrojatrainedAlgorithmicMedia, vykazuje 100 % zhodu hard-binding hashu obrazových dát (SHA-256: a97d50d1...0759) a obsahuje 0 výskytov menaAnnamária S.. - Prechod cez kompresný pipeline spoločnosti Meta (2. generácia – Facebook / Messenger): Pri nahraní na Facebook Kandidáta B (Subjektu B) (
818261312_..._n.jpga819103750_..._n.jpg) servery Meta odstránili C2PA manifest, aplikovali podvzorkovanie4:2:0a 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 pripojili154-bajtovú hlavičkuJFIF + IPTC FBMD(stále s 0 výskytmi menaAnnamária S.). - Dôkaz podvrhu metadát na 3. generácii súborov (
27554.jpga27555.jpg): V súboroch27554.jpg(265 194B) a27555.jpg(260 326B) bola154-bajtová hlavička Facebooku bezstratovo nahradená961-bajtovou statickou hlavičkou (APP1 Exif+APP1 XMP+APP13 IPTC) s menomAnnamária S., pričom celé zvyšné obrazové jadroDQT..EOI(264 233B pri dodávke a259 365B pri plagáte) zostalo na 100,000000 % bitovo identické so súbormi stiahnutými z Facebooku Kandidáta B (Subjektu B). - 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 offset97 (0x61)podľa vzorcaoff3 = 53 + 2N ≡ 1 (mod 2). Reverzným inžinierstvom sme tento algoritmus zrekonštruovali so 100 % bajtovou zhodou (MD5: bb48e5938d7ef8268b4285eb8d366d57). - 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 podpisDKIM-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.
27554.jpg (1774×887 px, 265 194 B, MD5: 4f71f083384c77c2548301e18644953b)
27555.jpg (1024×1536 px, 260 326 B, MD5: c3473d39162e7f7818d7c3676846f90e)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 =22bajtov; začína na offsete50). - 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 to22 + 3 = 25bajtov; začína na offsete50 + 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:
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. Vizuálne a matematické dôkazy o 100 % AI pôvode oboch vizuálov zo spoločnej predlohy
27554.jpg): Na prednej kapote AI vyhalucinovala mäkčeň v mene „ĽADISLAV LÖRINCZ“ a vynechala dĺžeň v slove „KANDIDAT“.
27554.jpg): Roztopené písmená v továrenskom označení „TRANSIT CUSTOM“ a skomolený modrý ovál Ford.
27554.jpg), v strede portrét z plagátu (27555.jpg), vpravo diferenciálna mapa ($r = 0,5612$, lokálna korelácia tváre $r = 0,9602$) dokazujúca identickú zdrojovú fotografiu Kandidáta B (Subjektu B).
27554.jpg): Jednotná hladina kompresie – celá 4-pohľadová scéna prešla enkodérom Meta ako jeden celok (87,37 % pixelov má nulovú odchýlku pri spätnej kompresii).
27555.jpg): Natívne rozlíšenie 1024×1536 z AI modelu bez dodatočne vlepovaných vrstiev.5. Kontrolná experimentálna reprodukcia: Vloženie © Testovací_Subjekt_X
Pomocou presne tej istej funkcie
build_injected_headers("Testovací_Subjekt_X") sme vložili autorské metadáta Testovací_Subjekt_X / © Testovací_Subjekt_X priamo do snímky obrazovky a vytvorili sme jej JPEG ekvivalent 27556_Testovaci_Subjekt_X.jpg (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 ako skúmané súbory 27554.jpg a 27555.jpg.
27556_Testovaci_Subjekt_X.jpg s vloženým copyrightom © Testovací_Subjekt_X6. 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 zmenili veľkosť (na 264 291 B a 260 035 B). |
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 časovou pečiatkou RFC 3161 TSA z 12. 9. 2026 00:02:50,864283 SELČ 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 12. 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)
01:51 – 01:57): Výpis príkazu c2pa verify ChatGP... s viditeľnými položkami ...dAlgorithmicMedia, c2pa.icon, c2pa.actions.v2, c2pa.hash.data a SSL.com C2PA RSA Root CA 2025.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, na jeho obrazovke svieti výpis platného 23 617-bajtového C2PA manifestu OpenAI ChatGPT (ChatGPT Image 14. 9. 2026, 15_21_34.png) s položkami digitalSourceType: trainedAlgorithmicMedia, claim_generator_info: ChatGPT, c2pa.icon, c2pa.actions.v2 (c2pa.created), c2pa.hash.data a koreňovou autoritou SSL.com C2PA RSA Root CA 2025! Expert mal teda priamo na vlastnom monitore nefalšovateľný kryptografický dôkaz (Sekcia 11), že súbor z USB kľúča je neporušený prvotný originál vytvorený a podpísaný v ChatGPT dňa 12. 9. 2026, no divákom tvrdil presný opak!
8. Kryptografická verifikácia originálneho e-mailu Fotografie.eml (RSA-SHA256 DKIM podpis Súkromná televízia, Microsoft a Google)
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.
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. Stav zaistených primárnych dôkazov v replikačnom archíve
| Generácia / Kategória dôkazu | Zaistený súbor v archíve .zip |
Kryptografický odtlačok MD5 | Stav verifikácie |
|---|---|---|---|
| 1. Generácia (Prvotný AI originál z ChatGPT) | dokazy_orig_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)) |
dokazy_facebook_lorincz/818261312_..._n.jpg (264 387 B)dokazy_facebook_lorincz/819103750_..._n.jpg (259 519 B)
|
08292f83ede7748e8bf2f04c974d65ea58b65023baa65439aaf8bbc88677e902
|
✔ 100 % ZHODA OBRAZOVÉHO JADRA DQT..EOI (264 233 B a 259 365 B) |
3. Generácia (Podvrhnuté súbory v Fotografie.eml) |
dokazy/Fotografie.eml (759 419 B)dokazy/27554.jpg (265 194 B)dokazy/27555.jpg (260 326 B)
|
6abb8df143e71287ae4575a6218f10ac4f71f083384c77c2548301e18644953bc3473d39162e7f7818d7c3676846f90e
|
✔ 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.jpgVeľkosť: 264 387 B (264,4 kB) | MD5: 08292f83ede7748e8bf2f04c974d65eaZačiatok DQT: offset 154 B | Od DQT po koniec: 264 233 BObsahuje meno Annamária S.?: NIE (0 výskytov)
|
Názov: 819103750_122105608545478317_6474924531061147815_n.jpgVeľkosť: 259 519 B (259,5 kB) | MD5: 58b65023baa65439aaf8bbc88677e902Začiatok DQT: offset 154 B | Od DQT po koniec: 259 365 BObsahuje 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 BVýsledné MD5: 4f71f083384c77c2548301e18644953bPorovnanie 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 BVýsledné MD5: c3473d39162e7f7818d7c3676846f90ePorovnanie s Redaktorovým 27555.jpg: 100,000000 % BITOVÁ ZHODA!
|
3. Terminácia (odstránenie) metadát (exiftool -all=)z oboch dvojíc súborov (ponechané len SOI 2 B + obrazové jadro DQT..EOI) |
Z FB súboru: 264 387 - 152 = 264 235 BZ Redaktorovho 27554.jpg: 265 194 - 959 = 264 235 BSpoločné MD5: 5c03923602de681ecfd2f07bfa99903a (100 % zhoda!)
|
Z FB súboru: 259 519 - 152 = 259 367 BZ Redaktorovho 27555.jpg: 260 326 - 959 = 259 367 BSpoloč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
-
Overenie nepriestrelnej väzby na obrazové dáta (
c2pa.hash.data):
Podboxc2pa.hash.data(CBOR mapa na lokálnom offsete3 162vcaBX) definuje vylúčenie (exclusion range) $\mathcal{E} = [33,\; 33 + 23\,629) = [33,\; 23\,662)$, ktoré presne pokrýva samotný chunkcaBX. Kryptografický odtlačok zvyšku súboru $F \setminus \mathcal{E}$ je:SHA-256( PNG[0..32] || PNG[23662..2169844] ) = a97d50d1086bbab04ac6fa9f5069132e1a806f70e6db3710944aacc50c1e0759Vypočítaný odtlačok sa na 100 % zhoduje s hodnotou uloženou vc2pa.hash.data. Tým je matematicky dokázané, že ani v hlavičkeIHDR, ani v2 146 159bajtoch obrazového prúduIDATnebol od okamihu kryptografického podpisu na serveri OpenAI zmenený ani jediný bit. -
Overenie zreťazených solaných odtlačkov (Salted Assertion Hashes) v
c2pa.claim.v2:
Štruktúrac2pa.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 policreated_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 solic2sh):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)
-
Dekódovanie generatívnych akcií v
c2pa.actions.v2:
CBOR štruktúra vc2pa.actions.v2obsahuje 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
-
Overenie podpisu
COSE_Sign1(RSASSA-PSS / PS256,alg = -37):
Podboxc2pa.signatureobsahujeCOSE_Sign1štruktúru (CBOR tag18) s3 048-bajtovou chránenou hlavičkou (obsahujúcou reťazec certifikátovx5chainv kľúči33) a256-bajtovým podpisom RSA-PSS nad kanonickou štruktúrouSig_structure = ["Signature1", body_protected, b"", c2pa_claim_v2_bytes](SHA-256 = f8f6c9dbf9ff1439b1491857c3db7e7a090e6724a4ce3d15783c97d02a7cec26). Verifikácia cezopenssl dgst -sha256 -sigopt rsa_padding_mode:pss -sigopt rsa_pss_saltlen:32voč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 ServiceI: CN=SSL.com C2PA ICA R1 2025, O=SSL Corporation, C=US |
0BA5FCE90E708CF2058031EE441C64732026-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=USI: CN=SSL.com C2PA RSA Root CA 2025, O=SSL Corporation, C=US |
272B63C8CC1D4D2D9B8451726CF49C5E3251AEDE2025-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 LeafI: CN=OpenAI TSA Issuing CA |
61DB4628328A8C8D4A06B7BFFE60E3026C3F71B72026-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, LLCI: CN=OpenAI TSA Root CA, OU=TSA, O=OpenAI OpCo, LLC |
048D04CAC6C50BC5DA19B0BCF14E1195A5EABC192026-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, LLCI: CN=OpenAI TSA Root CA (Self-Signed) |
13503B6C898CF02403332C8FF74F8EFB7D82EC1B2026-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 ResponderI: CN=SSL.com C2PA ICA R1 2025, O=SSL Corporation, C=US |
2F090E9BE8C4481AA8454DD1672B611E2026-01-02 → 2027-01-02 |
9A:FF:BC:BA:85:FF:91:FB:81:4F:97:3B:0D:6B:03:B8... |
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:
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. |
27555.jpg). Dole vľavo 8× zosilnená diferenciálna mapa $|I_1 - I_2|$ odhaľujúca $8 imes 8$ blokové artefakty kompresie Meta; dole vpravo diferenciálna mapa $|I_2 - I_3| = 0$ (čisto čierna plocha = 100,000 % zhoda pixelov medzi Facebookom a 27555.jpg).12. Metodika pre odbornú komunitu: Nezávislá replikácia výskumu a kompletný verifikačný kód
V priloženom archíve
FORENZNA_ANALYZA_KOMPLET_BALIK.zip sa nachádzajú všetky surové dôkazové súbory všetkých 3 generácií, extrahované kryptografické štruktúry (c2pa_artefakty/ a dkim_artefakty/), podrobný manuál README_REPLIKACIA_PRE_KOMUNITU.md a skript forensic_analyzer.py. Ktokoľvek z komunity môže rozbaliť archív a spustiť python3 forensic_analyzer.py alebo nižšie uvedené príkazy openssl / shasum / exiftool.
A. Rýchle príkazy openssl a shasum pre okamžitú nezávislú verifikáciu v termináli:
# 1. Overenie 100 % bitovej identity obrazového jadra DQT..EOI medzi Facebookom (offset 154) a Redaktorovými súbormi (offset 961):
tail -c +155 "dokazy_facebook_lorincz/818261312_122105609055478317_1412334835344542713_n.jpg" | shasum -a 256
tail -c +962 "dokazy/27554.jpg" | shasum -a 256
tail -c +155 "dokazy_facebook_lorincz/819103750_122105608545478317_6474924531061147815_n.jpg" | shasum -a 256
tail -c +962 "dokazy/27555.jpg" | shasum -a 256
# 2. Kryptografické overenie C2PA RSA-PSS (PS256) podpisu OpenAI na 1. generačnom PNG origináli:
openssl dgst -sha256 -sigopt rsa_padding_mode:pss -sigopt rsa_pss_saltlen:32 \
-verify "dokazy_orig_chatgpt/c2pa_artefakty/openai_media_service_pubkey.pem" \
-signature "dokazy_orig_chatgpt/c2pa_artefakty/c2pa_signature.bin" \
"dokazy_orig_chatgpt/c2pa_artefakty/c2pa_sig_structure.bin"
# 3. Výpis a kryptografické overenie RFC 3161 časovej pečiatky OpenAI TSA (Time stamp: Sep 11 22:02:50.864283 2026 GMT):
openssl ts -reply -in "dokazy_orig_chatgpt/c2pa_artefakty/openai_rfc3161_timestamp_token.tsr" -token_in -text
openssl cms -verify -in "dokazy_orig_chatgpt/c2pa_artefakty/openai_rfc3161_timestamp_token.tsr" \
-inform DER -CAfile "dokazy_orig_chatgpt/c2pa_artefakty/openai_c2pa_certs_chain.pem" -purpose any -out /dev/null
# 4. Kryptografické overenie RSA-SHA256 DKIM podpisu servera Súkromná televízia ([sukromna-tv.tld]) na e-maile Fotografie.eml:
openssl dgst -sha256 \
-verify "dokazy/dkim_artefakty/markizatv_selector1_pubkey.pem" \
-signature "dokazy/dkim_artefakty/eml_dkim_signature.bin" \
"dokazy/dkim_artefakty/eml_dkim_signed_headers.bin"
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 SPÄTNEJ (DVOJITEJ) KOMPRESIE VLASTNOU TABUĽKOU 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)
================================================================================
27554.jpg (1774x887 = 1573538 px):
Pôvodný obrazový kontajner (DQT..EOI): 264233 B | MD5: 735fcd1dd26263a676e02e53aad2932a
Po opätovnom uložení kompresorom Meta (2. runda): 264291 B | MD5: be9bdbc3e7630ee1ce6a79e298b815b1
Počet zmenených pixelov pri opätovnej kompresii: 293893 px (18.68 % obrazu sa zmenilo!)
Priemerná odchýlka pri spätnej kompresii: 0.3017 / 255 (zhodných zložiek: 87.37 %)
-> DÔKAZ: Ak by niekto nahral 27554.jpg / 27555.jpg na Facebook, kompresor Meta by zmenil
státisíce pixelov aj veľkosť a MD5 obrazového jadra. 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!
27555.jpg (1024x1536 = 1572864 px):
Pôvodný obrazový kontajner (DQT..EOI): 259365 B | MD5: 3737ad185bbb0d006975612dc5c3be6e
Po opätovnom uložení kompresorom Meta (2. runda): 260035 B | MD5: 54bfb8629974fbf8f13d7d589c8210c3
Počet zmenených pixelov pri opätovnej kompresii: 597059 px (37.96 % obrazu sa zmenilo!)
Priemerná odchýlka pri spätnej kompresii: 0.4702 / 255 (zhodných zložiek: 75.40 %)
-> DÔKAZ: Ak by niekto nahral 27554.jpg / 27555.jpg na Facebook, kompresor Meta by zmenil
státisíce pixelov aj veľkosť a MD5 obrazového jadra. 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 CID & MACOS QUARANTINE)
================================================================================
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 SPÄTNEJ (DVOJITEJ) KOMPRESIE VLASTNOU TABUĽKOU 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)
for name, path in [("27554.jpg", FILE_27554), ("27555.jpg", FILE_27555)]:
raw_orig = open(path, "rb").read()
dqt_pos = raw_orig.find(b"\xff\xdb")
orig_core = raw_orig[dqt_pos:]
im = Image.open(path)
buf = io.BytesIO()
im.save(buf, "JPEG", qtables=im.quantization, subsampling="4:2:0", progressive=True, optimize=True)
re_bytes = buf.getvalue()
re_core = re_bytes[re_bytes.find(b"\xff\xdb") :]
im_re = Image.open(io.BytesIO(re_bytes))
diff = np.abs(np.array(im, dtype=np.float32) - np.array(im_re, dtype=np.float32))
changed_px = int((diff.sum(axis=2) > 0).sum())
zero_pct = (diff == 0).mean() * 100.0
print(f"{name} ({im.width}x{im.height} = {im.width * im.height} px):")
print(f" Pôvodný obrazový kontajner (DQT..EOI): {len(orig_core)} B | MD5: {hashlib.md5(orig_core).hexdigest()}")
print(f" Po opätovnom uložení kompresorom Meta (2. runda): {len(re_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.width * im.height) * 100:.2f} % obrazu sa zmenilo!)")
print(f" Priemerná odchýlka pri spätnej kompresii: {diff.mean():.4f} / 255 (zhodných zložiek: {zero_pct:.2f} %)")
print(" -> DÔKAZ: Ak by niekto nahral 27554.jpg / 27555.jpg na Facebook, kompresor Meta by zmenil")
print(" státisíce pixelov aj veľkosť a MD5 obrazového jadra. 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 CID & MACOS QUARANTINE)")
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()
Stiahnite si pôvodné nedotknuté súbory a urobte si vlastnú analýzu
Samotné obrazové súbory nie sú nijako upravované – ponechávame ich 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ť a nezávisle overiť všetky naše zistenia.
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 (12. 9. 2026 00:02:50 SELČ) sú chránené nefalšovateľným kryptografickým podpisom autority DigiCert.
Ladislav Miko
Šéfredaktor KOŠICE: DNES