Hej Habr.
Mi ŝatus prezenti al vi etan projekton pri
Mi faris projekton pri kaŝa konservado de informoj en la dosiersistemo (pli FS).
Ĉi tio povas esti uzata por ŝteli konfidencajn informojn por edukaj celoj.
Tre malnova Linukso FS estis elektita kiel prototipo
Реализация
Efektivigaj Konsideroj
Se estas bone "malimpliki" la normon ext2, tiam vi povas anstataŭigi tion en la FS estas t.n.
Se vi stokas kaŝitajn informojn sen ĉifrado, tiam, eĉ malgraŭ ĝia malklareco en la FS, ĝi ankoraŭ estos tro evidenta, precipe se la programisto scias kion serĉi. Tial oni decidis ĉifri ĉiujn blokojn de la fontdosiero. Mi elektis blokan ĉifron
Por apartigi la necesajn blokojn de ĉiuj aliaj dum legado, oni decidis aldoni specialan markilon al ĉiu bloko komence de la bloko. Ĉi tiu ĵetono estis ĉifrita depende de la bloknumero en la fontdosiero. Ĉi tiu lertaĵo tuj ebligis ne nur trovi la necesajn blokojn, sed ankaŭ rekoni ilian ĝustan ordon.
Ĝenerala funkcia principo de la sistemo.
Algoritmo de registrado
La punktoj:
- Unue skribu iujn informojn al la fontdosiersistemo;
- Forigu ĉi tiun informon (ne nepre ĉiujn);
- La kaŝenda dosiero estas dividita en blokojn de egala longo, aldonante markilon;
- Ĉifri ĉi tiujn blokojn;
- Metu ĉifritajn blokojn en malplenajn FS-blokojn.
Por amantoj de blokdiagramoj
Malsupre estas blokdiagramo de la registra algoritmo. La algoritmo ricevas kvar dosierojn kiel enigo:
-Bildo de modifebla dosiersistemo;
-Dosiero subjekto al steganografio;
-Dosiero kun ĉifra ŝlosilo por AES;
-Dosiero kun markilo.
Indas tuj rimarki, ke ĉi tiu algoritmo havas unu malavantaĝon: post skribado de la dosiero al la FS, ne povas skribu ion novan en la FS, ĉar ajna nova informo povas finiĝi en la blokoj, kiujn ni asignis al nia zipita dosiero, kvankam ĉi tio ankaŭ malfermas la eblecon "rapide kovri niajn spurojn".
Sed estas sufiĉe evidente kiel tio povas esti riparita: necesas reverki la algoritmon por skribi blokojn en la FS. Ĉi tio estas komprenebla, sed nekredeble tempopostula tasko.
Por Proof Of Consept mi ne efektivigis ĉi tion.
Kiel rezulto, la sekvaj ŝanĝoj estos faritaj al la FS; jen kiel la FS aspektas antaŭ steganografio (sondosiero antaŭe estis registrita).
Kaj jen kiel aspektas la FS kun la informoj jam zipitaj.
Algoritmo de legado
La punktoj:
- Kun kono de la ŝlosilo kaj la metodo de konstruado de markiloj, verku la unuajn N-signojn, kun la garantio, ke N multiplikita per la longo de la dosiersistembloko estas pli granda ol la longo de la steganografigita dosiero;
- Serĉu blokojn en la FS komencante per markiloj;
- Deĉifri la ricevitajn blokojn kaj apartigu la markilojn;
- Kolektu la rezultajn blokojn en la ĝusta ordo kaj ricevu la fontdosieron.
Por amantoj de blokdiagramoj
Malsupre estas blokdiagramo de la registra algoritmo. La algoritmo ricevas tri dosierojn kiel enigo:
- Dosiera sistemo bildo;
-Dosiero kun ĉifra ŝlosilo por AES;
-Dosiero kun markilo.
Post kiam la programo funkcias, aperas la Legita dosiero, kiu estos la dosiero ĉerpita el la steganografigita dosiersistemo; se la ŝlosilo aŭ markilo estis specifita malĝuste, tiam la Legita dosiero estos malplena.
(por amantoj de beleco, vi povas enmeti ne nur la dosieron, sed "kapon" enhavantan metainformojn: dosiernomo, rajtoj, lasta modifita tempo, ktp.)
Ekaŭtomatigo
Por oportuno, bash-skriptoj estis skribitaj por aŭtomatigi la lanĉon en Linukso (provita sur Ubuntu 16.04.3 LTS).
Ni rigardu la lanĉon paŝon post paŝo.
Rekordo:
- sudo Copy_Flash.sh "DEVICE" - akiri la FS-bildon de DEVICE (flash);
- ./Write.sh “FILE” “KEY” “MARKER” – kreu virtualan medion, elŝutu la necesajn bibliotekojn kaj rulu la skriban skripton;
- sudo ./Write_Flash.sh "DEVICE" - skribu la ŝanĝitan FS denove al DEVICE.
Legado:
- sudo Copy_Flash.sh "DEVICE" - akiri la FS-bildon de DEVICE (flash);
- ./Read.sh “KEY” 'MARKER” - kreu virtualan medion, elŝutu la necesajn bibliotekojn kaj rulu la skipton por legado;
- En la nuna dosierujo, malfermu la Read-dosieron - ĉi tio estas la zipitaj informoj.
konkludo
Ĉi tiu steganografia metodo verŝajne bezonas plibonigon, plian testadon kaj plilongigon al pli popularaj dosiersistemoj, kiel ekzemple
Sed la celo de ĉi tiu laboro estis montri la principon per kiu eblas efektivigi kaŝitan konservadon de informoj en la dosiersistemo.
Helpe de tiaj algoritmoj, vi povas sentime stoki informojn, kaj se, se vi konas la ŝlosilon, eblas haki tian sistemon ne per kruda forto (sed per tre longa algoritmo), tiam sen koni la ŝlosilon, ĉi tiu sistemo ŝajnas al mi absolute stabila, tamen tio povas servi kiel kialo por aparta artikolo.
Ĉiu kodo estas efektivigita en Python-versio 3.5.2.
(Jes, jes, mi scias, ke por la produkta versio oni devas skribi en io "rapida", ekzemple C 😉)
En ĉi tiu efektivigo, la grandeco de la eniga dosiero por steganografio ne devus superi 1000 kB.
Mi volas esprimi mian dankemon al la uzanto
fonto: www.habr.com