Kursime hapësirë në hard disk me anë të steganografisë

Kur flasim pĂ«r steganografinĂ«, njerĂ«zit paraqesin terroristĂ«, pedofilĂ«, spiunĂ«, dhe nĂ« rastin mĂ« tĂ« mirĂ« kriptoanarkistĂ« e shkencĂ«tarĂ« tĂ« ndryshĂ«m. Dhe nĂ« tĂ« vĂ«rtetĂ«, kujt tjetĂ«r mund t'i nevojitet? fshehur diçka nga vĂ«shtrimi i jashtĂ«m? ÇfarĂ« dobie mund tĂ« ketĂ« kjo pĂ«r njĂ« person tĂ« zakonshĂ«m?

Duket që ka ndonjë dobi. Pikërisht për këtë arsye sot do të kompresojmë të dhënat me metoda steganografie. Dhe në fund, lexuesi madje do të jetë në gjendje të përdorë arkivat e tij të çmuara të fotografive në JPEG për të rritur sasinë e gigabajtëve të lirë në sistemin e skedarëve.

Kursime hapësirë në hard disk me anë të steganografisë

ÇfarĂ«?

Nëse lexuesi kujton, steganografia është këto algoritme të çuditshme që lejojnë fshehjen e pranisë së një informacioni brenda një tjetri. Ndryshe thënë, imazh + skedar == përafërsisht e njëjta imazh, por jo krejt. (Në vend të imazheve mund të jetë gjithçka, por zakonisht është më e qartë mbi to). Në të njëjtën kohë, nuk duhet të ketë një mënyrë të thjeshtë për të përcaktuar nëse ka diçka brenda apo jo.

Porosinë, nëse nuk mund të dallosh njëra nga tjetra, a ka ndonjë ndryshim? Nga këndvështrimi i konsumatorit, përdoruesi nuk e shqetëson saktësia matematikore (e reflektuar nga një grup specifik bitësh), por vetëm ajo që ai percepton.

Për shembull, le t'i shikojmë tre imazhe të një qeni të bukur:

Kujdes, JPEG!

Kursime hapësirë në hard disk me anë të steganografisë Kursime hapësirë në hard disk me anë të steganografisë Kursime hapësirë në hard disk me anë të steganografisë

Pavarësisht diferencës kolosale në madhësi, pak kush do të zgjedhte versionin e tretë. Nga ana tjetër, ndryshimi midis dy fotografive të para nuk është aq i dukshëm, dhe sasia e informacionit në to (sipas mendimit tim) mund të barazohet.

Ky princip vetë është i vjetër dhe prej shumë vitesh përdoret aktivisht nga metodat e kompresimit të informacionit me humbje. Por të prishësh është ndryshe nga të ndërtosh, ne na intereson një anë më e avancuar e çështjes. A mund të integrohet informacion shtesë në një skedar në mënyrë që madhësia e tij të rritet me N në mënyrë që M < N, dhe ndryshimet të mos jenë të dukshme për përdoruesin?

Sigurisht, mundet. Por është mirë të bëhen disa sqarime menjëherë:

  • SĂ« pari, metoda duhet tĂ« jetĂ« universale dhe tĂ« japĂ« njĂ« rezultat pozitiv nĂ« shumicĂ«n e tĂ« dhĂ«nave tĂ« hyrjes. Kjo do tĂ« thotĂ«, nĂ« mesatare, pĂ«r njĂ« hyrje tĂ« rastĂ«sishme, duhet tĂ« ketĂ« njĂ« ulje tĂ« saktĂ« tĂ« sasisĂ« sĂ« informacionit tĂ« ruajtur. «NĂ« mesatare» do tĂ« thotĂ« se rastet e kundĂ«rta mund tĂ« ndodhin, por nuk duhet tĂ« mbizotĂ«rojnĂ«.
  • NĂ« tĂ« dytĂ«n, madhĂ«sia e enĂ«s sĂ« kompresuar para integrimit tĂ« informacionit duhet tĂ« jetĂ« mĂ« e madhe se e modifikuara nĂ« mĂ«nyrĂ« tĂ« ngjashme. Thjesht tĂ« integrosh njĂ« sasi bitĂ«sh nĂ« njĂ« imazh BMP me metodĂ«n LSB nuk Ă«shtĂ« kompresim steganografik, sepse, pas kalimit pĂ«rmes ndonjĂ« DEFLATE, imazhi origjinal, me siguri, do tĂ« jetĂ« dukshĂ«m mĂ« i vogĂ«l.
  • NĂ« tĂ« tretĂ«n, Ă«shtĂ« e nevojshme tĂ« realizosh dhe tĂ« krahasosh rezultatin nĂ« lidhje me tĂ« dhĂ«nat e kompresuara me metoda klasike. Kjo do tĂ« lejojĂ« heqjen e efektit probabilistik tĂ« ndryshimit tĂ« tepĂ«rĂ«sisĂ« sĂ« tyre dhe tĂ« realizosh njĂ« kompresim mĂ« efektiv nĂ« rastin e pĂ«rgjithshĂ«m.

Ku?

Përdorimi i steganografisë nënkupton se, përveç informacionit të comprimit, do të na nevojiten kontejnerë në të cilët do të ndërtohet. Sasia maksimale e informacionit të integruar varet shumë nga veçoritë e caktuara, por është shumë më e lehtë të shkallëzohet me numrin e tyre. Prandaj, formati i kontejnerëve duhet të jetë i përhapur, që përdoruesi të ketë mjaftueshëm për të marrë ndonjë përfitim nga procesi i "comprimit".

Në këtë kontekst, kandidatët e mirë bëhen skedarët grafikë, audio dhe video. Por, për shkak të larmisë së formateve të ndryshme, kodeve dhe të tjera, në praktikë na mbetet të zgjedhim nga një numër shqetësues të kufizuar opsionesh.

Duke marrë parasysh të gjitha këto, zgjedhja ime ra mbi JPEG. Ai është pothuajse tek të gjithë, përdoret gjerësisht si në qëllime personale ashtu edhe në ato biznesi, duke u bërë formati praktikisht de-facto për shumicën e imazheve.

Kursime hapësirë në hard disk me anë të steganografisë

Si?

Më pas vijnë skemat dhe përshkrimet teknike pa shumë shpjegime, prandaj ata që dëshirojnë mund t'i anashkalojnë ato, duke e kaluar në seksionin "Teknologji e Lartë".

Karakteristika të Përgjithshme

Për të integruar të dhëna diku, së pari duhet të përcaktohet ku. Në sistemin e skedarëve mund të ketë sa më shumë fotografi të ndryshme, ndërsa përdoruesi mund të dëshirojë të përdorë vetëm disa prej tyre. Ky grup dëshiruar i konteinerëve do të quhet biblioteka.

Ajo formohet në dy raste: para kompresimit dhe para shpërbërjes. Në rastin e parë, mund të përdorni thjesht një grup emrash (më mirë, një shprehje të rregullt për ta) skedarëve, por në rastin e dytë kërkohet diçka më të besueshme: përdoruesi mund t'i kopjojnë dhe zhvendosin ato brenda sistemit të skedarëve, duke mos i lejuar t'i përcaktojmë saktë. Prandaj, është e nevojshme të ruajmë hashes e tyre (md5 është e mjaftueshme) pas realizimit të të gjitha modifikimeve.

Kërkimi fillestar me shprehje të rregullt nuk ka kuptim të bëhet në të gjithë FS, mjafton të përcaktohet një direktor i caktuar rrënjë. Në të do të ruhet një skedë arkivi speciale, ku do të mbahen ato hashes, përveç informacionit tjetër meta, të nevojshëm për rikuperimin e mëvonshëm të informacionit të kompresuar.

Të gjitha këto janë të aplikueshme në të njëjtën mënyrë për çdo implementim të çdo algoritmi të kompresimit të dhënave steganografike. Proceset e kompresimit dhe rikuperimit të të dhënave mund të quhen paketim dhe shkarkim.

F5

Tani që është bërë e qartë se çfarë bëjmë dhe përse, mbetet të përshkruajmë vetë algoritmin e arritjes së qëllimit. Le të rikujtojmë procesin e kodimit të skedarit JPEG (falë Wikipedias së bibliotekës kombëtare Bauman):

Kursime hapësirë në hard disk me anë të steganografisë

Duke e parë atë, është më mirë të bëjmë disa vërejtje menjëherë:

  • MadhĂ«sia e skedarit JPEG mund tĂ« konsiderohet optimale, madje pa e provuar ta kompresosh me ndonjĂ« WinRAR;
  • Mund tĂ« modifikosh vetĂ«m informacionin e ruajtur (atĂ« qĂ« Ă«shtĂ« nĂ« daljen e transformimit diskret tĂ« kosinusit, DCT), pĂ«r tĂ« siguruar njĂ« performancĂ« tĂ« pranueshme.
  • PĂ«r tĂ« mos humbur tĂ« dhĂ«na nĂ« shkallĂ« industriale qĂ« janĂ« tĂ« dukshme pĂ«r pĂ«rdoruesin, kĂ«rkohet tĂ« bĂ«hen minimum modifikimesh nĂ« çdo imazh tĂ« veçantĂ«;

Nën këto kushte, një familje e tërë algoritmesh i përshtatet, me të cilët mund të njiheni në këtë prezantim të mirë. Algoritmi më i avancuar prej tyre është algoritmi F5 në autorësi të Andreas Westfeld, që punon me koeficientët DCT të komponentës së ndriçimit (sytë e njeriut janë më pak të ndjeshëm ndaj ndryshimeve të saj). Schemi i tij i përgjithshëm në punën me një skedar JPEG ekzistues paraqitet me diagramin e mëposhtëm:

Kursime hapësirë në hard disk me anë të steganografisë

Block F5 përdor një metodë të avancuar për inkorporimin, të bazuar në kodimin e matricave. Lexuesi mund të njohë më shumë rreth saj dhe algoritmit të vet në linkun e mësipërm, por ajo që na intereson në radhë të parë është fakti se me këtë metodë mund të bëhen më pak ndryshime në inkorporimin e të njëjtit sasi informacioni, sa më i madh të jetë madhësia e kontenierit të përdorur, dhe për të kryer algoritmin vetë kërkohen vetëm operacione të thjeshta (de)kodimi të Huffman-it dhe RLE.

Modifikimet bëhen mbi koeficientët e plotë dhe përfundojnë në reduktimin e vlerës absolute të tyre me njësi, e cila lejon përdorimin e F5 për kompresimin e të dhënave. Arsyeja për këtë është se koeficienti i reduktuar në vlerë absolute, me shumë mundësi, do të zërë një numër më të vogël bitësh pas kodimit Huffman për shkak të shpërndarjes statistikore të vlerave në JPEG.

Kursime hapësirë në hard disk me anë të steganografisë

Në rastin e formimit të zeros (të ashtuquajturat shkurtime), numri i informacionit të ruajtur do të zvogëlohet sipas madhësisë së saj, pasi koeficienti më parë i pavarur do të bëhet pjesë e sekuencës RLE të koduar të zeros:

Kursime hapësirë në hard disk me anë të steganografisë

Modifikimet

Mbrojtja e të dhënave dhe kompresimi i tyre janë detyra ortogonale, prandaj mund të injorohet permutimi i fjalëkalimit sekret nga algoritmi origjinal. Më shumë, ne kemi nevojë të dimë saktësisht se si të nxjerrim të dhënat, kështu që e gjithë informata e nevojshme për këtë (cilat kontejnerë janë përdorur, në çfarë rendi, etj.) duhet të regjistrohet në një skedar të veçantë dhe të jetë e hapur për lexim të lirë nga arkivuesi.

Algoritmi origjinal është i dizenjuar për transmetimin e mesazheve sekrete, prandaj punon me një kontejner në një kohë, duke supozuar se përdoruesi do ta ndajë atë në pjesë kur të nevojitet, nëse do të lindë ndonjëherë. Më shumë se kaq, kur integrohet në çdo kontejner, është e nevojshme që më parë të dihet se sa bit të dhënash do të vendosen në secilin. Prandaj, coeficientët e çdo elementi të bibliotekës duhet të bashkohen në një të madh abstrakt dhe të punohet me të në përputhje me algoritmin fillestar.

Duke qenë se F5 origjinal lejon përdorimin e deri në 12% të madhësisë së kontejnerit, një modifikim i tillë gjithashtu do të rrisë kapacitetin maksimal: "deri në 12%" të madhësisë së gjithë bibliotekës është më e madhe ose e barabartë me shumën e "deri në 12%" të secilit nga elementet e saj.

Schemat e kodifikuara të përgjithshme e kanë këtë pamje si më poshtë:

Kursime hapësirë në hard disk me anë të steganografisë

Algoritmi vetë

Tani është koha për të përshkruar algoritmin nga fillimi në fund, për të mos mbajtur lexuesin në injorancë:

  • PĂ«rdoruesi pĂ«rcakton tĂ« dhĂ«nat binarĂ« tĂ« shkrira M dhe bibliotekĂ«n L me anĂ« tĂ« shprehjeve tĂ« rregullta dhe direktorisĂ« rrĂ«njore tĂ« kĂ«rkimit;
  • NĂ« radhĂ«, nĂ« sistemin e skedarĂ«ve, elementĂ«t e bibliotekĂ«s formojnĂ« MC:
    • Nga tĂ« dhĂ«nat e skedarit dekodohet njĂ« seri koeficientĂ«sh C;
    • MC <- MC | C;
  • Koeficienti k pĂ«rcaktohet duke u mbĂ«shtetur nĂ« pabarazinĂ« e frikshme: |M| * 8 / (count_full(MC) + count_ones(MC) * k_rate(k)) < k / ((1 << k) - 1);
  • Merrni nĂ« radhĂ« n = (1 << k) - 1 bitĂ«t mĂ« tĂ« rinj tĂ« elementeve jo-zero nga MC dhe regjistrohen nĂ« a:
    • Kalkulohet funksioni magjik i hash-it f, qĂ« tregon fjalinĂ« n-bit a nĂ« k-bit s;
    • NĂ«se s == 0, atĂ«herĂ« nuk ka nevojĂ« tĂ« ndryshoni dhe algoritmi kalon te koeficientĂ«t e ardhshĂ«m;
    • PĂ«r tĂ« reduktuar vlerĂ«n absolute tĂ« koeficientit qĂ« pĂ«rgjigjet pĂ«r s-bitin e -Ă« nĂ« fjalĂ« a;
    • NĂ«se si rezultat i reduktimit ndodhi njĂ« shkurtim (koeficienti u bĂ« 0), atĂ«herĂ« pĂ«rsĂ«ritni hapat nga fillimi;
  • TĂ« gjithĂ« koeficientĂ«t kodifikohen me RLE dhe Huffman, regjistrohen nĂ« skedarĂ«t origjinalĂ«;
  • PĂ«r parametrin k shkruhet nĂ« skedarin e arkivit;
  • Nga çdo skedar L nĂ« rendin e gjetjes sĂ« tyre origjinale llogaritet hash-i MD5 dhe regjistrohet nĂ« skedarin e arkivit.

Teknologji të larta

Forma naive e algoritmave dhe implementimi në gjuhë të tjera të nivelit të lartë (është veçanërisht i vërtetë për ato me mbledhje plehrash) do të japin një performancë të tmerrshme, ndaj gjitha këto kompliksitete i kam realizuar në C të pastër dhe kam bërë një sërë optimizimesh si për shpejtësinë e ekzekutimit ashtu edhe për memorinë (nuk mund ta besoni sa peshë kanë këto imazhe pa kompresim, madje edhe deri në DCT). Madje, në fillim, shpejtësia e ekzekutimit linte shumë për të dëshiruar, ndaj nuk do të përshkruaj tërë procesin dhe metodat e përdorura.

Kros-platformësia është arritur duke përdorur një kombinim bibliotekash libjpeg, pcre dhe tinydir, për të cilat u jam mirënjohës. Në parazgjedhje, gjithçka kompilohet përmes zakonisht make, ndaj përdoruesit e Windows duan të instalojnë ndonjë Cygwin, ose të merren me Visual Studio dhe bibliotekat vetë.

Implementimi është në formën e një utiliteti konsolë dhe bibliotekë. Më shumë për përdorimin e kësaj të fundit, interesuarit mund të informohen në ridhmi në depo në GitHub, lidhjen e të cilit do ta vendos në fund të postimit. Tani kalojmë në përshkrimin dhe demonstrimin e funksionimit.

Si ta përdor?

Me kujdes. Imazhet e përdorura mund të lëvizin, riemërohen dhe kopjohen sipas dëshirës. Megjithatë, është e nevojshme të jeni jashtëzakonisht të kujdesshëm dhe të mos ndryshoni përmbajtjen e tyre. Ndryshimi i një biti do të çonte në shkelje të hashes dhe pamundësi për të rikuperuar informacionin.

Pas kompaktimit, ne morëm skedarin ekzekutues f5ar. Mund të analizohet madhësia e bibliotekës për të llogaritur mundësitë e saj të përdorimit me flagun -a: ./f5ar -a [folderi i kërkimit] [shprehje e rregullt e përputhshme me Perl]. Kompresimi bëhet me komandën ./f5ar -p [folderi i kërkimit] [shprehje e rregullt e përputhshme me Perl] [file i kompresuar] [emri i arkivës], dhe dekompresimi me ./f5ar -u [file arkive] [emri i file-it të rikuperuar].

Demonstrimi i funksionimit

PĂ«r tĂ« treguar efektivitetin e metodĂ«s, kam ngarkuar njĂ« koleksion prej 225 fotografish tĂ« lira pĂ«r qentĂ« nga shĂ«rbimi Unsplash. Çdo njĂ« prej tyre ka cilĂ«si pak mĂ« tĂ« lartĂ« se fotografitĂ« normale tĂ« pĂ«rdoruesve, por megjithatĂ«. Çdo njĂ« prej tyre Ă«shtĂ« koduar duke pĂ«rdorur libjpeg pĂ«r tĂ« minimizuar ndikimin e veçorive tĂ« kodimit tĂ« bibliotekĂ«s nĂ« pĂ«rmasĂ«n totale. PĂ«r tĂ« treguar shembullin mĂ« tĂ« keq tĂ« tĂ« dhĂ«nave tĂ« kompresuara, njĂ« skedar rastĂ«sor me gjatĂ«si 36 metra (pak mĂ« shumĂ« se 5% e pĂ«rmasĂ«s totale) u gjenerua me shpĂ«rndarje tĂ« barabartĂ«.

Procesi i testimit është mjaft i thjeshtë:

$ 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
Po lexoj skedarin e kompresimit... ok
Po inicializoj arkivën... ok
Po analizoj kapacitetin e bibliotekës... përfunduar në 16.8s
Kapaciteti disi i garantuar u zbulua si 48439359 byte
Kapaciteti i mundshëm deri në 102618787 byte
Po kompresoj... përfunduar në 32.6s
Po ruaj arkivën... ok

$ ./f5ar -u dogs/dogs.f5ar u paketohet
Po inicializoj arkivën... ok
Po lexoj skedarin e arkivës... ok
Po mbush arkivën me skedarë... përfunduar në 1.2s
Po dekompresoj... përfunduar në 17.5s
Po shkruaj të dhënat e nxjerra... ok

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

Ose me një screenshot për adhuruesit

Kursime hapësirë në hard disk me anë të steganografisë

Siç duket, nga 633 + 36 == 669 megabayt të dhënash në hard disk, arritëm në më të këndshme 563, duke na dhënë një koeficient kompresimi ~1.188. Kjo diferencë radikale shpjegohet nga humbjet shumë të vogla, të ngjashme me ato që arrihen gjatë optimizimit të skedarëve JPEG me metoda tradicionale (si tinyjpg). Natyrisht, duke përdorur kompresimin steganografik, informacioni nuk thjesht "humbet", por përdoret për të koduar të dhëna të tjera. Për më tepër, numri i koeficientëve "të optimizuar" për shkak të përdorimit të F5 është shumë më i vogël se sa me optimizimin tradicional.

Pavarësisht se çfarë modifikimesh janë, ato nuk janë fare të dukshme për syrin. Nën spoilerin më poshtë, lexuesi mund të vlerësojë ndryshimin si me sytë ashtu edhe duke zvogëluar vlerat e komponentës së modifikuar nga origjinali (sa më i zbehtë të jetë ngjyra, aq më e vogël është diferenca):

Lidhjet për imazhet që nuk u vendosën në habrastorage

Origjinali — https://i.ibb.co/wNDLNcZ/1.jpg
E modifikuar — https://i.ibb.co/qWvpfFM/1.jpg
Diferenca — https://i.ibb.co/2ZzhHfD/diff.jpg

Në vend të përfundimit

Shpresoj se kam arritur të bind lexuesin se këto metoda janë të mundshme dhe kanë të drejtë të ekzistojnë. Megjithatë, blerja e një disku të fortë ose një kanali shtesë (për transmetim në rrjet) mund të duket një zgjidhje shumë më e thjeshtë sesa të përpiqesh të kursesh kështu. Njëra anë ka të drejtë, zhvillimi ekstensiv është shpesh më i lehtë dhe i besueshëm. Por, nga ana tjetër, nuk duhet të harrojmë për zhvillimin intensiv. Sepse nuk ka garanci që nesër do të mund të shkosh në dyqan dhe të blesh një tjetër disk të fortë me një mijë terabajt, ndërsa përdorimi i atyre që tashmë i ke në shtëpi është gjithmonë i mundur.

-> GitHub

Burimi: habr.com

Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster