Sparaðu pláss á harða disknum með því að nota steganography

Þegar við tölum um stiganography hugsar fólk um hryðjuverkamenn, barnaníðinga, njósnara eða í besta falli dulmálsfræðinga og aðra vísindamenn. Og í raun, hver annar gæti þurft fela sig eitthvað frá ytri augum? Hver gæti verið ávinningurinn af þessu fyrir venjulegan mann?

Það kemur í ljós að það er einn. Þess vegna munum við í dag þjappa gögnum með steganography aðferðum. Og á endanum mun lesandinn jafnvel geta notað dýrmæt ljósmyndasöfn sín í JPEG til að fjölga ókeypis gígabætum í skráarkerfinu.

Sparaðu pláss á harða disknum með því að nota steganography

Hvað?

Ef lesandinn man þá er steganography svo undarleg reiknirit sem gerir það mögulegt að fela tilvist einnar upplýsinga inni í annarri. Á enn einfaldara tungumáli: mynd + skrá == um það bil sama mynd, en ekki alveg (í stað mynda getur verið hvað sem er, en venjulega er allt skýrara í þeim). Það ætti ekki að vera auðveld leið til að ákvarða hvort það sé eitthvað inni eða ekki.

En ef ekki er hægt að greina eitt frá öðru, er þá nokkur munur? Frá sjónarhóli neytandans er notandanum sama um stærðfræðilega nákvæmni (endurspeglast af tilteknu setti bita), aðeins það sem hann skynjar.

Til dæmis skulum við skoða þrjár myndir af sætum hundi:

Varist, JPEG!

Sparaðu pláss á harða disknum með því að nota steganography Sparaðu pláss á harða disknum með því að nota steganography Sparaðu pláss á harða disknum með því að nota steganography

Þrátt fyrir mikinn stærðarmun munu fáir velja þriðju útgáfuna. Aftur á móti er munurinn á fyrstu tveimur ljósmyndunum ekki svo áberandi og upplýsingamagnið í þeim (frá mínu sjónarhorni) getur verið jafnt.

Þessi meginregla sjálf er þegar gömul og hefur verið virkt nýtt með tapaða upplýsingaþjöppunaraðferðum í mörg ár. En brot er ekki að byggja upp; við höfum áhuga á lengra komna hlið málsins. Er hægt að fella inn viðbótar stærðarupplýsingar N í skrána þannig að stærð hennar stækkar um M < N, en breytingarnar voru ekki áberandi fyrir notandann?

Auðvitað máttu það. En það er þess virði að panta strax:

  • Í fyrsta lagi þarf aðferðin að vera alhliða og gefa jákvæða niðurstöðu á flestum inntaksgögnum. Það er að meðaltali, fyrir handahófskenndan inntak ætti að vera raunveruleg minnkun á magni geymdra upplýsinga. „Að meðaltali“ þýðir að hið gagnstæða getur átt sér stað, en ætti ekki að vera ríkjandi.
  • Í öðru lagi verður stærð þjappaðs íláts fyrir innfellingu upplýsinga að vera stærri en breyting þess þjöppuð á svipaðan hátt. Einfaldlega að fella fullt af bitum inn í BMP myndir með LSB aðferðinni er ekki stiganógrafísk þjöppun, þar sem upprunalega myndin mun líklega vera áberandi minni eftir að hafa verið keyrð í gegnum einhvers konar DEFLATE.
  • Í þriðja lagi þarf að framkvæma niðurstöðuna og bera saman með tilliti til gagna sem þegar hafa verið þjappað saman með klassískum aðferðum. Þetta mun fjarlægja líkindaáhrif mismunar á offramboði þeirra og veita skilvirkari þjöppun í almennu tilviki.

Hvar?

Notkun stiganography felur í sér að til viðbótar við þjöppuðu upplýsingarnar þurfum við ílát sem þær verða felldar inn í. Hámarksmagn innbyggðra upplýsinga fer að miklu leyti eftir einstökum eiginleikum, en það er miklu auðveldara að skala með fjölda þeirra. Þess vegna verður gámasniðið að vera algengt þannig að notandinn hafi nóg af þeim til að fá einhvern ávinning af „þjöppun“ ferlinu.

Í þessu samhengi eru grafík-, hljóð- og myndskrár góðir umsækjendur. En vegna fjölbreytileika mismunandi sniða, merkjamála osfrv., í reynd erum við eftir með val um ekki svo marga möguleika.

Miðað við allt þetta, þá féll val mitt á JPEG. Næstum allir eiga það, það er mikið notað bæði í persónulegum og viðskiptalegum tilgangi, er nánast raunverulegt snið fyrir flestar myndir.

Sparaðu pláss á harða disknum með því að nota steganography

Það fer eftir ýmsu?

Næst eru nálægar og tæknilegar skýringarmyndir og lýsingar án mikillar útskýringar, svo áhugasamir geta sleppt þeim með því að fletta að hlutanum „Hátækni“.

Sameiginlegir eiginleikar

Til að fella inn gögn einhvers staðar verður þú fyrst að ákveða hvar. Það getur verið hvaða fjöldi mismunandi ljósmynda sem er á skráarkerfinu, sem notandinn gæti viljað nota aðeins nokkrar af. Við munum kalla slíkt eftirsótt sett af gámum bókasafn.

Það myndast í tveimur tilvikum: fyrir þjöppun og fyrir þjöppun. Í fyrra tilvikinu geturðu einfaldlega notað safn af skráarnöfnum (eða enn betra, regluleg tjáning fyrir þær) af skrám, en í því seinna þarf eitthvað áreiðanlegra: notandinn getur afritað og fært þær innan skráarkerfisins , og koma þannig í veg fyrir að þeir séu rétt auðkenndir. Þess vegna er nauðsynlegt að geyma kjötkássa þeirra (md5 er nóg) eftir að allar breytingar hafa verið gerðar.

Í þessu tilviki þýðir ekkert að framkvæma fyrstu leitina með reglulegri tjáningu í öllu skráarkerfinu; það er nóg að tilgreina ákveðna rótarskrá. Sérstök skjalaskrá verður vistuð í henni, sem mun innihalda þessi kjötkássa, ásamt öðrum metaupplýsingum sem nauðsynlegar eru til að endurheimta þjappaðar upplýsingar síðar.

Allt þetta á jafnt við um hvaða útfærslu sem er á hvaða stiganógrafísku gagnaþjöppunaralgrími sem er. Ferlið við þjöppun og endurheimt gagna má kalla sjálft pökkun og upptöku.

F5

Nú þegar það er orðið ljóst hvað við erum að gera og hvers vegna, er eftir að lýsa reikniritinu til að ná markmiðinu. Við skulum rifja upp ferlið við að kóða JPEG skrá (þökk sé wiki Bauman Landsbókasafninu):

Sparaðu pláss á harða disknum með því að nota steganography

Þegar þú horfir á það er betra að gera nokkrar athugasemdir strax:

  • Stærð JPEG skráar getur talist ákjósanleg án þess þó að reyna að þjappa henni með einhvers konar Winrar;
  • Aðeins er hægt að breyta geymdu upplýsingum (það sem er gefið út frá stakri kósínusumbreytingu, DCT) til að veita að minnsta kosti viðunandi afköst.
  • Til þess að tapa ekki gögnum á iðnaðarmælikvarða sem notandinn er áberandi er nauðsynlegt að gera að lágmarki breytingar á hverri mynd;

Heil fjölskylda reiknirita passar við þessar aðstæður, sem þú getur kynnt þér í þessari góðu kynningu. Það fullkomnasta þeirra er reikniritið F5 eftir Andreas Westfeld, sem vinnur með DCT-stuðla birtuþáttarins (mannlegt auga er minnst næmt fyrir breytingum hans). Almennt útlit þess þegar unnið er með núverandi JPEG skrá birtist sem hér segir:

Sparaðu pláss á harða disknum með því að nota steganography

F5 blokkin notar háþróaða innfellingartækni sem byggir á fylkiskóðun. Lesandinn getur lært meira um það og reikniritið sjálft á hlekknum hér að ofan, en við höfum fyrst og fremst áhuga á því að með hjálp þess er hægt að gera því færri breytingar þegar verið er að fella inn sama magn af upplýsingum, því stærri er ílátið sem notað er , og til að framkvæma reikniritið þarf aðeins að framkvæma einfaldar Huffman og RLE (af)kóðun aðgerðir.

Breytingarnar sjálfar eru gerðar á heiltölustuðlum og koma niður á að lækka algildi þeirra um einn, sem gerir almennt kleift að nota F5 fyrir gagnaþjöppun. Málið er að minnkaði stuðullinn í algildi mun líklega taka færri bita eftir Huffman kóðun vegna tölfræðilegrar dreifingar gilda í JPEG.

Sparaðu pláss á harða disknum með því að nota steganography

Ef um er að ræða myndun núlls (svokallaða minnkun) mun fjöldi geymdra upplýsinga minnka um stærð þess, þar sem fyrrverandi óháði stuðullinn verður hluti af RLE kóðuðu röð núllanna:

Sparaðu pláss á harða disknum með því að nota steganography

Breytingar

Gagnavernd og þjöppun eru hornrétt vandamál, þannig að hægt er að vanrækja leynilega lykilorðabreytinguna frá upprunalegu reikniritinu. Þar að auki þurfum við að vita nákvæmlega hvernig á að draga gögnin út, þannig að allar nauðsynlegar upplýsingar fyrir þetta (hvaða gámar voru notaðir, í hvaða röð osfrv.) ættu að vera skráðar í sérstakri skrá og vera opnar fyrir skjalavörðinn ókeypis.

Upprunalega reikniritið er hannað til að senda leynileg skilaboð, þannig að það virkar aðeins með einum íláti í einu, að því gefnu að notandinn sjálfur muni brjóta það í hluta ef þörf krefur, ef einhver er. Þar að auki, þegar það er fellt sjálfstætt inn í hvern ílát, þarftu að vita fyrirfram hversu marga gagnabita á að setja í hvern. Þess vegna ætti að sameina stuðla hvers þáttar í safninu í einn stóran abstrakt og vinna með hann samkvæmt upprunalegu reikniritinu.

Þar sem upprunalega F5 leyfir allt að 12% af gámastærð mun þessi breyting einnig auka hámarksgetuna: "allt að 12%" af stærð alls safnsins er stærri en eða jöfn summu "allt að 12% " frá hverjum þætti þess.

Samræmda almenna kerfið er sem hér segir:

Sparaðu pláss á harða disknum með því að nota steganography

Reikniritið sjálft

Nú er kominn tími til að lýsa reikniritinu sjálfu frá upphafi til enda, til að halda lesandanum ekki í myrkri:

  • Notandinn skilgreinir tvöfalda þjappanlegu gögnin M og safnið L með því að nota reglubundna tjáningu og leitarrótarskrá;
  • Í þeirri röð sem þeir birtast á FS mynda bókasafnsþættirnir MC:
    • Röð af stuðlum C eru afkóðuð úr skráargögnunum;
    • MC <- MC | C;
  • Færibreytan k er ákvörðuð út frá hræðilegu ójöfnuði: |M| * 8 / (count_full(MC) + count_ones(MC) * k_rate(k)) < k / ((1 << k) - 1);
  • Tekið næst n = (1 << k) - 1 minnstu marktæku bita af frumefnum sem ekki eru núll frá MC og skrifaðir til a:
    • Töfra kjötkássaaðgerðin er tekin til greina f, sem táknar n-bita orð a að k-bita s;
    • Ef s == 0, þá þarf ekki að breyta neinu og reikniritið færist yfir í næstu stuðla;
    • Draga úr algildi stuðulsins sem ber ábyrgð á s-hey beit í orðið a;
    • Ef lækkun á sér stað vegna lækkunarinnar (stuðullinn verður 0), endurtakið síðan skrefið frá upphafi;
  • Allir stuðlar eru kóðaðir af RLE og Huffman, skrifaðir í frumskrárnar;
  • Færibreytan k er skrifuð í skjalasafnið;
  • MD5 kjötkássa er reiknuð út úr hverri skrá L í upprunalegri staðsetningu þeirra og skrifað í skjalasafnið.

Hátækni

Barnalegt form reikniritsins og útfærslur á öðrum tungumálum á háu stigi (sérstaklega með sorphirðu) myndi gefa hræðilega afköst, svo ég útfærði alla þessa margbreytileika í hreinu C og framkvæmdi fjölda hagræðinga bæði hvað varðar framkvæmdarhraða og minni (þú hefur ekki hugmynd um hversu mikið þessar myndir vega án þjöppunar jafnvel fyrir DCT). En þrátt fyrir það, í fyrstu skildi hraðinn á framkvæmdinni miklu eftir, svo ég mun ekki lýsa öllu ferlinu og aðferðunum sem notaðar eru.

Cross-platform er náð með því að nota blöndu af libjpeg, pcre og tinydir bókasöfnum, sem við þökkum þeim fyrir. Sjálfgefið er að allt er sett saman með venjulegum hætti make, þannig að Windows notendur vilja setja upp Cygwin fyrir sig, eða takast á við Visual Studio og bókasöfn á eigin spýtur.

Útfærslan er fáanleg í formi console gagnsemi og bókasafns. Áhugasamir geta fundið meira um notkun þess síðarnefnda í readme í geymslunni á Github, hlekkinn sem ég mun hengja á í lok færslunnar. Og hér er farið í lýsingu og sýnikennslu á verkinu.

Hvernig á að nota?

Varlega. Hægt er að færa notaðar myndir, endurnefna og afrita að vild. Hins vegar ættir þú að vera mjög varkár og ekki breyta innihaldi þeirra á nokkurn hátt. Að breyta einum bita truflar hassið og gerir það ómögulegt að endurheimta upplýsingarnar.

Segjum að eftir samantekt fáum við keyrsluskrána f5ar. Hægt er að greina stærð safnsins til að reikna út notkunarmöguleika þess með því að nota fánann -a: ./f5ar -a [папка поиска] [Perl-совместимое регулярное выражение]. Pökkun fer fram af teyminu ./f5ar -p [папка поиска] [Perl-совместимое регулярное выражение] [упаковываемый файл] [имя архива], og taka upp með því að nota ./f5ar -u [файл архива] [имя восстановленного файла].

Sýning á vinnu

Til að sýna árangur aðferðarinnar hlóð ég upp safni af 225 algerlega ókeypis myndum af hundum frá þjónustunni Unsplash. Hver þeirra hefur aðeins meiri gæði en venjulegar notendamyndir, en samt. Hver þeirra var endurkóðuð með libjpeg til að hlutleysa áhrif kóðunareiginleika bókasafnsins á heildarstærð. Til að gefa til kynna versta dæmið um samþjöppanleg gögn var tilviljunarkennd 36 metra (örlítið meira en 5% af heildarstærð) jafndreifð skrá búin til með því að nota dd.

Prófunarferlið er frekar einfalt:

$ 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/

Eða skjáskot fyrir aðdáendur

Sparaðu pláss á harða disknum með því að nota steganography

Eins og þú sérð, frá upprunalegu 633 + 36 == 669 megabæti af gögnum á harða disknum, enduðum við með flottari 563, sem gefur okkur þjöppunarhlutfall upp á ~1,188. Þessi róttæki munur skýrist af afar litlu tapi, svipað því sem fæst þegar fínstillt er JPEG skrár með klassískum aðferðum (eins og tinyjpg). Auðvitað, þegar stiganógrafísk þjöppun er notuð, eru upplýsingar ekki einfaldlega „týndar“ heldur eru þær notaðar til að umrita önnur gögn. Þar að auki er fjöldi „bjartsýni“ stuðla vegna notkunar F5 mun minni en með hefðbundinni hagræðingu.

Hvaða breytingar sem það eru, eru þær algjörlega ósýnilegar fyrir augað. Undir spoilernum hér að neðan getur lesandinn metið muninn bæði með augum og með því að draga gildi breytts íhlutans frá frumritinu (því þöggðari sem liturinn er, því minni munurinn):

Tenglar á myndir sem passa ekki á habrastorage

Upprunalega - https://i.ibb.co/wNDLNcZ/1.jpg
Breytt - https://i.ibb.co/qWvpfFM/1.jpg
Mismunur - https://i.ibb.co/2ZzhHfD/diff.jpg

Í stað þess að niðurstöðu

Ég vona að mér hafi tekist að sannfæra lesandann um að slíkar aðferðir séu mögulegar og eigi rétt á lífi. Hins vegar gæti það virst vera miklu einfaldari kostur að kaupa harðan disk eða viðbótarrás (fyrir netsendingar) en að reyna að spara peninga á þennan hátt. Annars vegar er þetta rétt, víðtæk þróun er oft einfaldari og áreiðanlegri. En á hinn bóginn ættum við ekki að gleyma ákafa. Þegar öllu er á botninn hvolft eru engar tryggingar fyrir því að þú getir á morgun komið í búðina og keypt þér á annað þúsund terabæta harðan disk, en þú getur alltaf notað þá sem þú ert nú þegar með liggjandi heima.

-> GitHub

Heimild: www.habr.com

Bæta við athugasemd