Aurreztu disko gogorrean tokia esteganografia erabiliz

Esteganografiaz hitz egiten dugunean, jendeak terroristak, pederastak, espioiak edo, onenean, kriptoanarkistak eta beste zientzialari batzuk pentsatzen ditu. Eta benetan, nork beste behar dezake ezkutatu kanpoko begietatik zerbait? Zein onura izan diezaioke pertsona arrunt bati?

Bat dagoela ematen du. Horregatik, gaur datuak esteganografia metodoak erabiliz konprimituko ditugu. Eta azkenean, irakurleak bere argazki artxibo preziatuak JPEGetan ere erabili ahal izango ditu fitxategi-sisteman doan gigabyte kopurua handitzeko.

Aurreztu disko gogorrean tokia esteganografia erabiliz

Zer?

Irakurleak gogoratzen badu, esteganografia hain algoritmo bitxiak dira, informazio baten presentzia beste baten barruan ezkutatzeko aukera ematen dutenak. Are hizkuntza sinpleagoan: irudia + fitxategia == gutxi gorabehera irudi bera, baina ez guztiz (irudien ordez edozer egon daiteke, baina normalean dena argiago dago horietan). Hala ere, ez litzateke modu errazik egon behar barruan zerbait dagoen edo ez zehazteko.

Baina bata bestearengandik bereizi ezin bada, ba al dago alderik? Kontsumitzailearen ikuspuntutik, erabiltzaileari ez zaio axola zehaztasun matematikoaz (bit multzo jakin batek islatzen duena), hark hautematen duena baizik.

Adibidez, ikus ditzagun txakur polit baten hiru irudi:

Kontuz, JPEG!

Aurreztu disko gogorrean tokia esteganografia erabiliz Aurreztu disko gogorrean tokia esteganografia erabiliz Aurreztu disko gogorrean tokia esteganografia erabiliz

Tamainan alde handia izan arren, jende gutxik aukeratuko du hirugarren bertsioa. Bestalde, lehenengo bi argazkien arteko aldea ez da hain nabaria, eta horietan dagoen informazio kopurua (nire ikuspuntutik) berdina izan daiteke.

Printzipio hau bera zaharra da jada eta urte askotan zehar galerazko informazioa konprimitzeko metodoek aktiboki ustiatu dute. Baina haustea ez da eraikitzea; gaiaren alde aurreratuagoa interesatzen zaigu. Posible al da tamainako informazio gehigarria txertatzea N fitxategira bere tamaina handitu dadin M < N, baina aldaketak ez ziren nabaritu erabiltzailearentzat?

Noski ahal duzula. Baina merezi du erreserba pare bat berehala egitea:

  • Lehenik eta behin, metodoak unibertsala izan behar du eta sarrerako datu gehienetan emaitza positiboa eman behar du. Hau da, batez beste, ausazko sarrera baterako, gordetako informazio-kopuruaren benetako murrizketa izan beharko litzateke. "Batez beste" esan nahi du kontrakoa gerta daitekeela, baina ez luke nagusitu behar.
  • Bigarrenik, informazioa txertatu aurretik konprimitutako edukiontziaren tamaina handiagoa izan behar da bere aldaketa antzeko moduan konprimituta baino. LSB metodoa erabiliz BMP irudietan bit mordoa txertatzea ez da konpresio esteganografikoa, izan ere, DEFLATE moduko baten bidez exekutatuta, jatorrizko irudia ziurrenik nabarmen txikiagoa izango da.
  • Hirugarrenik, emaitza metodo klasikoek dagoeneko konprimitutako datuekin egin eta alderatu behar da. Honek haien erredundantzian dauden diferentziak eragin probabilista kenduko du eta konpresio eraginkorragoa emango du kasu orokorrean.

Non?

Esteganografia erabiltzeak esan nahi du, konprimitutako informazioaz gain, txertatuko den edukiontziak beharko ditugula. Kapsulatutako informazio kopuru handiena propietate indibidualen araberakoa da neurri handi batean, baina askoz errazagoa da haien kopuruarekin eskalatzea. Hori dela eta, edukiontziaren formatuak ohikoa izan behar du, erabiltzaileak nahikoa izan dezan β€œkonpresio” prozesutik etekinik ateratzeko.

Testuinguru honetan, grafikoak, audio eta bideo fitxategiak hautagai onak dira. Baina, formatu, kodec eta abar ezberdinen aniztasuna dela eta, praktikan ez zaigu hainbeste aukeraren artean aukeratzea.

Hau guztia kontuan hartuta, nire aukera JPEG-n erori zen.Ia denek dute, oso erabilia da bai helburu pertsonaletarako bai negozioetarako, irudi gehienen ia de facto formatua izanik.

Aurreztu disko gogorrean tokia esteganografia erabiliz

Arabera?

Ondoren, eskema eta deskribapen hurbilak eta teknikoak daude azalpen handirik gabe, beraz, interesa dutenek "Goi Teknologiak" atalera joanez salta ditzakete.

Ezaugarri komunak

Datuak nonbait txertatzeko, lehenik non zehaztu behar duzu. Fitxategi-sisteman hainbat argazki egon daitezke, eta horietatik batzuk bakarrik erabili nahi ditu erabiltzaileak. Nahi den edukiontzi multzo horri liburutegia deituko diogu.

Bi kasutan eratzen da: konpresioaren aurretik eta deskonpresioaren aurretik. Lehenengo kasuan, fitxategi-izen multzo bat erabil dezakezu (edo hobeto esanda, horien adierazpen erregular bat) fitxategien artean, baina bigarrenean, fidagarriagoa den zerbait behar da: erabiltzaileak fitxategi-sisteman kopiatu eta mugitu ditzake. , horrela behar bezala identifikatzea saihestuz. Hori dela eta, beharrezkoa da haien hashak gordetzea (md5 nahikoa da) aldaketa guztiak egin ondoren.

Kasu honetan, ez du balio hasierako bilaketa adierazpen erregular bat erabiliz fitxategi-sistema osoan zehar egiteak; nahikoa da erro direktorio jakin bat zehaztea. Bertan artxibo-fitxategi berezi bat gordeko da, hash horiek jasoko dituena, eta gero konprimitutako informazioa berreskuratzeko beharrezkoa den beste metainformazioarekin batera.

Hau guztia berdin aplikatzen da datu esteganografikoen konpresio-algoritmoren edozein inplementaziorako. Datuak konprimitzeko eta berreskuratzeko prozesuei beraiek paketatzea eta desegitea dei dakieke.

F5

Orain argi geratu da zertan ari garen eta zergatik, helburua lortzeko algoritmoa deskribatzea falta da. Gogora dezagun JPEG fitxategi bat kodetzeko prozesua (Bauman National Library-ren wikiari esker):

Aurreztu disko gogorrean tokia esteganografia erabiliz

Hori ikusita, hobe da berehala iruzkin batzuk egitea:

  • JPEG fitxategi baten tamaina optimotzat har daiteke Winrar motaren batekin konprimitzen saiatu gabe;
  • Biltegiratutako informazioa bakarrik (kosinu-eraldaketa diskretuaren irteeratik ateratzen dena, DCT) alda daiteke gutxienez errendimendu onargarria eskaintzeko.
  • Erabiltzaileak nabaritzen duen eskala industrialean datuak ez galtzeko, beharrezkoa da irudi bakoitzari gutxieneko aldaketak egitea;

Algoritmo-familia oso bat egokitzen da baldintza horietara, eta horiek ezagutu ditzakezu aurkezpen on honetan. Horietatik aurreratuena algoritmoa da F5 Andreas Westfeld-ek, distira-osagaiaren DCT koefizienteekin lan egiten du (giza begia da bere aldaketetara gutxien sentikorra). Lehendik dagoen JPEG fitxategi batekin lan egitean bere diseinu orokorra honela bistaratzen da:

Aurreztu disko gogorrean tokia esteganografia erabiliz

F5 blokeak txertatze-teknika aurreratu bat erabiltzen du matrize-kodifikazioan oinarrituta. Irakurleak horri buruz eta algoritmoari buruz gehiago jakin dezake goiko estekan, baina batez ere bere laguntzarekin informazio kopuru bera txertatzean zenbat eta aldaketa gutxiago egin ditzakezula interesatzen zaigu, orduan eta handiagoa izango da erabilitako edukiontziaren tamaina. , eta Algoritmoak Huffman eta RLE (des)kodetze eragiketa sinpleak egin behar ditu soilik.

Aldaketak beraiek koefiziente osoetan egiten dira eta balio absolutua bat murrizten dute, eta horri esker, oro har, F5 erabiltzea datuak konpresiorako. Kontua da balio absolutuaren koefiziente murriztuak Huffman-en kodeketaren ondoren bit gutxiago okupatuko dituela JPEG-en balioen banaketa estatistikoa dela eta.

Aurreztu disko gogorrean tokia esteganografia erabiliz

Zero baten eraketaren kasuan (murrizketa deritzona), gordetako informazio kopurua bere tamainaren arabera murriztuko da, lehengo koefiziente independentea RLE kodetutako zeroen sekuentziaren parte bihurtuko baita:

Aurreztu disko gogorrean tokia esteganografia erabiliz

aldaketak

Datuen babesa eta konpresioa arazo ortogonalak dira, beraz, jatorrizko algoritmoaren pasahitz sekretua alda daiteke. Gainera, datuak zehatz-mehatz nola atera behar diren jakin behar dugu, beraz, horretarako beharrezkoa den informazio guztia (zein edukiontzi erabili ziren, zein ordenatan, etab.) aparteko fitxategi batean grabatu beharko litzateke eta artxibatzaileak doan irakurtzeko irekita egon behar du.

Jatorrizko algoritmoa mezu sekretuak transmititzeko diseinatuta dago, beraz, aldi berean edukiontzi bakarrarekin funtzionatzen du, erabiltzaileak berak behar izanez gero zatitan zatituko duela suposatuz, hala badagokio. Gainera, edukiontzi bakoitzean modu independentean txertatuta, aldez aurretik jakin beharko duzu zenbat datu jarri behar dituzun bakoitzean. Beraz, liburutegiko elementu bakoitzaren koefizienteak abstraktu handi batean konbinatu eta jatorrizko algoritmoaren arabera landu behar dira.

Jatorrizko F5-ak edukiontziaren tamainaren % 12raino onartzen duenez, aldaketa honek gehienezko edukiera ere handituko du: liburutegi osoaren tamainaren "% 12 arte" "% 12 arte" batura baino handiagoa edo berdina da. "Bere elementu bakoitzetik.

Araubide orokorra kodetua honako hau da:

Aurreztu disko gogorrean tokia esteganografia erabiliz

Algoritmoa bera

Orain algoritmoa bera hasieratik amaierara deskribatzeko garaia da, irakurlea iluntasunean ez mantentzeko:

  • Erabiltzaileak M datu konprimigarri bitarrak eta L liburutegia definitzen ditu adierazpen erregular bat eta bilaketa erroko direktorio bat erabiliz;
  • FSan agertzen diren ordenan, liburutegiko elementuek MC osatzen dute:
    • Fitxategiko datuetatik C koefiziente sorta bat deskodetzen da;
    • MC <- MC | C;
  • k parametroa desberdintasun izugarrian oinarrituta zehazten da: |M| * 8 / (count_full(MC) + count_ones(MC) * k_rate(k)) < k / ((1 << k) - 1);
  • Hurrengoa hartuta n = (1 << k) - 1 MC-tik eta idatzitako elementu ez-zeroen bit gutxien esanguratsuak a:
    • Hash magikoen funtzioa kontuan hartzen da f, n biteko hitza adierazten duena a k-bitera s;
    • Bada s == 0, orduan ez dago ezer aldatu beharrik eta algoritmoa hurrengo koefizienteetara pasatzen da;
    • Erantzule koefizientearen balio absolutua murriztea s-aizu hitzari hozka a;
    • Murrizketaren ondorioz murrizketa bat gertatzen bada (koefizientea 0 bihurtzen da), orduan errepikatu urratsa hasieratik;
  • Koefiziente guztiak RLE eta Huffman-ek kodetzen dituzte, iturburu-fitxategietan idatzita;
  • k parametroa artxibo fitxategian idazten da;
  • L fitxategi bakoitzetik MD5 hash bat kalkulatzen da jatorrizko kokapenaren ordenan eta artxibo fitxategian idazten da.

Goi teknologia

Algoritmoaren forma inozoak eta goi-mailako beste hizkuntza batzuetan (batez ere zabor bilketarekin) errendimendu izugarriak emango lituzke, beraz, konplexutasun horiek guztiak C hutsean inplementatu nituen eta hainbat optimizazio egin nituen, bai exekuzio-abiadurari dagokionez, bai exekuzio-abiadurari dagokionez. memoria (ez dakizu irudi horiek zenbat pisatzen duten konpresiorik gabe DCT baino lehen ere). Baina hala eta guztiz ere, hasiera batean exekuzio-abiadurak asko utzi zuen desiratzeko, beraz, ez dut erabilitako prozesu eta metodo osoa deskribatuko.

Plataforma gurutzatua libjpeg, pcre eta tinydir liburutegien konbinazioa erabiliz lortzen da, eta eskerrak ematen dizkiegu. Lehenespenez, dena normal bidez konpilatzen da make, beraz, Windows erabiltzaileek Cygwin batzuk instalatu nahi dituzte beren kabuz, edo Visual Studio eta liburutegiekin beren kabuz landu nahi dituzte.

Inplementazioa kontsola erabilgarritasun eta liburutegi moduan eskuragarri dago. Interesa dutenek azken hau erabiltzeari buruz gehiago jakin dezakete Github-eko biltegian dagoen readme-n, zeinari mezuaren amaieran erantsiko dudan esteka. Eta hemen lanaren deskribapen eta erakustaldira pasatzen gara.

Nola erabili?

Arretaz. Erabilitako irudiak nahi bezala mugitu, izena aldatu eta kopiatu daitezke. Hala ere, kontu handiz ibili behar duzu eta haien edukia ez aldatu inola ere. Bit bat aldatzeak hash-a eten egingo du eta ezinezkoa izango da informazioa berreskuratzea.

Demagun konpilatu ondoren f5ar fitxategi exekutagarria lortzen dugula. Liburutegiaren tamaina azter dezakezu bandera erabiliz erabileraren aukerak kalkulatzeko -a: ./f5ar -a [ΠΏΠ°ΠΏΠΊΠ° поиска] [Perl-совмСстимоС рСгулярноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅]. Paketatzea taldeak egiten du ./f5ar -p [ΠΏΠ°ΠΏΠΊΠ° поиска] [Perl-совмСстимоС рСгулярноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅] [ΡƒΠΏΠ°ΠΊΠΎΠ²Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ Ρ„Π°ΠΉΠ»] [имя Π°Ρ€Ρ…ΠΈΠ²Π°], eta desegitea erabiliz ./f5ar -u [Ρ„Π°ΠΉΠ» Π°Ρ€Ρ…ΠΈΠ²Π°] [имя восстановлСнного Ρ„Π°ΠΉΠ»Π°].

Lanaren erakustaldia

Metodoaren eraginkortasuna erakusteko, zerbitzuko txakurren 225 argazki guztiz doako bilduma bat igo nuen. Unsplash. Horietako bakoitzak erabiltzaileen argazki arruntak baino kalitate apur bat handiagoa du, baina hala ere. Horietako bakoitza libjpeg erabiliz berriro kodetu zen liburutegiaren kodetze-eginbideek tamaina orokorrean duten eragina neutralizatzeko. Datu konprimagarrien adibiderik txarrena adierazteko, ausazko 36 metroko (tamainaren % 5 baino apur bat gehiago) uniformeki banatutako fitxategi bat sortu zen dd erabiliz.

Proba prozesua nahiko erraza da:

$ ls
binary_data dogs f5ar
$ du -sh dogs/
633M dogs/
$ du -h binary_data
36M binary_data

$ ./f5ar -p dogs/ .*jpg binary_data dogs.f5ar
Reading compressing file... ok
Initializing the archive... ok
Analysing library capacity... done in 16.8s
Detected somewhat guaranteed capacity of 48439359 bytes
Detected possible capacity of upto 102618787 bytes
Compressing... done in 32.6s
Saving the archive... ok

$ ./f5ar -u dogs/dogs.f5ar unpacked
Initializing the archive... ok
Reading the archive file... ok
Filling the archive with files... done in 1.2s
Decompressing... done in 17.5s
Writing extracted data... ok

$ sha1sum binary_data unpacked
ba7ade4bc77881ab463121e77bbd4d41ee181ae9 binary_data
ba7ade4bc77881ab463121e77bbd4d41ee181ae9 unpacked
$ du -sh dogs/
563M dogs/

Edo zaleentzako pantaila-argazkia

Aurreztu disko gogorrean tokia esteganografia erabiliz

Ikus dezakezunez, disko gogorrean dauden jatorrizko 633 + 36 == 669 megabyte datuetatik, 563 politagoa lortu genuen, ~1,188ko konpresio-erlazioa emanez. Ezberdintasun erradikal hau galera oso txikiek azaltzen dute, JPEG fitxategiak metodo klasikoak erabiliz (tinyjpg adibidez) optimizatzean lortzen direnen antzekoak. Jakina, konpresio esteganografikoa erabiltzean, informazioa ez da "galtzen" besterik gabe, beste datu batzuk kodetzeko erabiltzen da. Gainera, F5 erabiltzearen ondorioz "optimizatu" koefizienteen kopurua optimizazio tradizionalarekin baino askoz txikiagoa da.

Aldaketak edozein direla ere, guztiz ikusezinak dira begietarako. Beheko spoiler-aren azpian, irakurleak aldea ebaluatu dezake begiz eta aldatutako osagaiaren balioak jatorrizkotik kenduz (kolorea zenbat eta isilagoa izan, orduan eta aldea txikiagoa):

Habrastorage-n kabitzen ez diren irudietarako estekak

Jatorrizkoa - https://i.ibb.co/wNDLNcZ/1.jpg
Aldatua - https://i.ibb.co/qWvpfFM/1.jpg
Aldea - https://i.ibb.co/2ZzhHfD/diff.jpg

Horren ordez Ondorio baten

Espero dut irakurlea konbentzitu izana horrelako metodoak posible direla eta bizitzeko eskubidea dutela. Hala ere, disko gogor bat edo kanal gehigarri bat erostea (sare-transmisiorako) modu honetan dirua aurrezten saiatzea baino aukera askoz errazagoa dirudi. Alde batetik, hori egia da; garapen zabala errazagoa eta fidagarriagoa da askotan. Baina, bestetik, ez dugu bizia ahaztu behar. Azken finean, ez dago bermerik bihar dendara etorri eta zuk zeuk beste mila terabyte-ko disko gogor erosteko aukera izango zarela, baina beti erabil ditzakezu etxean etzanda dituzunak.

-> GitHub

Iturria: www.habr.com

Gehitu iruzkin berria