Kasutame kÔvakettaruumi kokkuhoidu steganograafia abil

Kui me rÀÀgime steganograafiast, siis inimesed nĂ€evad silme ees terroriste, pedofiile, spioone ja parimal juhul krĂŒptoanarkiste ning muid teadlasi. Ja tĂ”epoolest, kellele muule vĂ”iks olla vaja vaikimisi midagi vĂ€listest pilkudest? Milline vĂ”iks sellest olla kasu tavalisele inimesele?

Selgub, et mingi kasu on. Just seetĂ”ttu hakkame tĂ€na andmeid tihendama steganograafia meetodite abil. Ja lĂ”puks saab lugeja isegi kasutada oma vÀÀrtuslikke JPEG-fotokollektsioone, et suurendada vabade gigabaitide arvu failisĂŒsteemis.

Kasutame kÔvakettaruumi kokkuhoidu steganograafia abil

Mis?

Kui lugeja mĂ€letab, siis steganograafia on sellised kummalised algoritmid, mis vĂ”imaldavad peita ĂŒhe teabe olemasolu teise sisse. Veel lihtsamalt öeldes: pilt + fail == umbes sama pilt, aga mitte pĂ€ris (koos piltidega vĂ”ib olla midagi, aga tavaliselt on see nende peal selgem). Samuti ei tohiks olla lihtsat viisi kindlaks tegemiseks, kas sees on midagi vĂ”i mitte.

Kuid kui ĂŒhte teisest eristada ei saa, siis kas mingi vahe on? Tarbija ja kasutaja seisukohalt ei huvita matemaatiline tĂ€psus (mida peegeldab konkreetne bitide kogum), vaid vaid see, kuidas ta seda tajub.

NĂ€iteks vaatame kolme armsa koera pilti:

Olge ettevaatlikud, JPEG!

Kasutame kÔvakettaruumi kokkuhoidu steganograafia abil Kasutame kÔvakettaruumi kokkuhoidu steganograafia abil Kasutame kÔvakettaruumi kokkuhoidu steganograafia abil

Vaatamata tohutule suuruse erinevusele, valib vĂ€hesed kolmanda variandi. Teisest kĂŒljest ei ole esimeste kahe foto vahel vahe nii mĂ€rgatav ja teabe hulk neis (minu arvates) on ligikaudu vĂ”rdne.

See pĂ”himĂ”te iseenesest on juba vana ning on aastaid aktiivselt kasutatud kaotusega andmete tihendamise meetodites. Kuid purustada – ei tĂ€henda ehitada, meid huvitab kĂŒsimuse arenenum kĂŒlg. Kas on vĂ”imalik sisestada tĂ€iendavat teavet suuruses N faili nii, et selle suurus suureneks M < N, ja muudatused ei oleks kasutajale nĂ€htavad?

Muidugi on see vÔimalik. Kuid tuleb kohe teha paar mÀrkust:

  • Esiteks peab meetod olema universaalne ja andma positiivse tulemuse enamiku sisendandmete puhul. See tĂ€hendab, et keskmiselt, juhusliku sisendi puhul, peaks toimuma tegelik salvestatava teabe hulga vĂ€henemine. "Keskmiselt" tĂ€hendab, et vastupidised juhused vĂ”ivad esineda, kuid ei tohi domineerida.
  • Teiseks, enne teabe sisestamist peab kokkusurutud konteineri suurus olema suurem kui selle kokkusurutud sarnane modifikatsioon. BMP-pilte LSB meetodil bittide kuhjamisega ei saa pidada steganograafiliseks kokkusurutiseks, kuna pĂ€rast DEFLATE'i kasutamist on originaalpilt tĂ”enĂ€oliselt oluliselt vĂ€iksem.
  • Kolmandaks, tulemusi tuleb vĂ”rrelda klassikaliste meetoditega juba kokku surutud andmete suhtes. See aitab kĂ”rvaldada tĂ”enĂ€osusliku eriĂŒlesande mĂ”ju ja tagab tĂ”husama kokkusurumise ĂŒldiselt.

Kus?

Steganograafia kasutamine eeldab, et lisaks kokkusurutavale teabele on meil vaja ka konteinereid, kuhu see sisse kirjutatakse. Maksimaalne sisestatav teabe hulk sÔltub paljuski eraldiseisvatest omadustest, kuid see skaleerub nende arvu tÔttu palju lihtsamalt. SeetÔttu peaks konteinerite formaat olema levinud, et kasutajal oleks piisavalt neist valikuid, et saavutada mingit kasu kokkusurumise protsessist.

Sellises kontekstis on head kandidaadid graafika-, audio- ja videofailid. Kuid erinevate formaatide, koodekite jm mitmekesisuse tÔttu on valik tegelikult mitte nii suur.

Arvestades kÔike seda, langetasin oma valiku JPEG'i kasuks. See on peaaegu kÔigil olemas, seda kasutatakse laialdaselt nii isiklikel kui ka Àriotstarbel, olles peaaegu de facto formaat enamikule piltidele.

Kasutame kÔvakettaruumi kokkuhoidu steganograafia abil

Kuidas?

Edasi tulevad umbes tehnilised skeemid ja kirjeldused ilma erilise selgituseta, nii et soovijad vÔivad need vahele jÀtta ja liikuda jaotisse 'Tipptehnoloogia'.

Üldised jooned

Andmete sisestamiseks tuleb esmalt kindlaks teha, kuhu. FailisĂŒsteemis vĂ”ib olla mitmeid erinevaid fotosid, millest kasutaja soovib kasutada vaid mĂ”nda. Seda soovitud konteinerite kogumit nimetame raamatukoguks.

See tekib kahes olukorras: enne kokkusurumist ja enne lahtipakkimist. Esimesel juhul saab lihtsalt kasutada failide nimede komplekti (ja veelgi parem, regulaaravaldust nende jaoks), kuid teisel juhul on vajalik midagi usaldusvÀÀrsemat: kasutaja vĂ”ib neid kopeerida ja liikuda failisĂŒsteemi piiresse, mistĂ”ttu on keeruline neid Ă”igesti tuvastada. SeetĂ”ttu on vajalik nende hashide (md5 piisab) salvestamine pĂ€rast kĂ”iki modifikatsioone.

Algne otsing regulaaravaldusega ei oma mĂ”tet lĂ€bi kogu failisĂŒsteemi teostada, piisab, kui nĂ€idata mĂ”nda juurdirectory. Sellesse salvestatakse spetsiaalne arhiivifail, milles asuvad need hashid koos muu meta-informatsiooniga, mis on vajalik edasise tihendamise teabe taastamiseks.

KÔik see kehtib vÔrdselt iga steganograafilise andmekokkusurumise algoritmi rakenduste kohta. Andmete kokkusurumise ja taastamise protsesse vÔib nimetada pakkimiseks ja lahtipakkimiseks.

F5

NĂŒĂŒd, kui on selge, mida ja miks teeme, on jÀÀnud kirjeldada eesmĂ€rgi saavutamise algoritmi. Tuletame meelde JPEG-faili kodeerimise protsessi (tĂ€nu Bauman National Library wiki-le):

Kasutame kÔvakettaruumi kokkuhoidu steganograafia abil

Seda vaadates on parem kohe teha mÔned mÀrkused:

  • JPEG faili suurust vĂ”ib pidada optimaalseks, isegi mitte proovimata seda nĂ€iteks WinRARiga tihendada;
  • Muudatada tohib ainult salvestatud teavet (seda, mis on diskreetse kosinusse muundamise, DCT, vĂ€ljundis), et tagada vĂ€hemalt mingisugune vastuvĂ”etav jĂ”udlus.
  • Et mitte kaotada andmeid kasutaja jaoks mĂ€rgatavas tööstuslikus skaalas, tuleb iga ĂŒksiku pildi puhul teha minimaalne muudatus;

Sellistele tingimustele sobib terve algoritmide perekond, millega saab tutvuda. selles heas esituses. KĂ”ige arenenum neist on algoritm F5 autoriĂ”igusega Andreas Westfeld, kes töötab DCT heleduskomplekti koefitsientidega (inimese silm on nende muutumise suhtes kĂ”ige vĂ€hem tundlik). Tema töö ĂŒldine skeem olemasoleva JPEG-failiga töötamisel on jĂ€rgmine skeem:

Kasutame kÔvakettaruumi kokkuhoidu steganograafia abil

F5 plokk kasutab edasijĂ”udnud sisestusmeetodit, mis pĂ”hineb maatrixkoodil. Lisainfot selle ja algoritmi kohta saab lugeda ĂŒlaltoodud lingilt, kuid meid huvitab eelkĂ”ige see, et selle abil saab teha seda vĂ€hem muudatusi, kui sisestatakse sama palju teavet, kui containeri suurus kasvab, ja algoritmi teostamiseks on vajalikud vaid lihtsad (de)koodi operatsioonid, nagu Haffmani ja RLE dekodeerimine.

Muutused ise toimuvad tĂ€isarvuliste koefitsientide ĂŒle ning need vĂ€henevad nende absoluutvÀÀrtuse vĂ”rra ĂŒhe vĂ”rra, mis vĂ”imaldab, et F5-d saab kasutada andmete surumisel. See tuleneb asjaolust, et absoluutvÀÀrtuse poolest vĂ€hendatud koefitsient kasutamise ajal tĂ”enĂ€oliselt vajab Haffmani kodeerimise tĂ”ttu vĂ€hem bitti, arvestades JPEG'i vÀÀrtuste statistilist jaotust.

Kasutame kÔvakettaruumi kokkuhoidu steganograafia abil

Kui tekib null (nn lĂŒhendamine), vĂ€heneb salvestatud teabe maht selle suuruse vĂ”rra, kuna endine iseseisev koefitsient muutub osa kodeeritud RLE nullide jadast:

Kasutame kÔvakettaruumi kokkuhoidu steganograafia abil

Muudatused

Andmete kaitse ja nende kokkusurumine on ortogonaalsed ĂŒlesanded, seetĂ”ttu saab disainida salajase parooli ĂŒmberpaigutamise algorĂŒtmist. Veelgi enam, meil on vaja tĂ€pselt teada, kuidas andmeid taastada, seetĂ”ttu peab kogu vajalik teave (millised konteinerid on kasutatud, millises jĂ€rjekorras jne) olema salvestatud eraldi faili ja olema avatud ilma piiranguteta arhiveerijale.

Algne algoritm on mĂ”eldud salajaste sĂ”numite edastamiseks, seetĂ”ttu töötab see korraga vaid ĂŒhe konteineriga, eeldades, et kasutaja jagab selle vajadusel osadeks, kui see peaks tekkima. Veelgi enam, iseseisva sisestamise korral igasse konteinerisse tuleb eelnevalt teada, kui palju biti andmeid igasse mahutada. SeetĂ”ttu tasub iga elemendi koefitsiendid ĂŒhendada ĂŒheks abstraktseks suureks ja töötada selle pĂ”hjal algse algoritmiga.

Kuna originaalne F5 vĂ”imaldab kasutada kuni 12% konteineri suurusest, suurendab see modifikatsioon ka maksimaalset mahtu: „kuni 12%“ kogu raamatukogu suurusest on suurem vĂ”i vĂ”rdne iga selle elementi „kuni 12%“ summa.

Kodeeritud ĂŒldskeem nĂ€eb vĂ€lja jĂ€rgmine:

Kasutame kÔvakettaruumi kokkuhoidu steganograafia abil

Algoritm ise

NĂŒĂŒd on aeg kirjeldada algoritmi algusest lĂ”puni, et lugejat teadmatuses hoida:

  • Kasutaja mÀÀrab binaarsed tihendatavad andmed M ja raamatukogu L regulaaravalduse ja otsingudirektori abil;
  • FailisĂŒsteemis raamatukogu elemendid moodustavad MC:
    • Failist dekodeeritakse koefitsientide seeria C;
    • MC <- MC | C;
  • MÀÀratakse parameeter k, lĂ€htudes kohutavast ebavĂ”rdsusest: |M| * 8 / (count_full(MC) + count_ones(MC) * k_rate(k)) < k / ((1 << k) - 1);
  • JĂ€rgemööda vĂ”etakse n = (1 << k) - 1 nulliga mittetĂ€ielike elementide madalamad bitid MC-st ja salvestatakse a:
    • Arvutatakse maagiline hash-funktsioon f, mis tĂ”lgendab n-bitist sĂ”na a k-bitiseks s;
    • Kui s == 0, siis ei ole midagi muuta ja algoritm lĂ€heb jĂ€rgmistele koefitsientidele;
    • VĂ€hendada koefitsiendi absoluutset vÀÀrtust, mis vastutab s-ndate bitide eest sĂ”nas a;
    • Kui vĂ€hendamise tulemusena toimus lĂŒhenemine (koefitsient sai 0), siis korrata sammu algusest;
  • KĂ”ik koefitsiendid kodeeritakse RLE ja Huffmani jĂ€rgi, salvestatakse algsetesse failidesse;
  • Arhiivifaili salvestatakse parameeter k;
  • Iga faili L originaalses jĂ€rjekorras arvutatakse MD5-hash ja salvestatakse arhiivifaili.

Tipptehnoloogia

Algoritmi naiivne vorm ja rakendused teistes kĂ”rgematĂ€htsusega (eriti, prĂŒgikoristusega) keeltes annaksid kohutava jĂ”udluse, seega realiseerisin kĂ”ik need keerukused puhtas C-s ja tegin rida optimeerimisi nii tĂ€itmise kiirusel kui ka mĂ€lus (te ei oska ette kujutada, kui palju need pildid kaaluvad ilma tihendamiseta isegi DCT-le). Kuid ka nii, alguses jĂ€ttis tĂ€itmise kiirus pigem soovida, seega ei kavatse ma kogu protsessi ja kasutatud meetodeid kirjeldada.

PlatvormideĂŒlene toimimine on saavutatud libjpeg, pcre ja tinydir raamatukogude kombinatsiooni kasutamise kaudu, mille eest olen neile tĂ€nulik. Vaikimisi kompileeritakse kĂ”ik tavalisest tee, seega tahavad Windowsi kasutajad endale mingi Cygwini installida vĂ”i ise Visual Studio ja raamatukogudega tegeleda.

Rakendamine on saadaval kĂ€surea utiliidi ja teegi vormis. Üksikasjade tutvumiseks viimasest saavad huvilised lugeda rida README failis GitHubis, mille lingi ma postituse lĂ”pus jagan. Siin liigume edasi kirjelduse ja töö demonstreerimise juurde.

Kuidas kasutada?

Olgem ettevaatlikud. Kasutatud pilte vĂ”ib liigutada, ĂŒmber nimetada ja kopeerida, kuid tuleb olla ÀÀrmiselt ettevaatlik ja mitte muuta nende sisu. Ühe bitti muutmine toob kaasa rikka hĂ€ire ja teabe taastamise vĂ”imatuse.

Oletame, et kompileerimise kĂ€igus saime tĂ€itmisfaili f5ar. Saame analĂŒĂŒsida teegi suurust, et arvutada selle kasutamise vĂ”imalusi lipuga -a: .\/f5ar -a [otsingu kaust] [Perl-i ĂŒhilduv regulaaravaldis]. Pakendamine toimub kĂ€suga .\/f5ar -p [otsingu kaust] [Perl-i ĂŒhilduv regulaaravaldis] [pakendatav fail] [arhivi nimi], ja dekompresseerimine toimub kĂ€su abil .\/f5ar -u [arhvi fail] [taas taastatud faili nimi].

Töö demonstreerimine

Kuna meetodi efektiivsust nĂ€idata, laadisin ĂŒles kogu 225 tĂ€iesti tasuta koera fotograafia kogu teenusest. Unsplash. IgaĂŒhel neist on veidi parem kvaliteet kui tavalised kasutaja fotod, kuid siiski. IgaĂŒks neist on kodeeritud libjpeg abil, et vĂ€hendada koodimisraamatukogu eripĂ€rade mĂ”ju ĂŒldisele suurusele. Halvimate tihendatavate andmete nĂ€itamiseks genereeriti dd abil juhuslik 36-meetrine (natuke ĂŒle 5% kogusuurusest) ĂŒhtlaselt jaotatud fail.

Testimise protsess on ĂŒsna lihtne:

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

VÔi ekraanipildina selle huvitatud jaoks

Kasutame kÔvakettaruumi kokkuhoidu steganograafia abil

Kuidas nÀha, algsetest 633 + 36 == 669 megabaidist andmeid kÔvakettal jÔudsime meeldivamatele 563-le, mis annab meile tihendustegevuse koefitsiendiks umbes 1,188. Selline radikaalne erinevus tuleneb ÀÀrmiselt vÀikestest kaotustest, mis on sarnased klassikaliste meetodite (nt tinyjpg) JPEG-failide optimeerimisega saadud tulemustele. Loomulikult, kasutades steganograafilist tihendamist, ei kaotata teave lihtsalt, vaid seda kasutatakse teiste andmete kodeerimiseks. Veelgi enam, F5 kasutamise tÔttu on

ÜkskĂ”ik millised modifikatsioonid ei ole silmale absoluutselt mĂ€rgatavad. Allpool oleva spoileriga saab lugeja hinnata erinevust nii visuaalselt kui ka muudatuste komponentide vÀÀrtuste originaalist lahutamise teel (mida vĂ€hem kĂŒllastunud on vĂ€rv, seda vĂ€iksem on erinevus):

Pildilinkide kohta, mis ei mahtunud habrastorage'i

Originaal — https://i.ibb.co/wNDLNcZ/1.jpg
Muudetud — https://i.ibb.co/qWvpfFM/1.jpg
Erinevus — https://i.ibb.co/2ZzhHfD/diff.jpg

LÔpetuseks

Loodan, et suutsin veenda lugejat, et sellised meetodid on vĂ”imalikud ja vÀÀrivad ellujÀÀmist. Samas vĂ”ib olla palju lihtsam osta kĂ”vaketas vĂ”i tĂ€iendav kanal (vĂ”rgus edastamiseks), kui proovida sel viisil kokku hoida. Ühelt poolt on see tĂ”si, ekstensiivne areng on sageli lihtsam ja usaldusvÀÀrsem. Kuid teisest kĂŒljest ei tohiks unustada ka intensiivset lĂ€henemist. LĂ”ppude lĂ”puks ei ole mingit garantiid, et homme saab poodi minna ja osta endale uus kĂ”vaketas tuhande terabaidi mahuga, aga juba kodus olemasolevaid saab alati kasutada.

-> GitHub

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster