Stéganografi LSB

Sakali waktu kuring nulis kuring pos munggaran dina hub. Sareng tulisan éta dikhususkeun pikeun masalah anu pikaresepeun pisan, nyaéta steganografi. Tangtosna, solusi anu diajukeun dina topik anu lami éta henteu tiasa disebat steganografi dina harti anu leres. Ieu ngan kaulinan kalayan format file, tapi kaulinan geulis metot mangkaning.

Dinten ieu kami bakal nyobian ngagali sakedik langkung jero sareng ningali algoritma LSB. Mun anjeun kabetot, anjeun wilujeng sumping handapeun ucing. (Di handapeun cut aya lalulintas: ngeunaan hiji megabyte.)

Anu mimiti, perlu nyieun bubuka pondok. Sarerea terang yén tujuan kriptografi nyaéta ngajantenkeun teu mungkin maca inpormasi rahasia. Tangtosna, kriptografi ngagaduhan aplikasina, tapi aya pendekatan anu sanés pikeun panyalindungan data. Urang teu kudu encrypt informasi, tapi pretend yén urang teu boga eta. Éta pisan sababna naha steganography nimukeun. Wikipedia ngajamin yén "steganografi (tina basa Yunani στεγανοσ - disumputkeun sareng Yunani γραφω - kuring nyerat, sacara harfiah "tulisan rusiah") nyaéta élmu ngeunaan pangiriman inpormasi anu disumputkeun ku cara ngajaga kanyataan transmisi rahasia.

Tangtosna, teu aya anu nyaram ngagabungkeun metode kriptografi sareng steganografi. Leuwih ti éta, dina prakna maranéhna ngalakukeun ieu, tapi tugas urang - ngartos dasar. Lamun taliti nalungtik artikel Wikipedia, anjeun bakal manggihan yén algoritma steganography kaasup nu disebut. wadah jeung pesen. Wadah mangrupikeun inpormasi anu ngabantosan nyumputkeun pesen rusiah urang.

Dina kasus urang, wadahna bakal janten gambar dina format BMP. Kahiji, hayu urang nempo struktur file ieu. File bisa dibagi jadi 4 bagian: lulugu file, lulugu gambar, palette jeung gambar sorangan. Pikeun tujuan urang, urang ngan ukur kedah terang naon anu diserat dina lulugu.

Dua bait kahiji tina lulugu nyaéta tanda tangan BM, teras ukuran file dina bait ditulis dina kecap ganda, 4 bait salajengna ditangtayungan sareng kedah ngandung nol, sareng tungtungna, kecap ganda sanésna ngandung offset ti mimiti. file kana bait sabenerna gambar. Dina file bmp 24-bit, unggal piksel disandi ku tilu bait BGR.

Ayeuna urang terang kumaha carana meunang ka gambar, ngan ukur ngartos kumaha urang tiasa nyerat inpormasi anu urang peryogikeun di dinya. Pikeun ieu urang peryogi metode LSB. Intina métode nyaéta kieu: urang ngaganti bit sahenteuna signifikan dina bait jawab encoding warna. Hayu urang nyebutkeun lamun bait salajengna pesen rusiah urang nyaeta 11001011, sarta bait dina gambar nyaeta ... 11101100 01001110 01111100 0101100111 ..., lajeng encoding bakal kasampak kawas kieu. Urang bakal ngabagi bait pesen rusiah kana 4 bagian dua-bit: 11, 00, 10, 11, sarta ngaganti bit-urutan low tina gambar jeung fragmen hasilna: ...11101111 01001100 01111110 0101100111…. Panggantian sapertos kitu umumna henteu katingali ku panon manusa. Leuwih ti éta, loba alat kaluaran heubeul malah moal bisa nembongkeun parobahan minor misalna.

Ieu jelas yén anjeun bisa ngarobah teu ngan 2 bit signifikan sahenteuna, tapi sajumlah aranjeunna. Aya pola di handap ieu: beuki bit urang ngarobah, beuki informasi urang bisa nyumputkeun, sarta leuwih gangguan ieu bakal ngabalukarkeun dina gambar aslina. Contona, ieu dua gambar:

Stéganografi LSB
Stéganografi LSB

Sanajan usaha pangalusna kuring, abdi teu bisa ningali bédana antara aranjeunna, tapi dina gambar kadua, ngagunakeun métode digambarkeun, sajak Lewis Carroll urang "The Hunting of Snark" disumputkeun. Upami anjeun parantos maca dugi ka ieu, maka anjeun sigana resep diajar ngeunaan palaksanaan. Ieu rada basajan, tapi kuring bakal ngingetkeun anjeun langsung yén sagalana geus rengse di Delphi. Aya dua alesan pikeun ieu: 1. Jigana Delphi mangrupakeun basa alus; 2. Program ieu dilahirkeun dina prosés Nyiapkeun kursus dina dasar visi komputer, jeung guys ka saha Kuring keur ngajarkeun kursus ieu teu acan terang nanaon lian ti Delphi. Pikeun jalma anu teu wawuh jeung sintaksis, hiji hal perlu dipedar: shl x nyaéta shift bitwise ka kénca ku x, shr x mangrupakeun bitwise shift ka katuhu ku x.

Kami nganggap yén kami nyerat téks anu disimpen dina senar kana wadahna sareng ngagentos dua bait handap:
Kodeu rékaman:

pikeun i: = 1 mun panjang (str) ngalakukeun
    mimiti
      l1: = bait(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.Posisi:=f.Posisi-1;
      tmp:=((tmp shr 2) shl 2)+l1;
      f.WriteBuffer(tmp,1);
 
      f.ReadBuffer(tmp,1);
      f.Posisi:=f.Posisi-1;
      tmp:=((tmp shr 2) shl 2)+l2;
      f.WriteBuffer(tmp,1);
 
      f.ReadBuffer(tmp,1);
      f.Posisi:=f.Posisi-1;
      tmp:=((tmp shr 2) shl 2)+l3;
      f.WriteBuffer(tmp,1);
 
      f.ReadBuffer(tmp,1);
      f.Posisi:=f.Posisi-1;
      tmp:=((tmp shr 2) shl 2)+l4;
      f.WriteBuffer(tmp,1);
 
    mungkas;

kode pikeun maca:

pikeun i: = 1 mun MsgSize do
    mimiti
      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);
    mungkas;

Nya, pikeun anu leres-leres puguh - link ka program jeung kode sumber na.

Hatur nuhun.

sumber: www.habr.com

Tambahkeun komentar