steganograffeg LSB

Un tro ysgrifennais fy post cyntaf ar both. Ac roedd y swydd honno wedi'i chysegru i broblem ddiddorol iawn, sef steganograffeg. Wrth gwrs, ni ellir galw’r ateb a gynigir yn yr hen bwnc hwnnw yn steganograffeg yng ngwir ystyr y gair. Dim ond gêm gyda fformatau ffeil ydyw, ond gêm eithaf diddorol serch hynny.

Heddiw, byddwn yn ceisio cloddio ychydig yn ddyfnach ac edrych ar algorithm y BGLl. Os oes gennych ddiddordeb, mae croeso i chi o dan cath. (O dan y toriad mae traffig: tua megabeit.)

Yn gyntaf oll, mae angen gwneud cyflwyniad byr. Mae pawb yn gwybod mai pwrpas cryptograffeg yw ei gwneud hi'n amhosibl darllen gwybodaeth gyfrinachol. Wrth gwrs, mae gan cryptograffeg ei gymwysiadau, ond mae yna ddull arall o ddiogelu data. Nid oes yn rhaid i ni amgryptio'r wybodaeth, ond esgus nad oes gennym ni. Dyma'n union pam y dyfeisiwyd steganograffeg. Mae Wicipedia yn ein sicrhau mai “steganograffeg (o'r Groeg στεγανοσ - cudd a'r Groeg γραφω - rwy'n ysgrifennu, yn llythrennol "ysgrifennu cyfrinachol") yw gwyddoniaeth trosglwyddo cudd gwybodaeth trwy gadw'r union ffaith trosglwyddo yn gyfrinachol.

Wrth gwrs, nid oes neb yn gwahardd cyfuno dulliau cryptograffig a steganograffig. Ar ben hynny, yn ymarferol maen nhw'n gwneud hyn, ond ein tasg ni yw deall y pethau sylfaenol. Os astudiwch yr erthygl Wicipedia yn ofalus, byddwch yn darganfod bod algorithmau steganograffeg yn cynnwys yr hyn a elwir. cynhwysydd a neges. Mae cynhwysydd yn unrhyw wybodaeth sy'n helpu i guddio ein neges gyfrinachol.

Yn ein hachos ni, bydd y cynhwysydd yn ddelwedd ar ffurf BMP. Yn gyntaf, gadewch i ni edrych ar strwythur y ffeil hon. Gellir rhannu'r ffeil yn 4 rhan: pennawd ffeil, pennawd delwedd, palet a'r ddelwedd ei hun. At ein dibenion ni, does ond angen i ni wybod beth sydd wedi'i ysgrifennu yn y pennawd.

Dau beit cyntaf y pennawd yw'r llofnod BM, yna mae maint y ffeil mewn bytes wedi'i ysgrifennu mewn gair dwbl, mae'r 4 beit nesaf wedi'u cadw a rhaid iddynt gynnwys sero, ac yn olaf, mae gair dwbl arall yn cynnwys y gwrthbwyso o ddechrau'r ffeil i beit gwirioneddol y ddelwedd. Mewn ffeil bmp 24-bit, mae pob picsel wedi'i amgodio â thri beit BGR.

Nawr ein bod yn gwybod sut i gyrraedd y ddelwedd, y cyfan sydd ar ôl yw deall sut y gallwn ysgrifennu'r wybodaeth sydd ei hangen arnom yno. Ar gyfer hyn bydd angen y dull BGLl arnom. Mae hanfod y dull fel a ganlyn: rydym yn disodli'r darnau lleiaf arwyddocaol yn y bytes sy'n gyfrifol am amgodio lliw. Gadewch i ni ddweud os mai beit nesaf ein neges gyfrinachol yw 11001011, a'r bytes yn y ddelwedd yw...11101100 01001110 01111100 0101100111..., yna bydd yr amgodio yn edrych fel hyn. Byddwn yn rhannu'r neges gudd beit yn 4 rhan dau-did: 11, 00, 10, 11, ac yn disodli'r darnau lefel isel o'r ddelwedd gyda'r darnau canlyniadol: ...11101111 01001100 01111110 0101100111…. Yn gyffredinol, nid yw amnewidiad o'r fath yn amlwg i'r llygad dynol. Ar ben hynny, ni fydd llawer o ddyfeisiau allbwn hŷn hyd yn oed yn gallu dangos mân newidiadau o'r fath.

Mae'n amlwg y gallwch chi newid nid yn unig y 2 ran lleiaf arwyddocaol, ond unrhyw nifer ohonynt. Mae'r patrwm canlynol: po fwyaf o ddarnau y byddwn yn eu newid, y mwyaf o wybodaeth y gallwn ei guddio, a'r mwyaf o ymyrraeth y bydd hyn yn ei achosi yn y ddelwedd wreiddiol. Er enghraifft, dyma ddwy ddelwedd:

steganograffeg LSB
steganograffeg LSB

Er gwaethaf fy ymdrechion gorau, ni allwn weld y gwahaniaeth rhyngddynt, ond serch hynny, yn yr ail ddelwedd, gan ddefnyddio’r dull a ddisgrifiwyd, mae cerdd Lewis Carroll “The Hunting of the Snark” yn gudd. Os ydych chi wedi darllen hyd yma, yna mae'n debyg bod gennych chi ddiddordeb mewn dysgu am y gweithredu. Mae'n eithaf syml, ond byddaf yn eich rhybuddio ar unwaith bod popeth yn cael ei wneud yn Delphi. Mae dau reswm am hyn: 1. Credaf fod Delphi yn iaith dda; 2. Ganed y rhaglen hon yn y broses o baratoi cwrs ar hanfodion gweledigaeth gyfrifiadurol, ac nid yw'r dynion yr wyf yn addysgu'r cwrs hwn iddynt yn gwybod dim byd heblaw Delphi eto. I'r rhai nad ydynt yn gyfarwydd â'r gystrawen, mae angen egluro un peth: shr x yn shifft bitwise i'r chwith gan x, shr x yn shifft bitwise i'r dde wrth x.

Rydym yn cymryd yn ganiataol ein bod yn ysgrifennu testun sydd wedi'i storio mewn llinyn yn y cynhwysydd ac yn disodli'r ddau beit isaf:
Cod recordio:

ar gyfer i:=1 i hyd(str) wneud
    yn dechrau
      l1:=beit(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.Position:=f.Position-1;
      tmp:=((tmp shr 2) shl 2) + l1;
      f.WriteBuffer(tmp,1);
 
      f.ReadBuffer(tmp,1);
      f.Position:=f.Position-1;
      tmp:=((tmp shr 2) shl 2) + l2;
      f.WriteBuffer(tmp,1);
 
      f.ReadBuffer(tmp,1);
      f.Position:=f.Position-1;
      tmp:=((tmp shr 2) shl 2) + l3;
      f.WriteBuffer(tmp,1);
 
      f.ReadBuffer(tmp,1);
      f.Position:=f.Position-1;
      tmp:=((tmp shr 2) shl 2) + l4;
      f.WriteBuffer(tmp,1);
 
    diwedd;

cod i ddarllen:

ar gyfer i:=1 i MsgSize wneud
    yn dechrau
      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);
    diwedd;

Wel, i'r rhai diog iawn - dolen i'r rhaglen a'i chod ffynhonnell.

Diolch yn fawr.

Ffynhonnell: hab.com

Ychwanegu sylw