RSS

วันเสาร์ที่ 1 มกราคม พ.ศ. 2554

ความลับที่ถูกซ่อนในภาพ Steganography


เนื่องมากจากการดู ซีรี่เรื่อง Numb3rs Season ที่ 2 ตอนที่ 8 "In Plain Sight"
เป็นการไล่ล่าตัวคนร้ายเป็นพ่อค้ายาเสพติดระดับตัวพ่อ ที่ฉลาด มีความรู้เรื่องคณิตศาสตร์ และเทคโนโลยีสูง และหลักฐานที่ได้มาคือภาพถ่าย บ้านจากคอมพิวเตอร์คนร้าย ชาร์ลี จึงคิดจะใช้ภาพนี้ ดึงเอารายละเอียดของภาพบริเวณกระจกหน้าต่าง เพื่อมองหาเงาสะท้อนของคนร้าย ภาพบ้านที่ออกมาเต็มไปด้วยสัญญาณรบกวนที่เรียกว่า Noise ชาร์ลี ก็เลยใช้ความรู้คณิตศาสตร์ในการกำจัด แต่แล้ว เขาก็พบว่า Noise นี้ไม่เกิดตามธรรมชาติ แต่เป็นการใช้ความรู้คณิตศาสตร์ชั้นสูงในการตกแต่งสัญญาณรบกวนนี้ ความลับบางอย่างซ่อนอยู่หลังภาพนี้ ในรูปสัญญาณรบกวน Charlie จึงพยายามถอดรหัสในที่สุดผลก็ออกมา.... สิ่งที่ตกแต่งภาพบ้านนั้นอยู่คือ รูปภาพเด็กผู้หญิงเปลือยกายกับตุ๊กตาหมี





FBI ตรงไปที่เซฟเฮ้าส์ของเจ้าพ่อยาเสพติด
 หลักจากตามรอยหาเบาะแสกันมาแรมปี FBI ก็ทำการบุกเข้าทำลายโรงงานยาและ บุกเข้าจับกุมพ่อค้ายาถึงที่บ้านพัก ด้วยกำลังคนเจ้าหน้าที่ FBI พังประตูบ้านเข้าไป แต่ประตูบ้านนั้นกลับระเบิดใส่หน้าทำเอาเจ้าหน้าที่ FBI เสียชีวิตไปหลายคน โดยตัวคนร้ายหายไปอย่างไร้ร่องรอยในซากบ้านที่ถูกไฟไหม้ เหมือน กับเสียคนไปโดยไม่ได้อะไรเลย เจ้าพ่อค้ายาที่ไม่รู้แม้แต่ชื่อหรือหน้าตา กำลังจะหนีไปเม็กซิโก เบาะแสสุดท้ายที่จะตามไปถึงตัวได้คือคอมพิวเตอร์ที่มันขนหนีไปด้วยไม่ทัน




Chalie กำลังคิด ด้านหลังคือภาพบ้าน

 แต่คอมพิวเตอร์นั้นถูกความร้อนจากไฟทำลายข้อมูลใน ฮาร์ดดิสก์ไปแล้ว ถึงอย่างนั้นก็ไม่ใช่ปัญหาใหญ่นัก เพราะมีความรู้เรื่องการกู้ข้อมูลอยู่แล้ว และสิ่งแรกที่กู้ออกมาได้ก็คือภาพวิวบ้าน และสิ่งที่ชาร์ลีจะทำคือการพยายามเอารายละเอียดภาพสะท้อนของคนถ่ายในเงากระจกบ้านออกมาด้วยการใช้อิลลูมิเนชั่นอัลกอริทึม แต่สิ่งที่เขาพบจากการคำนวณนั้นทำให้เรื่องซับซ้อนยิ่งขึ้น เมื่อภาพวิวบ้านนั้นเป็นภาพที่ซ่อน ภาพเด็กผู้หญิงเปลือยกายอยู่กับตุ๊กตาหมี



ภาพที่ถูกซ่อนไว้
มันหมายความว่าอย่างไงกันนี้..ทำไมถึงมีภาพโป๊ อยู่ในนั้นได้ละ แล้วคุณละคิดว่าทำไม
พิมพ์ M 1. ถ้าคุณคิดว่า พ่อค้ายาจอมโหดจริงๆแล้วแอบลามกแต่หวงไม่อยากแบ่งใคร เลยซ่อนรูปโป๊ไว้ในภาพอีกภาพ
พิมพ์ M 2. ถ้าคุณคิดว่า เด็กคนนี้คือพ่อค้ายาในอดีต ก่อนแปลงเพศกับตุ๊กตาหมีตัวโปรดและอยากรำลึกความหลัง เลยซ่อนภาพเก็บไว้ดู
แล้วไม่ต้องส่ง SMS หรืออะไรไปที่ไหนทั้งนั้น และไม่เฉลยด้วย ให้ไปติดตามกันเอง ฮ่าๆๆๆๆ





เขาบอกให้ปิดภาพไม่ใช่ปิด Blog ผมนะ





สิ่งที่ผมสนใจคือการซ่อนข้อมูลไว้ในภาพหรือ Steganography  ที่เป็นที่สนใจกันมากในช่วงสงครามโลกครั้งที่สองและหลังจากนั้น (อยากรู้ว่ามันสำคัญขนาดไหนลองไปดู A beautiful mind 2001 ดิ ดูแล้วซาบซึ้ง) พูดกันตามตรงบางครั้งผมก็คิดว่าหนังเรื่องนี้เกินความจริงไปหลายครั้ง รวมไปจนถึงตรงนี้ด้วย เนื่องจากภาพถ่ายสีนั้นจะต้องประกอบจากสีสามสีในแต่ละพิกเซล ซึ่งเป็นอะไรที่มีขนาดใหญ่มากสำหรับการจะนำไปซ่อน เหมือนกับการเอาของไปใส่กล่องที่มีของอยู่เต็มแล้วโดยไม่ให้มีใครผิดสังเกต มันเป็นเรื่องที่ยากมากกกกก
แต่หลังจากการกลับไปนั่งคิดนอนคิดอยู่นานผมก็นึกวิธีที่พอจะทำให้เราซ้อนภาพ ที่เป็นขาวดำไว้ในภาพ รูปถ่ายภาพสี โดยไม่มีใครสังเกตความต่างได้วิธีหนึ่ง
เนื่องจากภาพขาวดำเป็นภาพที่แต่ละ pixel มีค่าความเข้มแสงแค่ค่าเดียว เราจึงสามารถแบ่งใส่ไว้ Pixel ของภาพสีที่มีช่องถึงสามช่องให้เก็บค่า โดยการเก็บค่านี้จะขอใช้รูปแบบง่ายที่สุดนั้นคือแบบ RGB หรือ Red Blue Green แต่ละ Pixel มีค่าความเข้มสีสามสี ซึ่งจะใช้เลข 256 ตัว คือ 0-255 ในการระบุค่า ทำให้เราสามารถมองค่าความเข้มแสงทุกค่าออกเป็น เลขฐานสอง หรือ เลข 0 กับ 1 เรียงกัน 8 ตัว เราจึงแบ่งตัวเลข 8 ตัว ของภาพที่ต้องการซ่อนให้เป็น สามส่วน ในคือ 3 หลักหน้า 2 หลักกลาง และ 3 หลักท้าย แล้วเอาเลขพวกนั้นไปเปลี่ยนกับเลขท้ายของภาพสีที่ต้องการซ่อนด้วยตัวเลขสามหลักท้าย เมื่อตีเป็นค่าก็จะได้ 8 ค่า นั้นคือค่าจะต่างไปแค่ จากเดิมไม่เกิน 8 ระดับ จาก 255 เพียงพอที่ต่อคนเราจะไม่เห็นความผิดสังเกต
วิธีการเปลียนภาพ เฉพาะพิกเซลที่ i,j หนึ่งใดๆ

วิธีการแบบเป็น code
U[i,j] คือค่าพิกเซลลภาพขาวดำตำแหน่ง i,j และ R,B,G ก็คือค่าของสีแดง น้ำเงินและเขียวตามลำดับ mod คือการหารแบบเอาเศษหรือ หารแล้วได้เศษอะไร div คือการหารแบบปัดเศษ เช่น 7 div 3 ได้ 2

ทั้งนี้เราสามารถเอาภาพไหนมาสลับเปลี่ยนตำแหน่ง เอาสามหลักท้ายไว้สีน้ำเงินบ้างเอา สองหลักกลางไว้สีแดงบ้างทำให้เราสามารถ เปลี่ยนวิธีการนี้ได้ออกเป็น 3! = 6 วิธีการ
เมื่อเราซ่อนแล้วต่อไปก็คือการถอดรหัสคับเราต้องเริ่มด้วยภาพที่ถูกเข้าหรัสซ่อนความลับเอาไว้ นำมันมาพิจารณาทีละจุดพิกเซล แล้วเอาก็ดึงเอาหลักท้ายของภาพมาต่อกันให้เป็นตามภาพที่เข้ารหัสไว้ เรียงกันเสร็จเป็นรูปภาพขาวดำขึ้นมา ภาพที่ถูกซ่อนก็จะเผยตัวตน ออกมา ฮ่าๆๆๆๆ

การถอดหรัสภาพที่ถูกซ้อนไว้

 ทุกสิ่งอย่างไม่ว่าจะอะไรคับ เป็นธรรมดาพูดง่ายกว่าทำคับเรามีแค่แนวคิด จะรู้ได้ไงว่ามันจะได้ผลออกมาจริงๆ ตามที่เราคิดไว้ คำตอบก็คือ มันต้องลองเอามาทำดูคับ ผมก็เลยลองเขียนโปรแกรมมาให้ดู วิธีการเข้าหรัสแบบง่ายๆ มาทดสอบความคิดเรากันครับ
 โปรแกรมก็เป็นโปรแกรมเขียนกันง่ายๆ ไม่ต้องเอาอะไรมาก วิธีการใช้งานคือ กด File > Open แล้วเลือกภาพสีที่ต้องการจะเข้ารหัส ตามด้วยภาพขาวดำที่จะถูกซ่อน ตามนั้นผลที่ได้ก็จะออกมา ภาพต้นทั้งจะแสดงทางซ้ายส่วนทางขวาจะเป็นภาพที่ถูกเข้ารหัส ซ่อนความลับของเราไว้ มาดูผลกันดีกว่า
ได้ออกมาเป็น

ภาพที่ออกมาดูหน้าตาแนบเนียนดูดีไม่มีใครสงสัย แต่มันก็พอจะมีปัญหาอยู่บ้างนะคับ


ถ้าเราเลือกภาพที่มีองค์ประกอบที่ง่ายเกินไปอันได้แก่ภาพที่ความสีไม่หลากหลาย วาดง่ายๆ เราก็จะ พอกับความไม่เนียนเท่าไรเช่น





ผลที่ได้

สังเกตดีๆคับเราก็จะเห็นภาพใบหน้าสวมแว่นจางๆ อยู่ตรงท้องฟ้านั้นคือความไม่เนียนที่เกิดขึ้นคับ


เมื่อมีรหัสแล้วต่อไปคือการถอดรหัสภาพคับ ถ้าไม่มีก็ไร้ความหมายไม่รู้จะซ่อนไปทำไม ถ้าเราซ่อนแล้วเรารู้แค่คนเดียว ผมก็เขียนโปรแกรมอีกโปรแกรมหนึ่งมาหลักการก็อย่างที่บอกไปข้างต้นแล้วนะคับ ผลที่ได้ออกมาก็คือโปรแกรมง่ายๆอีกละคับ เปิดภาพที่ได้เข้ารหัสไว้ออกมันก็จะทำการถอดรหัสให้ออกมาเป็นแบบนี้คับ


แต่แล้วปัญหาก็มีตามมาคับเมื่อครั้งแรกที่ผมยังไม่ค่อยรู้เรื่องอะไรผมก็แปลงภาพแล้ว Save เป็น JPEG,JPG หรือ เจเพ็ก  ผลคือมันทำการแปลงภาพที่ผมแปลงมาอีกที รหัสที่ได้สลายหายไป แจ้เป็ด เล่นฉันแล้วไง แจ้เป็ดเอารหัสของฉ้าานคืนมา สุดท้ายก็คือเปลี่ยนไป save เป็น BMP ง่ายๆ สบายใจหายห่วงคับ



เสร็จจากนี้ผมก็มีโปรแกรมเข้ารหัสซ่อนความลับไว้ในภาพแล้วคับ ต่อไปก็อาจจะเอาสมการอะไรใหม่ๆ ที่ยังไม่ต้องการให้ใครรู้ซ่อนไว้หลังภาพ หรือไม่ก็ถ่ายรูปจดหมายรักซ้อนไว้หลังภาพแล้วส่ง  e-mail ไปหาคนที่ชอบสารภาพรักซะ (เค้าคงจะงงไปว่าแกทำอะไรของแก) แต่เราก็ได้บอกไปจบหมดแล้ว ฮ่าๆๆๆๆๆ

0 ความคิดเห็น:

แสดงความคิดเห็น

Related Posts Plugin for WordPress, Blogger...

บทความที่ได้รับความนิยม