LXF136:Стеганография

Материал из Linuxformat.

Перейти к: навигация, поиск
Сте­га­но­гра­фия Скры­ва­ем цен­ные дан­ные в обыч­ных на вид изо­бра­же­ни­ях

Содержание

Perl: Во­дя­ные зна­ки

Perl Марко Фиоретти
Perl Ми­ха­ил Смир­нов
Часть 3: Тот, кто при­ду­мал вы­ра­же­ние «ви­ла­ми на во­де пи­са­но», яв­но не знал про сте­га­но­гра­фию и не чи­тал ста­тьи Ми­хаи­ла Смир­но­ва.

В эпо­ху гло­баль­ных ком­пь­ю­тер­ных систем необ­хо­ди­мость за­щи­ты кон­фи­ден­ци­аль­ной и сек­рет­ной ин­фор­ма­ции оче­вид­на и зло­бо­днев­на. Во мно­гих при­ло­жениях – на­при­мер, элек­трон­ном до­ку­мен­то­обо­ро­те – на­ря­ду с шиф­ро­ванием ин­фор­ма­ции возника­ет по­треб­ность сде­лать неза­мет­ным сам факт пе­ре­да­чи или хранения дан­ных. Ак­ту­аль­ность та­ких за­дач на­пря­мую свя­за­на с ростом кон­ку­рент­ной борь­бы, про­мыш­лен­ным шпио­на­жем, воз­растаю­щим кон­тро­лем го­су­дар­ствен­ных струк­тур над элек­трон­ны­ми сред­ства­ми свя­зи, проник­но­вением ха­ке­ров в ба­зы дан­ных. Одним из наи­бо­лее эф­фек­тив­ных спо­со­бов про­ти­во­дей­ствия та­ко­му вме­ша­тель­ству яв­ля­ет­ся со­кры­тие дан­ных (сте­га­но­гра­фия) в мас­си­ве циф­ро­во­го изо­бра­жения.

Исто­ри­че­ски, по­яв­ление ме­то­дов встраи­вания циф­ро­вых во­дя­ных зна­ков в файл изо­бра­жения бы­ло обу­слов­ле­но про­бле­­ма­ми за­щи­ты ин­тел­лек­ту­аль­ной соб­ствен­но­сти – в ча­ст­но­сти, прав вла­дель­цев на фо­то­сним­ки в Интернете. Ре­шение этой зада­чи, в той или иной сте­пени, дости­га­ет­ся с по­мо­щью встраи­вания в за­щи­щае­мое изо­бра­жение ви­ди­мых или скры­тых циф­ро­вых во­дя­ных зна­ков или ме­ток. Досто­ин­ства ме­то­дов за­щи­ты с ис­поль­зо­ванием ви­ди­мых зна­ков из­вест­ны – это пре­ж­де все­го про­сто­та про­це­ду­ры на­ло­жения во­дя­ных зна­ков на за­щи­щае­мое изо­бра­жение и воз­мож­ность со­хранить во­дя­ной знак при пе­ча­ти.

Наи­боль­шей по­пу­ляр­но­стью поль­зу­ет­ся встраи­вание во­дя­ных зна­ков с ре­гу­ли­руе­мой про­зрач­но­стью. С одним из ва­ри­ан­тов та­ко­го встраи­вания мы уже по­зна­ко­ми­лись в пер­вой ста­тье цик­ла (LXF134). Уда­ление ви­ди­мых гра­фи­че­ских зна­ков мо­жет вы­лить­ся в весь­ма слож­ную и тру­до­ем­кую за­да­чу, и это сле­ду­ет от­нести к досто­ин­ствам. Недостат­ки встраи­вания ви­ди­мых во­дя­ных зна­ков, как ни па­ра­док­саль­но, со­сто­ят в их ви­ди­мо­сти. По­следнее об­стоя­тель­ство ши­ро­ко ис­поль­зу­ет­ся в под­поль­ной ин­ду­ст­рии кон­тра­факт­ной про­дук­ции для ти­ра­жи­ро­вания под­де­лок изо­бра­жений из­вест­ных тор­го­вых брен­дов.

Про­ти­во­дей­ствие под­дел­кам мож­но осу­ще­ствить с по­мо­щью ме­то­дов встраи­вания скры­тых циф­ро­вых во­дя­ных зна­ков или ме­ток в файл изо­бра­жения-но­си­те­ля. В сфе­ре за­щи­ты ав­тор­ских прав основ­ной недоста­ток сте­но­гра­фи­че­ских ме­то­дов обу­слов­лен неустой­чи­во­стью скры­тых во­дя­ных зна­ков к раз­лич­ным ви­дам пре­об­ра­зо­ваний за­щи­щае­мо­го изо­бра­жения. Вме­сте с тем, в сфе­ре за­щи­ты кон­фи­ден­ци­аль­ной ин­фор­ма­ции этот ми­ нус ста­но­вит­ся плю­сом, обес­пе­чи­ваю­щим раз­ру­шение дан­ных при несанк­циониро­ван­ном вме­ша­тель­стве. Имен­но о реа­ли­за­ции этих ме­то­дов за­щи­ты кон­фи­ден­ци­аль­ной ин­фор­ма­ции с по­мо­щью про­грамм­но­го обес­пе­чения на язы­ке Perl и пой­дет речь ниже.

Дво­ич­ные во­дя­ные зна­ки

Изо­бра­жения, ис­поль­зуе­мые для встраи­вания скры­тых дан­ных, бу­дут пред­став­лять со­бой кон­тейнеры (но­си­те­ли) для пе­ре­да­чи или хранения сек­рет­ной ин­фор­ма­ции. При этом доступ для про­смот­ра изо­бра­жений мо­жет быть от­кры­тым и не вы­зы­вать по­доз­рений. Для хранения дан­ных в этом слу­чае мо­гут ис­поль­зо­вать­ся не толь­ко спе­циа­ли­зи­ро­ван­ные цен­тры дан­ных, но и обыч­ные HTTP-сер­ве­ры. Пе­ре­да­вае­мое со­об­щение пред­ва­ри­тель­но шиф­ру­ет­ся и пре­об­ра­зу­ет­ся в дво­ич­ную по­сле­до­ва­тель­ность. На сле­дую­щем эта­пе дво­ич­ная по­сле­до­ва­тель­ность встраи­ва­ет­ся в мас­сив дан­ных фай­ла изо­бра­жения. Раз­мер­ность встраи­вае­мых дан­ных за­ви­сит от спо­со­ба встраи­вания, объ­е­ма и яр­ко­ст­ных ха­рак­те­ри­стик изо­бра­жения-кон­тейнера. По­пыт­ки несанк­циониро­ван­но­го пре­об­ра­зо­вания изо­бра­жения-кон­тейнера при­во­дят к частич­ной или пол­ной по­те­ре скры­вае­мых дан­ных.

Важней­шим эле­мен­том лю­бой ин­фор­ма­ци­он­ной систе­мы яв­ля­ет­ся шиф­ро­вание кон­фи­ден­ци­аль­ной ин­фор­ма­ции. Рас­смат­ри­вае­мая ме­то­до­ло­гия – не исклю­чение: дву­мер­ные крип­то­грам­мы ор­ганиче­ски встраи­ва­ют­ся в дву­мер­ные изо­бра­жения-кон­тейнеры. Со­вме­ст­ное ис­поль­зо­вание стегано­гра­фи­че­ско­го под­хо­да и крип­то­си­стем обес­пе­чи­ва­ет прак­ти­че­ски непре­одо­ли­мый барь­ер взло­му. При этом стой­кость шиф­ра к взло­му оп­ре­де­ля­ет­ся исклю­чи­тель­но стой­ко­стью (дли­ной) сек­рет­но­го клю­ча.

Ме­тод би­то­вых плоско­стей

Рис. 1 Рис. 1. Дво­ич­ные дан­ные в би­то­вой плос­ко­сти изо­бра­же­ния.

Одним из наи­бо­лее из­вест­ных спо­со­бов со­кры­тия дан­ных (во­дя­ных зна­ков) в циф­ро­вом изо­бра­жении яв­ля­ет­ся ме­тод встраи­вания в би­то­вые плоско­сти изо­бра­жения. Би­то­вые плоско­сти или сре­зы – это про­сто раз­ря­ды циф­ро­во­го изо­бра­жения, на­хо­дя­щие­ся в одних и тех же по­ло­жениях в со­от­вет­ствую­щих дво­ич­ных чис­лах, пред­став­ляю­щих со­бой дан­ные изо­бра­жения. Их «ве­са» рав­ны 2M, где M = 0,1,2, … – но­мер по­зи­ции. Ал­го­ритм встраи­вания осно­вы­ва­ет­ся на свой­ствах зри­тель­но­го воспри­ятия и реа­ли­зу­ет­ся та­ким об­ра­зом, что­бы внедряе­мые би­ты оста­ва­лись бы неза­мет­ны­ми при ви­зу­аль­ном рас­смот­рении циф­ро­во­го изо­бра­жения. Обыч­но для вы­полнения это­го усло­вия дан­ные встраи­ва­ют­ся в би­то­вую плоскость с наи­мень­шим ве­сом, рав­ным 20 (млад­ший бит). Чем мень­ше вес вы­бран­ной би­то­вой плоско­сти для встраи­вания, тем мень­шее влияние ока­зы­ва­ет­ся на ка­че­ство изо­бра­жения-кон­тейнера, и тем менее за­мет­ны из­менения. На рис.1 пред­став­лен при­мер дву­мер­ной дво­ич­ной по­сле­до­ва­тель­но­сти дан­ных для со­кры­тия.

Объ­ем Q сим­во­лов встраи­вае­мых дан­ных в по­лу­то­но­вое [grayscale] изображение мож­но под­счи­тать по фор­му­ле: Q=P*W*H/B, где P – чис­ло би­то­вых плоско­стей, ис­поль­зуе­мых для встраи­вания, W и H – ши­ри­на и вы­со­та изо­бра­жения в пик­се­лях, со­от­вет­ствен­но, В — чис­ло бит на сим­вол. На рис. 2 по­ка­за­ны при­ме­ры встраи­вания дан­ных в би­то­вые плоско­сти цвет­но­го (RGB) изо­бра­жения.

Рис. 2 Рис. 2. Изо­бра­же­ния со встро­ен­ны­ми дво­ич­ны­ми дан­ны­ми: а) в би­то­вую плос­кость ну­ле­­во­го раз­ря­да и толь­ко ком­по­нен­ты Blue, б) в че­ты­ре би­то­вые плос­ко­сти всех RGB-ком­по­нент.

В пер­вом слу­чае, на рис. 2а, для встраи­вания ис­поль­зу­ет­ся од­на би­то­вая плоскость наи­мень­ше­го ну­ле­во­го раз­ря­да 20 толь­ко синей (Blue) ком­понен­ты изо­бра­жения. Фраг­мент про­грамм­ной реа­ли­за­ции для это­го слу­чая по­ка­зан ниже:

$Width3 = $Width * $nbyte;
 $wt = int($Width3/4);
 $wt = $wt*4;
 $ut = $Width3 - $wt;
 if($ut!=0){$ut = 4 - $ut;}
 for($j=0;$j<$Height; $j++){
 for($i=0;$i<$Width; $i++){
   bin[$i][$j] = int(rand(2));
 }}
 $bit_plan = 1;
 $rgb=0;
 for($j=0;$j<$Height; $j++){
   $y1=$j*($Width3 + $ut);
   $k=0;
   for($i=$rgb;$i<$Width3; $i+=3){		
     $tmp = ($BMP_IMG[$i + $y1]>> $bit_plan)<< $bit_plan;
   $BMP_IMG[$i + $y1] = $tmp + $bin[$k][$j];
   $k++;
  }
 }

Ис­ход­ное изо­бра­жение-кон­тейнер ши­ри­ной $Width и вы­со­той $Height пик­се­лей со­дер­жит­ся в мас­си­ве @BMP_IMG. В мас­си­ве @bin соз­да­ет­ся слу­чай­ная по­сле­до­ва­тель­ность дво­ич­ных чи­сел [0,1], ими­ти­рую­щих шиф­ро­ван­ную по­сле­до­ва­тель­ность скры­вае­мых дан­ных. Па­ра­метр $nbyte ра­вен 3 для цвет­но­го RGB-изо­бра­жения. В пе­ре­мен­ной $wt за­да­ет­ся ко­ли­че­ство слов в стро­ке изо­бра­жения фор­ма­та BITMAP. В пе­ре­мен­ную $tmp запи­сы­ва­ет­ся ре­зуль­тат об­ну­ления би­то­вой плоско­сти 20 синей ком­понен­ты ($rgb=0).

Во вто­ром при­ме­ре, на рис.2б, для встраи­вания ис­поль­зу­ют­ся че­ты­ре би­то­вых плоско­сти млад­ших раз­ря­дов ка­ж­дой из RGB-ком­понент со­от­вет­ствен­но. Из сравнения изо­бра­жений на рис. 2а и рис. 2б вид­но, что чем боль­ше би­то­вых плоско­стей за­нима­ют встраи­вае­мые дан­ные, тем вы­ше сте­пень иска­жений, ви­ди­мых гла­зу. При­чем, кро­ме от­дель­ных шу­мо­вых вы­бро­сов, по­яв­ля­ют­ся лож­ные кон­ту­ры на уча­ст­ках изо­бра­жения с рав­но­мер­ным фо­ном (на­при­мер, на го­лу­бом небе). Фраг­мент про­грам­мы для это­го слу­чая по­ка­зан ниже.

$bit_plan=4;
 @BMP_IMG=map($_ >> $bit_plan, @BMP_IMG);
 @BMP_IMG=map($_ << $bit_plan, @BMP_IMG);
 for($plan=0;$plan<$bit_plan;$plan++){
 for($rgb = 0;$rgb<$nbyte; $rgb++){
 for($j=0;$j<$Height; $j++){
   $y1=$j*($Width3 + $ut);
   $k=0;
   for($i=$rgb;$i<$Width3; $i+=3){		
     $BMP_IMG[$i + $y1] += $bin[$k][$j]*(1<<$plan);
   $k++;
 }}}}

Об­ну­ление би­то­вых плоско­стей осу­ще­ств­ля­ет­ся вне основ­ных цик­лов с по­мо­щью функ­ции map().

Умень­шить иска­жения от­части по­мо­га­ет при­менение в ка­че­стве кон­тейнеров тек­стур­ных изо­бра­жений. Ста­ти­сти­че­ские ха­рак­те­ри­сти­ки тек­стур по­зво­ля­ют оп­ти­ми­зи­ро­вать со­от­но­шение ме­ж­ду ко­ли­че­ством встраи­вае­мых дан­ных и ка­че­ством ви­зу­аль­но­го воспри­ятия. При­мер тек­стур­но­го кон­тейнера при встраи­вании дан­ных в че­ты­ре би­то­вые плоско­сти всех RGB-ком­понент по­ка­зан на рис. 3.

Рис. 3 Рис. 3. При­мер тек­стур­но­го кон­тей­не­ра со встро­ен­ны­ми дан­ны­ми в че­ты­ре би­то­вые плос­ко­сти всех RGB-ком­по­нент.

Объ­ем встраи­вае­мых дан­ных в при­ме­ре на рис. 3 при­близительно со­став­ля­ет Q = 1,18 МБ. Объ­ем ис­ход­но­го изо­бра­жения-кон­тейнера ра­вен 2,4 МБ. Ко­эф­фи­ци­ент ис­поль­зо­вания равен око­ло 49 %.

Как мож­но су­дить из на­звания спо­со­ба, для встраи­вания дан­ных без по­терь необ­хо­ди­мо ис­поль­зо­вать гра­фи­че­ские BITMAP-фор­ма­ты ти­па BMP, TIFF и т. п. С этим свя­зан основ­ной недоста­ток дан­но­го спо­со­ба, обу­слов­лен­ный зна­чи­тель­ным объ­е­мом фай­лов изо­бра­жений в фор­ма­те BITMAP. Ес­ли этот фак­тор ока­жет­ся су­ще­ствен­ным, то мож­но восполь­зо­вать­ся струк­тур­ным спо­со­бом, пред­став­лен­ным ниже.

Струк­тур­ный спо­соб

На­стоя­щий спо­соб осно­вы­ва­ет­ся на ис­поль­зо­вании внут­ренней струк­ту­ры гра­фи­че­ских фор­ма­тов. По­след­няя пред­став­ля­ет со­бой неко­то­рую ор­ганиза­цию функ­цио­наль­ных и ин­фор­ма­ци­он­ных сег­мен­тов (по­лей) циф­ро­во­го изо­бра­жения. Имен­но в эти по­ля и встраи­ва­ют­ся сек­рет­ные дан­ные. Объ­ем встраи­вае­мых дан­ных мо­жет быть не свя­зан с раз­мер­но­стью изо­бра­жения-кон­тейнера. Основ­ное досто­ин­ство спо­со­ба со­сто­ит в том, что в ка­че­стве кон­тейнера мо­гут ис­поль­зо­вать­ся прак­ти­че­ски лю­бые струк­ту­ри­ро­ван­ные дан­ные, вклю­чая ме­диа­-фай­лы, до­ку­мен­ты PDF, ZIP и др. При­менение гра­фи­че­ских фор­ма­тов, до­пускаю­щих сжа­тие, по­зво­ля­ет зна­чи­тель­но по­вы­сить ко­эф­фи­ци­ент ис­поль­зо­вания фай­ла-кон­тейнера.

Рас­смот­рим про­грамм­ную реа­ли­за­цию струк­тур­но­го встраи­вания на при­ме­ре фор­ма­та JPEG. Де­ление на сег­мен­ты в этом слу­чае осу­ще­ств­ля­ет­ся с по­мо­щью мар­ке­ров, ко­то­рые при­ня­то запи­сы­вать в ше­ст­на­дца­те­рич­ном ви­де 0xFF 0xnn, где ше­ст­на­дца­те­рич­ное чис­ло nn ука­зы­ва­ет на то, ка­кую функ­цио­наль­ную на­груз­ку несет тот или иной сег­мент. Лю­бой мар­кер на­чи­на­ет­ся бай­том 0xFF. На­при­мер, значения 0xFF 0xD8, рас­по­ло­жен­ные в ну­ле­вом и пер­вом бай­тах фай­ла изо­бра­жения, обо­зна­ча­ют на­ча­ло изо­бра­жения (SOI) JPEG-фор­ма­та. 0xFF 0xD9 со­от­вет­ству­ет при­зна­ку кон­ца изо­бра­жения (EOI). Далее пред­став­лен ва­ри­ант про­грам­мы для встраи­вания сек­рет­ных дан­ных в по­ле пе­ред при­зна­ком на­ча­ла ин­фор­ма­ци­он­но­го бло­ка 0xFF 0xС4:

open FIMG, “images/filein.jpg”;
 binmode(FIMG );
 @FILE_IMG=<FIMG>;
 close FIMG;
 $data=join(“”, @FILE_IMG);
 @JPG = unpack(“C*”, $data);
 $marker=”\xff\xc4”;
 $pos =index($data, $marker);
 $message=”сек­рет­ное со­об­ще­ние”;
 @C1 = unpack(“C*”, $message);
 @BEGIN=@JPG[0..$pos - 1];
 @END=@JPG[$pos..scalar(@JPG)];
 @UNIT=(@BEGIN,@C1,@END);
 $out = pack(“C*”, @UNIT);
 open JPEG, “>images/fileout.jpg”;
 binmode(JPEG);
 print JPEG $out;
 close JPEG;

В при­ве­ден­ном при­ме­ре встраи­вание дан­ных осу­ще­ств­ля­ет­ся во внут­ренний сег­мент фай­ла фор­ма­та JPEG, и по­это­му про­грам­ма долж­на от­сле­жи­вать воз­мож­ность по­яв­ления бай­тов 0xFF, пре­об­ра­зо­вы­вать их или уда­лять. Мож­но реа­ли­зо­вать бо­лее про­стой ва­ри­ант про­грам­мы, не тре­бую­щий ана­ли­за бай­тов 0xFF, ес­ли про­из­во­дить встраи­вание дан­ных в конец фай­ла. Ниже пред­став­лен при­мер встраи­вания в файл ар­хи­ва в фор­ма­те ZIP.

open FILE, “$PATH/example.zip”;
 binmode(FILE);
 @FILE_ZIP=<FILE_ZIP>;
 close FILE;
 $zip=join(“”, @FILE_ZIP);
 @ZIP = unpack(“C*”, $zip);
 @UNIT=(@ZIP,0xff,0xd9);
 $out = $data.pack(“C*”, @UNIT);

За­вер­шаю­щи­ми бай­та­ми встро­ен­ных дан­ных бу­дет при­знак кон­ца фай­ла: 0xFF 0xD9. От­ме­тим, что объ­ем встраи­вае­мых дан­ных при ис­поль­зо­вании струк­тур­но­го спо­со­ба мо­жет быть про­из­воль­ным и зна­чи­тель­но пре­вы­шать раз­мер фай­ла изо­бра­жения-кон­тейнера, и не соз­да­вать при этом ника­ких ви­зу­аль­ных иска­жений. Недостат­ком рас­смот­рен­но­го под­хо­да бу­дет пред­ска­зуе­мость мест для встраи­вания скры­вае­мых дан­ных. При­менение об­лач­ных web-тех­но­ло­гий по­зво­ля­ет уст­ранить этот недоста­ток, ес­ли мы ра­зо­бьем скры­вае­мые дан­ные на N частей, встро­им их в N*L изо­бра­жений-кон­тейнеров и раз­местим на L HTTP-сер­ве­рах в Ин­тернете. С уче­том раз­ви­тия со­вре­мен­ных web-тех­но­ло­гий реа­ли­зо­вать по­доб­ное со­всем не слож­но.

Го­ло­гра­фи­че­ский под­ход

Рис. 4 Рис. 4. Встраи­ва­ние об­раз­ца под­пи­си: а) кон­тей­нер со встро­ен­ной го­ло­грам­мой, б) ре­зуль­тат вос­ста­нов­ле­ния во­дя­но­го зна­ка.

Счи­та­ет­ся, что с точ­ки зрения устой­чи­во­сти скры­тых во­дя­ных зна­ков к раз­лич­ным пре­об­ра­зо­ваниям (ата­кам) це­ле­со­об­раз­но встраи­вать дан­ные в сег­мент ви­део­дан­ных, то есть непо­сред­ствен­но в кар­тин­ку фай­ла изо­бра­жения. Одним из ин­те­рес­ных спо­со­бов, обес­пе­чи­ваю­щим, кро­ме все­го, со­хранение дан­ных при пе­ча­ти, яв­ля­ет­ся го­ло­гра­фи­че­ский под­ход. Про­цесс фо­то­-­пе­ча­ти пред­став­ля­ет со­бой каскад циф­ро-ана­ло­го­вых пре­об­ра­зо­ваний, ко­то­рые мо­гут оценивать­ся как экстре­маль­ные ата­ки. Фо­то­гра­фи­че­ское изо­бра­жение фор­ми­ру­ет­ся (ес­ли го­во­рить крат­ко) в про­цес­се вы­мы­вания и кри­стал­ли­за­ции га­ло­ид­но­го се­реб­ра в фо­то­но­си­те­ле. Ви­зуа­ли­за­ция и сте­пень по­темнения кар­тин­ки при этом обес­пе­чи­ва­ет­ся за счет раз­лич­ной плот­но­сти зе­рен кри­стал­ли­че­ско­го се­реб­ра. В циф­ро­вом изо­бра­жении, пик­се­лям, со­дер­жа­щим толь­ко млад­шие би­ты, бу­дут со­от­вет­ство­вать тем­ные уча­ст­ки изо­бра­жения, а пик­се­лям, имею­щим и стар­шие би­ты – свет­лые уча­ст­ки. Циф­ро­вое пред­став­ление изо­бра­жений име­ет де­ло с пик­се­ля­ми и би­та­ми, ана­ло­го­вое фо­то­гра­фи­че­ское ха­рак­те­ри­зу­ет­ся зер­на­ми и оп­ти­че­ской плот­но­стью. Оче­вид­но, что ме­то­ды, по­доб­ные ме­то­дам би­то­вых плоско­стей, не в со­стоянии обес­пе­чить со­хранение во­дя­ных зна­ков при пе­ча­ти изо­бра­жения-кон­тейнера.

В го­ло­гра­фи­че­ском под­хо­де, в изо­бра­жение-кон­тейнер встраи­ва­ет­ся не сам во­дя­ной знак, а его циф­ро­вая го­ло­грам­ма.

Фор­му­ла для встраи­вания циф­ро­вых го­ло­грамм h(x,y) в изо­бра­жение-кон­тейнер g(x,y) име­ет вид:

s(x,y) = g(x,y) + h(x,y),

где s(x,y) – ре­зуль­ти­рую­щее изо­бра­же­ние со встро­ен­ной го­ло­грам­мой во­дя­но­го зна­ка W(u,v). По­лу­че­ние го­ло­грам­мы осу­ще­ст­в­ля­ет­ся с по­мо­щью об­рат­но­го пре­об­ра­зо­ва­ния Фу­рье

h(x,y) = F-1{W1(u,v)}, (1)

где F-1 – опе­ра­тор об­рат­но­го пре­об­ра­зо­вания Фу­рье, W1(u,v) = W(u-m,v-N) + W(-u-m,-v-N) – сум­ма изо­бра­жений во­дяно­го зна­ка и его зеркаль­но­го от­ра­жения, m и N – сме­щение от­но­си­тель­но на­ча­ла ко­ор­ди­нат в частот­ной плоско­сти u,v. Па­ра­мет­ры m и N яв­ля­ют­ся клю­ча­ми го­ло­грам­мы. Рас­смот­рим фраг­мент ко­да для вы­чис­ления го­ло­грам­мы:

for($y=0;$y<$NN; $y++){
  for($x=0;$x<$NN; $x++){
   $wx[$x][$y]=0;
   $wy[$x][$y]=0;
 }}
 for($y=0;$y<$Yh; $y++){
  for($x=0;$x<$Xw; $x++){
   $wx[$x+$M][$y+$N] = $W[$x][$y];
   $wx[$NN ­ $x ­ $M ­1][$NN ­ $y ­ $N ­1] = $W[$x][$y];
 }}
 &d2cdfti(\@wx,\@wy,\$NN,\$PI);
 for($y=0;$y<$NN; $y++){
  for($x=0;$x<$NN; $x++){
   $h[$x][$y]=$wx[$x][$y];
 }}

Дву­мер­ное об­рат­ное пре­об­ра­зо­вание Фу­рье вы­пол­ня­ет­ся с по­мо­щью под­про­грам­мы d2cdfti(), код ко­то­рой был пред­став­лен в пре­ды­ду­щей ста­тье это­го цик­ла. Раз­мер квад­рат­ной мат­ри­цы изо­бра­жения контейнера g(x,y) за­да­ет­ся па­ра­мет­ром $NN, а раз­ме­ры мас­си­ва @W во­дя­но­го зна­ка W(u,v) за­да­ют­ся пе­ре­мен­ны­ми $Yh и $Xw. Па­ра­мет­ры сме­щения $N и $M не долж­ны пре­вы­шать по­ло­ви­ны $NN за вы­че­том $Yh и $Xw, со­от­вет­ствен­но.

Основ­ной недоста­ток это­го спо­со­ба свя­зан с ог­раничен­ным объ­е­мом встраи­вае­мых дан­ных. Наи­бо­лее це­ле­со­об­раз­но при­ме­нять го­ло­гра­фи­че­ский под­ход для со­кры­тия неболь­ших изо­бра­жений, восста­нов­ление ко­то­рых до­пуска­ет неко­то­рую по­те­рю ка­че­ства (по­доб­но JPEG): об­раз­цов подпи­сей, от­пе­чат­ков паль­цев, но­ме­ра и се­рии пас­пор­та и т. п. На рис. 4а пред­став­ле­но изо­бра­жение-кон­тейнер в фор­ма­те JPEG со встро­ен­ным фак­си­миль­ным об­раз­чиком подпи­си. Ка­че­ство JPEG-изо­бра­жения наи­выс­шее – 100 %. На рис. 4б по­ка­зан ре­зуль­тат восста­нов­ления об­раз­ца подпи­си; па­ра­мет­ры сме­щения N и m со­став­ля­ли 118 и 120 пик­се­лей, со­от­вет­ствен­но. Ва­ри­ант для со­кры­тия дак­ти­ло­ско­пи­че­ско­го от­пе­чат­ка ил­лю­ст­ри­ру­ет­ся на рис. 5а. Дво­ич­ное изо­бра­жение во­дя­но­го зна­ка встраи­ва­лось во все три RGB-ком­понен­ты. Ка­че­ство JPEG-изо­бра­жения бы­ло средним и рав­ня­лось 50 %, а сжа­тие по сравнению со 100 % ка­че­ством со­ста­ви­ло 75 %. На рис. 5б пред­став­лен ре­зуль­тат восста­нов­ления об­раз­ца от­пе­чат­ка с па­ра­мет­ра­ми сме­щения N и m рав­ны­ми 199 и 204 пик­се­лей, со­от­вет­ствен­но.

Рис. 5 Рис. 5. Встраи­ва­ние об­раз­ца от­пе­чат­ка паль­ца: а) кон­тей­нер со встро­ен­ной го­ло­грам­мой, б) ре­зуль­тат вос­ста­нов­ле­ния во­дя­но­го зна­ка.

На рис. 4б и рис. 5б восста­нов­лен­ные об­раз­цы во­дя­ных зна­ков име­ют зеркаль­ное ото­бра­жение, что обу­слов­ле­но по­яв­лением мнимо­го изо­бра­жения при восста­нов­лении го­ло­грам­мы Фу­рье. Про­цесс восста­нов­ления го­ло­грам­мы яв­ля­ет­ся про­це­ду­рой, об­рат­ной встраи­ванию во­дя­ных зна­ков, и по­это­му, в со­от­вет­ствии с фор­му­лой (1), по­тре­бу­ет­ся вы­полнить пря­мое пре­об­ра­зо­вание Фу­рье изо­бра­жения-кон­тейнера. От­ме­тим, что для об­на­ру­жения и восста­нов­ления сек­рет­ных дан­ных тре­бу­ет­ся ап­ри­ор­ное знание па­ра­мет­ров N и m, при ко­то­рых соз­да­ва­лась го­ло­грам­ма.

В слу­чае, ес­ли изо­бра­жение со встро­ен­ным во­дя­ным зна­ком бы­ло со­хранено в ви­де твер­дой ко­пии – на­при­мер, нанесе­но на кре­дит­ную кар­ту (рис. 6) – то пе­ред восста­нов­лением по­тре­бу­ет­ся сна­ча­ла отсканиро­вать фо­то­изо­бра­жение с кар­точ­ки, а за­тем уже при­менить про­грамм­ное обес­пе­чение для из­вле­чения об­раз­ца во­дя­но­го зна­ка.

Рис. 6 Рис. 6. Блок-схе­ма про­цес­са иден­ти­фи­ка­ции вла­дель­ца кре­дит­ной кар­ты.

Фо­то­изо­бра­жение на рис. 6 счи­ты­ва­ет­ся с по­мо­щью сканера на ПЗС-мат­ри­це, под­вер­га­ет­ся пре­об­ра­зо­ваниям с це­лью восста­нов­ления скры­то­го во­дя­но­го зна­ка, и за­тем скры­тая ин­фор­ма­ция вы­во­дит­ся на дис­плей. На схе­ме, скры­тые дан­ные пред­став­ля­ют со­бой гра­фи­че­ское изо­бра­жение зна­ка ко­пи­рай­та ©.

Мы по­зна­ко­ми­лись с весь­ма неболь­шим пред­ста­ви­тель­ством спо­со­бов для встраи­вания циф­ро­вых во­дя­ных зна­ков в фай­лы изо­бра­жений. Вме­сте с тем, мы за­тро­ну­ли важ­ные ас­пек­ты встраи­вания как скры­тых, так и ви­ди­мых во­дя­ных зна­ков. Уз­на­ли, как восполь­зо­вать­ся об­лач­ной web-тех­но­ло­ги­ей при встраи­вании скры­вае­мой ин­фор­ма­ции во мно­же­стве изо­бра­жений и раз­ме­щении этих изо­бра­жений на мно­же­стве сер­ве­ров. Рас­смот­ре­ли спо­соб, по­зво­ляю­щий вос­ста­но­вить скры­тый во­дя­ной знак из изо­бра­же­ния, ко­то­рое бы­ло пред­ва­ри­тель­но на­пе­ча­та­но на твер­дом но­си­те­ле. По-мо­ему, для че­ты­рех стра­ниц – весь­ма не­пло­хо.

Личные инструменты
  • Купить электронную версию
  • Подписаться на бумажную версию