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.
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!
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.
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):
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
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.
Zero baten eraketaren kasuan (murrizketa deritzona), gordetako informazio kopurua bere tamainaren arabera murriztuko da, lehengo koefiziente independentea RLE kodetutako zeroen sekuentziaren parte bihurtuko baita:
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:
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 esanguratsuaka
:- Hash magikoen funtzioa kontuan hartzen da
f
, n biteko hitza adierazten duenaa
k-biteras
; - Bada
s == 0
, orduan ez dago ezer aldatu beharrik eta algoritmoa hurrengo koefizienteetara pasatzen da; - Erantzule koefizientearen balio absolutua murriztea
s
-aizu hitzari hozkaa
; - Murrizketaren ondorioz murrizketa bat gertatzen bada (koefizientea 0 bihurtzen da), orduan errepikatu urratsa hasieratik;
- Hash magikoen funtzioa kontuan hartzen da
- 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.
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
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 -
Aldatua -
Aldea -
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.
->
Iturria: www.habr.com