LSB esteganografia

Bazen behin nirea idatzi nuen hub-eko lehen mezua. Eta post hori oso arazo interesgarri bati eskaini zitzaion, hots, esteganografiari. Jakina, gai zahar horretan proposatzen den irtenbideari ezin zaio esteganografia deitu hitzaren benetako zentzuan. Fitxategi formatuak dituen joko bat besterik ez da, baina joko nahiko interesgarria, hala ere.

Gaur pixka bat sakontzen eta LSB algoritmoa aztertzen saiatuko gara. Interesa baduzu, ongi etorria katu azpian. (Ebakiaren azpian trafikoa dago: megabyte inguru).

Lehenik eta behin, sarrera labur bat egin behar da. Denek daki kriptografiaren helburua informazio sekretua irakurtzea ezinezkoa izatea dela. Noski, kriptografiak baditu bere aplikazioak, baina bada datuen babeserako beste ikuspegi bat. Ez dugu informazioa zifratu beharrik, baina ez daukagula itxuratu. Horregatik asmatu zen, hain zuzen, esteganografia. Wikipediak ziurtatzen digunez, “esteganografia (grezieratik στεγανοσ - ezkutua eta grezieraz γραφω - idazten dut, literalki “idazketa sekretua”) informazioa ezkutuko transmisioaren zientzia da, transmisioaren gertaera bera isilpean gordez.

Jakina, inork ez du debekatzen metodo kriptografikoak eta esteganografikoak konbinatzea. Gainera, praktikan hori egiten dute, baina gure zeregina oinarriak ulertzea da. Wikipediako artikulua arreta handiz aztertzen baduzu, esteganografia algoritmoek deitutakoa barne hartzen dutela jakingo duzu. edukiontzia eta mezua. Edukiontzi bat gure mezu sekretua ezkutatzen laguntzen duen edozein informazio da.

Gure kasuan, edukiontzia BMP formatuan dagoen irudi bat izango da. Lehenik eta behin, ikus dezagun fitxategi honen egitura. Fitxategia 4 zatitan bana daiteke: fitxategiaren goiburua, irudiaren goiburua, paleta eta irudia bera. Gure helburuetarako, goiburuan idatzitakoa baino ez dugu jakin behar.

Goiburuko lehen bi byteak BM sinadura dira, gero byteetan fitxategiaren tamaina hitz bikoitz batean idazten da, hurrengo 4 byteak erreserbatuta daude eta zeroak izan behar dituzte, eta azkenik, beste hitz bikoitz batek hasierako desplazamendua dauka. fitxategia irudiaren benetako byteetara. 24 biteko bmp fitxategi batean, pixel bakoitza hiru BGR byterekin kodetzen da.

Orain badakigu nola iritsi irudira, bertan behar dugun informazioa nola idatzi dezakegun ulertzea besterik ez da geratzen. Horretarako LSB metodoa beharko dugu. Metodoaren funtsa honako hau da: koloreen kodeketaz arduratzen diren byteetan esanguratsu gutxien dauden bitak ordezkatzen ditugu. Demagun gure mezu sekretuaren hurrengo byta 11001011 bada, eta irudiko byteak... 11101100 01001110 01111100 0101100111..., orduan kodeketak honela izango du. Mezu sekretuaren byta bi biteko 4 zatitan banatuko dugu: 11, 00, 10, 11, eta irudiaren ordena txikiko bitak ondoriozko zatiekin ordezkatuko ditugu: ...11101111 01001100 01111110 0101100111…. Halako ordezkapena, oro har, ez da nabaritzen giza begiarentzat. Gainera, irteerako gailu zaharrago askok ezingo dituzte aldaketa txikiak erakutsi ere egin.

Garbi dago 2 bit esanguratsuenak ez ezik, horietako edozein kopuru alda ditzakezula. Eredu hau dago: zenbat eta bit gehiago aldatu, orduan eta informazio gehiago ezkutatu dezakegu, eta horrek interferentzia gehiago eragingo ditu jatorrizko irudian. Adibidez, hona hemen bi irudi:

LSB esteganografia
LSB esteganografia

Ahaleginak egin arren, ezin nuen haien arteko aldea ikusi, baina, hala ere, bigarren irudian, deskribatutako metodoa erabiliz, Lewis Carrollen "The Hunting of the Snark" poema ezkutatuta dago. Honaino irakurri baduzu, ziurrenik inplementazioari buruz ezagutzea interesatuko zaizu. Nahiko sinplea da, baina berehala ohartaraziko dizut dena Delphin egiten dela. Bi arrazoi daude horretarako: 1. Delphi hizkuntza ona dela uste dut; 2. Programa hau ordenagailu bidezko ikusmenaren oinarriei buruzko ikastaro bat prestatzeko prozesuan jaio zen, eta kurtso hau ematen ari naizen mutilek ez dakite oraindik Delphi baino beste ezer. Sintaxia ezagutzen ez dutenentzat, gauza bat azaldu behar da: shl x ezkerrera x-ren bitarteko desplazamendu bat da, shr x-k eskuinera bitarteko desplazamendu bat da.

Suposatzen dugu kate batean gordetako testua edukiontzian idazten ari garela eta beheko bi byteak ordezkatzen ditugula:
Grabaketa kodea:

for i:=1 to length(str) do
    hasiko
      l1:=byte(str[i]) shr 6;
      l2:=byte(str[i]) shl 2; l2:=l2 shr 6;
      l3:=byte(str[i]) shl 4; l3:=l3 shr 6;
      l4:=byte(str[i]) shl 6; l4:=l4 shr 6;
 
      f.ReadBuffer(tmp,1);
      f.Posizioa:=f.Posizioa-1;
      tmp:=((tmp shr 2) shl 2)+l1;
      f.WriteBuffer(tmp,1);
 
      f.ReadBuffer(tmp,1);
      f.Posizioa:=f.Posizioa-1;
      tmp:=((tmp shr 2) shl 2)+l2;
      f.WriteBuffer(tmp,1);
 
      f.ReadBuffer(tmp,1);
      f.Posizioa:=f.Posizioa-1;
      tmp:=((tmp shr 2) shl 2)+l3;
      f.WriteBuffer(tmp,1);
 
      f.ReadBuffer(tmp,1);
      f.Posizioa:=f.Posizioa-1;
      tmp:=((tmp shr 2) shl 2)+l4;
      f.WriteBuffer(tmp,1);
 
    bukatzen;

irakurri beharreko kodea:

for i:=1 to MsgSize do
    hasiko
      f.ReadBuffer(tmp,1);
      l1:=tmp shl 6;
      f.ReadBuffer(tmp,1);
      l2:=tmp shl 6; l2:=l2 shr 2;
      f.ReadBuffer(tmp,1);
      l3:=tmp shl 6; l3:=l3 shr 4;
      f.ReadBuffer(tmp,1);
      l4:=tmp shl 6; l4:=l4 shr 6;
      str:=str+char(l1+l2+l3+l4);
    bukatzen;

Beno, benetan alferrarentzat - esteka programara eta bere iturburu kodea.

Eskerrik asko.

Iturria: www.habr.com

Gehitu iruzkin berria