LSB steganografi

Yon fwa mwen te ekri mwen premye pòs sou mwaye. Epi pòs sa a te dedye a yon pwoblèm trè enteresan, sètadi steganografi. Natirèlman, solisyon yo pwopoze nan ansyen sijè sa a pa ka rele steganografi nan vre sans mo a. Li se jis yon jwèt ak fòma dosye, men yon jwèt trè enteresan kanmenm.

Jodi a nou pral eseye fouye yon ti kras pi fon epi gade nan algorithm LSB la. Si w enterese, w ap akeyi anba chat. (Anba koupe a se trafik: apeprè yon megabyte.)

Premye a tout, li nesesè fè yon ti entwodiksyon kout. Tout moun konnen ke objektif la nan kriptografik se fè li enposib li enfòmasyon sekrè. Natirèlman, kriptografik gen aplikasyon li yo, men gen yon lòt apwòch nan pwoteksyon done. Nou pa oblije ankripte enfòmasyon an, men pretann ke nou pa genyen li. Se jisteman poukisa steganografi te envante. Wikipedya asire nou ke "esteganografi (ki soti nan grèk στεγανοσ a - kache ak grèk γραφω - mwen ekri, literalman "ekri sekrè") se syans nan transmisyon an kache nan enfòmasyon pa kenbe reyalite a nan transmisyon sekrè.

Natirèlman, pa gen moun ki entèdi konbine metòd kriptografik ak steganografik. Anplis, nan pratik yo fè sa, men travay nou an se konprann Basics yo. Si ou ak anpil atansyon etidye atik Wikipedya a, ou pral jwenn ke algoritm esteganografi gen ladan sa yo rele. veso ak mesaj. Yon veso se nenpòt enfòmasyon ki ede kache mesaj sekrè nou an.

Nan ka nou an, veso a pral yon imaj nan fòma BMP. Premyèman, ann gade nan estrikti a nan dosye sa a. Fichye a ka divize an 4 pati: header fichye, header imaj, palèt ak imaj nan tèt li. Pou rezon nou, nou sèlman bezwen konnen sa ki ekri nan header la.

De premye octets nan header la se siyati BM, Lè sa a, gwosè dosye a nan byte ekri nan yon mo doub, pwochen 4 bytes yo rezève epi yo dwe gen ladan zewo, epi finalman, yon lòt mo doub gen konpanse a depi nan konmansman an nan. dosye nan octets aktyèl yo nan imaj la. Nan yon dosye bmp 24-bit, chak pixel kode ak twa byte BGR.

Kounye a nou konnen kijan pou rive nan imaj la, tout sa ki rete se konprann ki jan nou ka ekri enfòmasyon nou bezwen la. Pou sa nou pral bezwen metòd LSB. Sans nan metòd la se jan sa a: nou ranplase ti bit yo pi piti enpòtan nan bytes yo responsab pou kodaj koulè. Ann di si pwochen byte mesaj sekrè nou an se 11001011, ak bytes ki nan imaj la se...11101100 01001110 01111100 0101100111..., Lè sa a, kodaj la pral sanble sa a. Nou pral divize octet mesaj sekrè a an 4 pati de bit: 11, 00, 10, 11, epi ranplase ti moso ki ba nan imaj la ak fragman ki kapab lakòz yo: ...11101111 01001100 01111110 0101100111…. Yon ranplasman sa a jeneralman pa aparan nan je imen an. Anplis, anpil aparèy pèsistans yap ogmante jiska pi gran p'ap menm ka montre ti chanjman konsa.

Li klè ke ou ka chanje pa sèlman 2 ti pi piti enpòtan yo, men nenpòt ki kantite yo. Gen modèl sa a: plis moso nou chanje, plis enfòmasyon nou ka kache, ak plis entèferans sa a pral lakòz nan imaj orijinal la. Pou egzanp, isit la se de imaj:

LSB steganografi
LSB steganografi

Malgre pi bon efò mwen, mwen pa t 'kapab wè diferans ki genyen ant yo, men kanmenm, nan dezyèm imaj la, lè l sèvi avèk metòd ki dekri a, powèm Lewis Carroll a "Lachas nan Snark la" kache. Si ou te li byen lwen, Lè sa a, ou se pwobableman enterese nan aprann sou aplikasyon an. Li byen senp, men mwen pral avèti ou touswit ke tout bagay fèt nan Delphi. Gen de rezon pou sa: 1. Mwen panse Delphi se yon bon lang; 2. Pwogram sa a fèt nan pwosesis pou prepare yon kou sou baz vizyon òdinatè, e mesye m ap anseye kou sa yo poko konnen lòt bagay ke Delphi. Pou moun ki pa abitye ak sentaks la, yon sèl bagay bezwen eksplike: shl x se yon chanjman bit a goch la pa x, shr x se yon chanjman bit a dwat pa x.

Nou sipoze ke nou ap ekri tèks ki estoke nan yon fisèl nan veso a epi ranplase de byte ki pi ba yo:
Kòd anrejistreman:

for i:=1 to length(str) do
    kòmanse
      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.Pozisyon:=f.Pozisyon-1;
      tmp:=((tmp shr 2) shl 2)+l1;
      f.WriteBuffer(tmp,1);
 
      f.ReadBuffer(tmp,1);
      f.Pozisyon:=f.Pozisyon-1;
      tmp:=((tmp shr 2) shl 2)+l2;
      f.WriteBuffer(tmp,1);
 
      f.ReadBuffer(tmp,1);
      f.Pozisyon:=f.Pozisyon-1;
      tmp:=((tmp shr 2) shl 2)+l3;
      f.WriteBuffer(tmp,1);
 
      f.ReadBuffer(tmp,1);
      f.Pozisyon:=f.Pozisyon-1;
      tmp:=((tmp shr 2) shl 2)+l4;
      f.WriteBuffer(tmp,1);
 
    fen;

kòd pou li:

for i:=1 to MsgSize do
    kòmanse
      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);
    fen;

Oke, pou moun ki vrèman parese yo - lyen nan pwogram nan ak kòd sous li yo.

Mèsi poutèt ou.

Sous: www.habr.com

Add nouvo kòmantè