در اين بخش درباره steganography در عکس های ديجيتالی بحث می کنيم . در حقيقت steganography در عکس درباره استفاده از محدوديت بينايی چشم است . به همين دليل متن ، متن کد شده يک عکس و کلا ً هر چيزی که بتوان آن را به بيت تقسيم بندی کرد را می توان در يک عکس جاسازی کرد . steganography در عکس در سال های اخير به دليل بوجود آمدن کامپيوتر های قدرتمند که عکس ها را با سرعت زياد بررسی می کنند پيشرفت زيادی کرد ، همچنين نرم افزارهايی که اين کار را انجام می دهند نيز از اينترنت قابل دريافت هستند .
کمی راهنمايی درباره Steganography در عکس :
قبل از اينکه جلوتر برويم کمی بايد درباره فايلهای عکس در کامپيوتر توضيح داده شود . برای کامپيوتر عکس چيزی نيست جز يک آرايه از تصاوير که حاوی اطلاعات رنگی ِ هر نقطه يا pixel می باشد . pixel ها اطلاعات تصويری عکس را می سازند . عکس هايی با اندازه 640 در 480 پيکسل با تعداد رنگ ِ 256 ( 8 بيت در هر پيکسل ) بسيار معمول هستند ، اين چنين عکسی حدود 300 کيلوبايت اطلاعات دارد .
عکس های ديجيتالی در مد های 24 بيت در پيکسل يا 8 بيت در هر پيکسل ذخيره می شوند . به عکس هايی که از 24 بيت استفاده می کنند True Color نيز گفته می شود . عکسی که از 24 بيت استفاده می کند فضای بيشتری برای جاسازی اطلاعات در اختيار می گذارد . البته اين عکس ها حجم بيشتری دارند ، برای مثال ، يک عکس 24 بيتی با اندازه 1024 در 768 پيکسل حجمی حدود 2 مگابايت خواهد داشت . انتقال يک عکس با چنين حجمی بر روی شبکه هايی با سرعت پايين بسيار وقت گير خواهد بود ، در اينجا فشرده سازی مطرح می شود .
از عکس های 8 بيتی نيز می توان برای مخفی کردن اطلاعات استفاده کرد . در عکس هايی که از 8 بيت برای رنگ استفاده می کنند ، مانند GIF ، هر پيکسل معرفی کننده يک بايت است . هر پيکسل به ايندکس جدولی به نام palette که می تواند 256 را مشخص کند اشاره می کند . مقادير پيکسل ها نيز بين 0 تا 255 است . نرم افزاری که عکس را می خواهد نمايش دهد بايد با توجه به جدول رنگ ها و عددی که در هر پيکسل مشخص شده است تصوير را نمايش دهد .
اگر از عکس های 8 بيتی به عنوان پوشاننده استفاده می کنيد ، خيلی از متخصصين steganography توصيه کرده اند که از رنگ خاکستری و مشتقاتش در palette استفاده کنيد ، به خاطر اينکه تغيير رنگ در مشتقات خاکستری آنچنان محسوس نيست بنابراين می توان اطلاعات را درونش مخفی کرد بدون اينکه مشخص شود .
وقتی به عکس های 8 بيتی کار می کنيد بايد به غير از palette به خود عکس نيز توجه کنيد . به طور مشهود ، اگر عکس انتخابی دارای فضاهای زيادی باشد که رنگ آن ثابت است آن عکس برای steganography مناسب نيست زيرا تغييراتی که به خاطر مخفی کردن اطلاعات در آن اعمال می شود در مکان هايی که رنگش ثابت است ديده خواهد شد . بعد از اينکه عکس مناسب انتخاب شد ، نکته بعدی انتخاب تکنيکی است که برای مخفی کردن به کار می بريد .
فشرده سازی عکس ها :
فشرده سازی عکس ها يک راه برای مشکل فايل های حجيم است . دو روش فشرده سازی عکس ها عبارتند از Lossless و lossy . هر دوی اين روش ها عکس را از نظر حجم فشرده تر می کنند ولی آثار متفاوتی بر روی اطلاعات مخفی شده در عکس دارند .
فشرده سازی Lossy ، که بوسيله فايلهای JPEG يا Joint Photographic Experts Group مورد استفاده قرار می گيرد ، فشرده سازی بسيار بالايی دارد ، اما تماميت و خواص عکس اصلی را کاملا ً حفظ نمی کند و اين می تواند اثر منفی بر روی اطلاعات جاسازی شده در عکس داشته باشد . اين به خاطر الگوريتم Lossy است ، که می تواند اطلاعاتی که در عکس مفيد نيست را حذف کند به شرطی که حداکثر کيفيت و تشابه را به عکس اصلی حفظ کند ، از اين رو به آن روش lossy می گويند . از lossy در عکس های true color معمولا ً استفاده می شود و کيفيت و قدرت فشرده سازی بالايی دارد .
روش فشرده سازی Lossless تمامی اطلاعات عکس اصلی را نگهداری می کند . وقتی از اين روش استفاده می شود که اطلاعات اصلی بايد دست نخورده باقی بماند ، و اين دليل آن است که در steganography بيشتر مورد توجه قرار می گيرد . متاسفانه روش فشرده سازی lossless نمی تواند به اندازه روش lossy اطلاعات را فشرده کند . مهمترين مثال های اين گروه فرمت های Compuserve's Gif يا Graphics Interchange Format و Microsoft's BMP يا Bitmap است .
روش های رمز کردن عکس :
اطلاعات به روش های خيلی متفاوتی می توانند در عکس مخفی شوند . بوسيله رمز کردن هر بيت از اطلاعات می توان آن را مستقيما ً در عکس قرار داد . در روش های پيچيده تر می توان اطلاعات را فقط در قسمت هايی از عکس که پيچيدگی بيشتری دارد قرار داد تا توجه کمتری جلب کند . همچنين پيغام می تواند به شکل تصادفی در عکس ِ پوشاننده پراکنده شود .
معمول ترين روش های مخفی کردن اطلاعات در عکس عبارتند از :
· Least Significant Bit insertion يا LSB
Masking and Filtering
الگوريتم ها و transformation ها
هر يک از اينها می تواند بر خيلی از عکس ها به صورت موفقيت آميزی اعمال شود . هر يک از آنها از نظر اهميت دارای رتبه بندی متفاوتی در زمانی است که روی عکس تغييراتی مانند برش ، اندازه و رنگ داده شود .
Least Significant Bit insertion
روش LSB يکی مهمترين و متداول ترين روش ها در steganography در عکس ها می باشد . ولی بسيار آسيب پذير دربرابر حملاتی مانند دستکاری در عکس است .يک تغيير فرمت از Gif يا BMP به يک روش فشرده سازی ديگر مانندlossy که در Jpeg فايلها استفاده می شود می تواند باعث از دست رفتن اطلاعات مخفی شده بشود .
وقتی از LSB در عکس های 24 بيتی استفاده می شود می توان از 3 بايت که هر پيکسل را تشکيل می دهد استفاده کرد . هر تغييری در اين بايت ها هيچ گونه نشانه ای برای چشمان انسان ايجاد نمی کند . برای مثال حرف A می تواند در 3 پيکسل ذخيره شود . فرض کنيد سه پيکسل در عکس 24 بيتی مشخصاتی مانند زير داشته باشند .
(00100111 11101001 11001000) (00100111 11001000 11101001) (11001000 00100111 11101001)
عدد دو دويی برای حرف A معادل 10000011 است . عدد دودويی A را در پيکسل ها از بالا سمت چپ اضافه می کنيم .
(00100111 11101000 11001000) (00100110 11001000 11101000)(11001000 00100111 11101001)
بيت های با اهميت تنها آنهايی هستند که تغيير کرده اند . مهمترين برتری LSB اين است که با تغيير در بيت ها چشم انسان نمی تواند آن تغيير را مشاهده کند .
روش ديگر تغيير کل يکی از اجزای رنگی هر پيکسل است ، يعنی بعد از انتخاب پيکسل مقدار قرمز آن را با مقدار کد اسکی حرف مورد نظر تغيير دهيم ، سپس پيکسل ديگری را انتخاب کنيم و مقدار سبز آن را کد اسکی حرف بعدی جابجا کنيم و در آخر پيکسل ديگری را انتخاب و کد آبی آن را با مقدار اسکی حرف بعدی تغيير می دهيم ، با اين روش هر سه حرف ِ متوالی در 3 پيکسل جاسازی می شود ، هر چند اين روش تغيير قابل محسوس تری نسبت به روش LSB می دهد ولی نتيجه قابل قبولی دارد .
برای انتخاب پيکسل ها نيز می توان از روش های مختلف استفاده کرد ، در يک روش می توان با استفاده از الگوريتم های random ساز و استفاده از seed ی که به عنوان يکی از رمز ها می تواند باشد يک سری پيکسل های ثابتی را استخراج کرد . در اين روش ممکن است تصادفا ً پيکسل انتخابی در جايی باشد که رنگ های اطراف آن ثابت است و در آنجا عکس پيچيدگی ندارد . در چنين وضعيتی هر گونه تغيير در رنگ پيکسل می تواند مشاهده شود ، هر چند در LSB تقريبا ً ديدن تغييرات با چشم انسان غير ممکن است .
روش ديگری که می تواند مورد استفاده قرار گيرد استفاده از الگوريتم هايی است که مکان هايی از عکس که دارای پيچيدگی خاصی است را پيدا کند . برای اين کار می توان بلاک هايی مثلا ً با ابعاد 8 پيکسل در 8 پيکسل را انتخاب کرد و ميانگين رنگ های آن را بدست آورد ، سپس اگر تعداد پيکسل هايی که در آن بلاک رنگش خيلی بيشتر يا کمتر از ميانگين بود زياد شد آن بلاک را به عنوان بلاک پيچيده در نظر می گيرد . سپس در خود اين بلاک ها با استفاده از LSB و همچنين الگوريتم های random ساز رنگ پيکسلی را تغيير داد . با استفاده از اين تکنيک کمتر امکان ديده شدن تغييرات وجود دارد .
نمونه بلاک های پيچيده
وقتی از LSB برای عکس های 8 بيتی استفاده می کنيد بايد دقت بيشتری داشته باشيد زيرا عکس های 8 بيتی قابليت های عکس های 24 بيتی را ندارد . برای انتخاب عکس پوشاننده بايد دقت زيادی داشت تا وقتی پيغام دوم در آن جاسازی شد تغييرات بوجود آمده محسوس نباشد . از استفاده از عکس های معروف ( مانند موناليزا ) بايد پرهيز کرد ، در حقيقت يک عکس از سگ شما می تواند برای اين کار کافی باشد .
وقتی بيتهای LSB را در عکس های 8 بيتی تغيير می دهيد ، نشانه گر که palette اشاره می کند تغيير می يابد . اين مهم است که به ياد داشته باشيد تغيير يک بيت ممکن است رنگ يک پيکسل را از قرمز به آبی در palette تغيير دهد . اين چنين تغييری در عکس کاملا ً مشخص است و روشی که چنين تغييری بدهد اصلا ً قابل قبول نيست . برای همين علت متخصصان مخفی کردن اطلاعات می گويند که در عکس های 8 بيتی از palette خاکستری استفاده کنيد زيرا تغيير رنگ بين طيف خاکستری محسوس نمی باشد و در صورت تغيير انديس هر پيکسل در palette رنگ هايی که جلب نظر بکند ديده نخواهد شد .
Masking and Filtering :
تکنيک های Masking و Filtering اطلاعات را مشابه تکنيک های watermarking در عکس مخفی می کند . بدليل اينکه تکنيک های watermarking بيشتر در عکس ادغام می شود از آنها بدون ترس از دست رفتن بر اثر تغيير يا فشرده سازی عکس می توان استفاده کرد . بوسيله پوشانيدن يا masking يک نور ضعيف که قابل درک است بوسيله يک سيگنال ديگر سعی می کنيم اولی را غير قابل درک کنيم ، در حقيقت ما از ضعف سيستم بينايی انسان در تغييرات بسيار کم در يک محيط محدود و مشخص استفاده می کنيم .
از نظر تکنيکی ، watermarking يک نوع از steganography نيست . steganography اطلاعات را در عکس مخفی می کند ؛ watermarking اطلاعات را توسعه می دهد و آن را به عنوان يکی از خواص عکس پوشاننده تبديل می کند ، اطلاعاتی مانند مالکيت ، اجازه و copyright .
استفاده از تکنيک های Masking در عکسهای jpeg که از lossy استفاده می کنند بسيار مناسب تر از LSB است ، زيرا سازگاری ِ خاصی با فشرده سازی و برش عکس دارد .
Algorithms and Transformation :
بدليل اينکه عکس های JPEG دارای کيفيت بالا و فشرده سازی خوب هستند بسيار مناسب است که از آنها برای استفاده در شبکه ها و اينترنت استفاده کنيم . در حقيقت JPEG متداول ترين فرمت بر روی اينترنت است .
عکس JPEG از Discrete Cosine Transform يا DCT برای فشرده سازی استفاده می کنند . DCT يک تبديل lossy برای فشرده سازی است . بدليل اينکه مقدار کسينوس به دقت ِ کامل محاسبه نمی شود هميشه احتمال خطا وجود دارد و اطلاعاتی که بازيابی می شود با توجه به مقاديری که DCT محاسبه کرده ممکن است با مقدار اوليله تفاوت داشته باشد .
همچنين عکس را می توان توسط تبديل فوريه يا تبديل wavelet پردازش کرد . از روشنايی ِ عکس ها هم می توان استفاده کرد ، سيستم بينايی انسان حساسيت کمی نسبت به تغييرات کم در روشنايی دارد .
بقيه تکنيک ها اطلاعات مخفی شده را کد گزاری می کند . آنها فرض می کنند که اگر بيت های پيغام کشف شد اگر الگوريتم و کلمه رمز وجود نداشته باشد پيغام را نتوان رمزگشايی کرد . با اينکه اين تکنيک ها در محافظت از پيغام در برابر کشف شدن کمک می کند ولی در مقابل دستکاری ِ عکس مصونيت ندارند .