Hej Habr.
Rad bi vam predstavil majhen projekt na
Naredil sem projekt o skritem shranjevanju informacij v datotečnem sistemu (nadalje FS).
To se lahko uporabi za krajo zaupnih informacij v izobraževalne namene.
Za prototip je bil izbran zelo star Linux FS
Реализация
Premisleki glede izvajanja
Če je dobro "razvozlati" standard ext2, potem lahko zamenjate, da je v FS t.i.
Če skrite informacije shranjujete brez šifriranja, bodo kljub zamegljenosti v FS še vedno preveč vpadljive, še posebej, če programer ve, kaj iskati. Zato je bilo odločeno šifrirati vse bloke izvorne datoteke. Izbral sem blokovno šifro
Za ločitev potrebnih blokov od vseh drugih pri branju je bilo odločeno, da se vsakemu bloku na začetku bloka doda poseben marker. Ta žeton je bil šifriran glede na številko bloka v izvorni datoteki. Ta trik je takoj omogočil ne samo iskanje potrebnih blokov, ampak tudi prepoznavanje njihovega pravilnega vrstnega reda.
Splošno načelo delovanja sistema.
Algoritem snemanja
Na točke:
- Najprej zapišite nekaj informacij v izvorni datotečni sistem;
- Izbrišite te podatke (ne nujno vse);
- Datoteka, ki jo želite skriti, je razdeljena na bloke enake dolžine in dodana oznaka;
- Šifrirajte te bloke;
- Šifrirane bloke postavite v prazne bloke FS.
Za ljubitelje blok diagramov
Spodaj je blokovni diagram snemalnega algoritma. Algoritem kot vhod prejme štiri datoteke:
- Slika spremenljivega datotečnega sistema;
- Datoteka, predmet steganografije;
-Datoteka s šifrirnim ključem za AES;
-Datoteka z markerjem.
Takoj je treba omeniti, da ima ta algoritem eno pomanjkljivost: po pisanju datoteke v FS, ne morem v FS vpišite karkoli novega, saj lahko vsaka nova informacija konča v blokih, ki smo jih dodelili naši stisnjeni datoteki, čeprav to odpira tudi možnost, da »hitro zabrišemo sledi«.
Toda povsem očitno je, kako je to mogoče popraviti: treba je prepisati algoritem za pisanje blokov v FS. To je razumljivo, a neverjetno dolgotrajno opravilo.
Za dokaz koncepta tega nisem implementiral.
Posledično bodo v FS narejene naslednje spremembe; tako izgleda FS pred steganografijo (zvočna datoteka je bila predhodno posneta).
In tako izgleda FS z že stisnjenimi informacijami.
Algoritem branja
Na točke:
- S poznavanjem ključa in načina konstruiranja markerjev sestavite prvih N markerjev, pri čemer zagotovite, da je N pomnoženo z dolžino bloka datotečnega sistema večje od dolžine stisnjene datoteke;
- Iskanje blokov v FS, ki se začnejo z oznakami;
- Dešifrirajte prejete bloke in ločite oznake;
- Zberite nastale bloke v pravilnem vrstnem redu in pridobite izvorno datoteko.
Za ljubitelje blok diagramov
Spodaj je blokovni diagram snemalnega algoritma. Algoritem kot vhod prejme tri datoteke:
- Slika datotečnega sistema;
-Datoteka s šifrirnim ključem za AES;
-Datoteka z markerjem.
Ko se program zažene, se prikaže datoteka za branje, ki bo datoteka, ekstrahirana iz steganografiranega datotečnega sistema; če je bil ključ ali oznaka naveden napačno, bo datoteka za branje prazna.
(za ljubitelje lepote lahko dodate ne samo datoteko, ampak tudi "glavo", ki vsebuje metainformacije: ime datoteke, pravice, čas zadnje spremembe itd.)
Avtomatizacija zagona
Za udobje so bili skripti bash napisani za avtomatizacijo zagona v sistemu Linux (preizkušeno na Ubuntu 16.04.3 LTS).
Oglejmo si zagon korak za korakom.
Posnetek:
- sudo Copy_Flash.sh “DEVICE” - pridobi sliko FS iz DEVICE (flash);
- ./Write.sh “FILE” “KEY” “MARKER” – ustvarite virtualno okolje, prenesite potrebne knjižnice in zaženite skript za pisanje;
- sudo ./Write_Flash.sh “DEVICE” – spremenjeni FS znova zapišite v DEVICE.
Branje:
- sudo Copy_Flash.sh “DEVICE” - pridobi sliko FS iz DEVICE (flash);
- ./Read.sh “KEY” 'MARKER' - ustvarite virtualno okolje, prenesite potrebne knjižnice in zaženite preskok za branje;
- V trenutnem imeniku odprite datoteko Read - to so stisnjene informacije.
Zaključek
Ta metoda steganografije verjetno potrebuje izboljšavo, dodatno testiranje in razširitev na bolj priljubljene datotečne sisteme, kot je npr
Toda namen tega dela je bil prikazati princip, po katerem je mogoče izvajati skrito shranjevanje informacij v datotečnem sistemu.
S pomočjo takšnih algoritmov lahko neustrašno shranjujete informacije in če, če poznate ključ, je mogoče tak sistem vdreti ne s surovo silo (ampak z zelo dolgim algoritmom), potem brez poznavanja ključa to sistem se mi zdi popolnoma stabilen, vendar je to lahko razlog za ločen članek.
Vsa koda je implementirana v Python različici 3.5.2.
(Ja, ja, vem, da moraš za produkcijsko verzijo pisati nekaj “hitrega”, na primer C 😉)
Pri tej izvedbi velikost vhodne datoteke za steganografijo ne sme presegati 1000 kB.
Želim izraziti svojo hvaležnost uporabniku
Vir: www.habr.com