Steganografi LSB

Biyen aku nulis sandi kirim pisanan ing hub. Lan kiriman kasebut dikhususake kanggo masalah sing menarik banget, yaiku steganografi. Mesthine, solusi sing diusulake ing topik lawas kasebut ora bisa diarani steganografi ing pangertèn sing bener. Iku mung game karo format file, nanging game cukup menarik.

Dina iki kita bakal nyoba nggali luwih jero lan ndeleng algoritma LSB. Yen sampeyan kasengsem, sampeyan olèh ing ngisor kucing. (Ing potongan kasebut ana lalu lintas: udakara megabyte.)

Kaping pisanan, perlu kanggo nggawe introduksi singkat. Saben uwong ngerti yen tujuan kriptografi yaiku supaya ora bisa maca informasi rahasia. Mesthine, kriptografi duwe aplikasi, nanging ana pendekatan liyane kanggo proteksi data. Kita ora kudu encrypt informasi, nanging ndalang sing kita ora duwe. Iki sebabe steganografi diciptakake. Wikipedia njamin yen "steganografi (saka basa Yunani στεγανοσ - didhelikake lan Yunani γραφω - aku nulis, secara harfiah "tulisan rahasia") yaiku ilmu babagan transmisi informasi sing didhelikake kanthi njaga kasunyatan transmisi rahasia.

Mesthine, ora ana sing nglarang nggabungake metode kriptografi lan steganografi. Menapa malih, ing laku padha nindakake iki, nanging tugas kita kanggo ngerti dhasar. Yen sampeyan sinau kanthi ati-ati artikel Wikipedia, sampeyan bakal ngerti manawa algoritma steganografi kalebu sing diarani. wadhah lan pesen. Wadah yaiku informasi apa wae sing mbantu ndhelikake pesen rahasia kita.

Ing kasus kita, wadhah kasebut bakal dadi gambar ing format BMP. Pisanan, ayo ndeleng struktur file iki. File bisa dipérang dadi 4 bagean: header file, header gambar, palet lan gambar kasebut dhewe. Kanggo tujuan kita, kita mung kudu ngerti apa sing ditulis ing header.

Rong bait pisanan saka header yaiku teken BM, banjur ukuran file ing bait ditulis nganggo tembung dobel, 4 bait sabanjure disimpen lan kudu ngemot nol, lan pungkasane, tembung dobel liyane ngemot offset saka wiwitan. file menyang bita nyata saka gambar. Ing file bmp 24-bit, saben piksel dienkode karo telung bita BGR.

Saiki kita ngerti carane njaluk menyang gambar, kabeh sing isih kanggo ngerti carane kita bisa nulis informasi sing kita perlu ana. Kanggo iki, kita butuh metode LSB. Inti saka metode kasebut kaya ing ngisor iki: kita ngganti bit paling penting ing bita sing tanggung jawab kanggo enkoding warna. Contone, yen bait sabanjure pesen rahasia kita yaiku 11001011, lan bait ing gambar kasebut yaiku ... 11101100 01001110 01111100 0101100111 ..., banjur enkoding bakal katon kaya iki. Kita bakal misahake byte pesen rahasia dadi 4 bagean loro-bit: 11, 00, 10, 11, lan ngganti bit-urutan gambar sing kurang kanthi fragmen sing diasilake: ...11101111 01001100 01111110 0101100111…. Panggantos kasebut umume ora katon ing mripat manungsa. Kajaba iku, akeh piranti output lawas ora bakal bisa nampilake owah-owahan cilik kasebut.

Cetha yen sampeyan bisa ngganti ora mung 2 bit sing paling ora penting, nanging nomer kasebut. Ana pola ing ngisor iki: luwih akeh bit sing kita ganti, luwih akeh informasi sing bisa kita ndhelikake, lan luwih akeh gangguan sing bakal ditindakake ing gambar asli. Contone, ana rong gambar:

Steganografi LSB
Steganografi LSB

Senadyan paling sandi efforts , Aku ora bisa ndeleng prabédan antarane wong-wong mau, nanging Nanging, ing gambar kapindho, nggunakake cara diterangake, geguritan Lewis Carroll "The Hunting saka Snark" didhelikake. Yen sampeyan wis maca nganti saiki, mula sampeyan bisa uga kepengin sinau babagan implementasine. Iku cukup prasaja, nanging aku bakal ngelingake sampeyan langsung yen kabeh wis rampung ing Delphi. Ana rong alasan kanggo iki: 1. Aku Delphi minangka basa sing apik; 2. Program iki lair ing proses nyiapake kursus dhasar babagan visi komputer, lan wong lanang sing dakwulang kursus iki durung ngerti apa-apa kajaba Delphi. Kanggo sing ora ngerti sintaksis, siji bab sing kudu diterangake: shl x minangka owah-owahan bitwise menyang kiwa kanthi x, shr x minangka owah-owahan bitwise menyang tengen kanthi x.

Kita nganggep yen kita nulis teks sing disimpen ing senar menyang wadhah lan ngganti rong bita ngisor:
Kode rekaman:

kanggo i: = 1 kanggo dawa (str) do
    miwiti
      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.Panggonan:=f.Panggonan-1;
      tmp:=((tmp shr 2) shl 2)+l1;
      f.WriteBuffer(tmp,1);
 
      f.ReadBuffer(tmp,1);
      f.Panggonan:=f.Panggonan-1;
      tmp:=((tmp shr 2) shl 2)+l2;
      f.WriteBuffer(tmp,1);
 
      f.ReadBuffer(tmp,1);
      f.Panggonan:=f.Panggonan-1;
      tmp:=((tmp shr 2) shl 2)+l3;
      f.WriteBuffer(tmp,1);
 
      f.ReadBuffer(tmp,1);
      f.Panggonan:=f.Panggonan-1;
      tmp:=((tmp shr 2) shl 2)+l4;
      f.WriteBuffer(tmp,1);
 
    pungkasan;

kode kanggo maca:

kanggo i: = 1 kanggo MsgSize do
    miwiti
      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);
    pungkasan;

Nah, kanggo wong sing males tenan - link menyang program lan kode sumber.

Спасибо.

Source: www.habr.com

Add a comment