แอบมองเธออยู่น่ะจ๊ะ ~ กับมีมแอบดูข้อมูลโดยคุณลุง TU48 สุดน่ารัก
หลังจากที่ พรบ.ไซเบอร์ ผ่านออกมาจนเป็นข่าวที่เราเห็นกัน วันนั้นเองแหละ เราก็เลื่อนเฟสผ่านไป ก็ไปเจอ ภาพแบบประมาณว่า คสช. แอบมองเธออยู่นะจ๊ะะ แต่เธอไม่รู้บ้างเลย อั้ยย แคปปป !! ตันมาเวลลล อ้าวไม่ใช่เหรอ ท่ด ๆๆ
จำไม่ได้แล้วว่าเอามาจากไหน จากเฟสนี่แหละ
เราเลยอยากจะเอาสิ่งที่เรารู้เกี่ยวกับ Computer Network และ Security มาเล่ากันสักหน่อยว่า จริง ๆ แล้วเวลาเราส่งข้อมูลคุยกัน เครื่องมันส่งกันยังไง แล้วการดักจับข้อมูล และดูข้อมูลที่เราเห็นจาก Meme ใน Social Media จริง ๆ แล้วในเชิง Security มันทำได้มั้ย
เน้นนะว่า เราไม่ได้เข้าข้างรัฐบาลหรือใครเลยนะ วันนี้เราเอา Fact มาคุยกันล้วน ๆ และตัวอย่างทั้งหมดล้วนเป็นเหตุการณ์สมมุติทั้งนั้น ถ้ามันดันตรงกับความเป็นจริงก็คือ มันสมมุติโว้ยยยยย
เราส่งข้อมูลผ่านอินเตอร์เน็ตได้อย่างไร ?
เราเคยไปถามตลก ๆ ว่า คิดว่า Internet คืออะไร เราก็มักจะได้คำตอบประมาณว่า มันเป็นอีกมิตินึง ก็ตลกดีนะ เพราะเราแทบไม่รู้เลยว่า ข้อมูลที่เรากด กว่าจะไปถึงปลายทางมันต้องผ่านอะไรบ้าง จริง ๆ แล้วมันไม่ได้ขนาดนั้นเลย ทำให้เราต้องกลับมาทำความเข้าใจกันใหม่นิดนึงว่า Internet คืออะไร และ มันทำงานยังไง
Internet มันคือ เครือข่ายที่เกิดจากเครื่องคอมพิวเตอร์หลาย ๆ ตัวมาเชื่อมต่อกันจนเป็นเครือข่ายขนาดใหญ่มาก ๆ ทำให้จริง ๆ แล้ว การที่มีเครื่องคอมพิวเตอร์ จู่ ๆ มันก็ไม่ได้โผล่มา มันต้องมีที่ตั้งอยู่แน่นอนใช่ม่ะ ไม่ได้อยู่คนละมิติอะไรกันเลย
ดังนั้นเวลาเราส่งข้อมูลกันจริง ๆ เราก็คือ การโยนข้อมูลของเราไปตาม Hop หรือเครื่องคอมพิวเตอร์เครื่องต่าง ๆ ในเครือข่ายนี่แหละ แต่ด้วยความใหญ่โต ทำให้รายละเอียดมันมีเยอะมาก เราลองมายกตัวอย่างง่าย ๆ กัน
เราบอกว่า เราจะส่งข้อมูลจากเราไปที่ Server ของ Google (เรายังไม่นับนะว่า ใน Data Centre เขามีกี่เครื่องอะไรนั่นอีก อันนั้นเป็นเรื่องของเขา เราไม่เกี่ยว) สิ่งที่เรานึกคือ มันก็จะมี เรา แล้วก็เชื่อมต่อไปที่ Internet และ ไปที่ Google ถูกม่ะ
เราลองมองลึกเข้าไปอีก นั่นคือหลังจากที่เราส่งข้อมูลออกไป คิดว่ามันจะไปไหนต่อ มันก็ออกจากกล่องที่มีคนให้มา แล้วก็หายไปเลยใช่มั้ย คำตอบคือ ไม่ใช่ ลองคิดดูก่อนว่าคนที่ให้อีกล่องนั่นเป็นใคร เขาคือ ผู้ให้บริการอินเตอร์เน็ตของเรานั่นเอง หรือภาษาอังกฤษเราเรียกว่า Internet Service Provider (ISP) ถ้านึกไม่ออกอีก ก็คือเราติด Internet กับใครนี่แหละ เช่น AIS และ True อะไรแบบนั้น
ถ้านึกถึง ISP ก็ให้นึกถึงหมู่บ้าน ในหมู่บ้านนึงมันก็มีหลายซอย หลายทำเล บางบ้านก็ใหญ่ บางบ้านก็เล็ก ขึ้นกับเงินที่เราเปย์ให้เจ้าของหมู่บ้าน เออนั่นแหละ
ใน ISP เขาจะมี Infrastructure อยู่แล้วละ อาจจะมีชุมสาย รับข้อมูลแล้วส่งต่อไปเรื่อย ๆ จนถึง Gateway ที่เป็นเหมือนประตูบ้านของ ISP เขาเลยก็ว่าได้ ข้อมูลทุกอย่างที่เราส่งผ่าน ISP ก็จะออกได้ทางนี้เท่านั้น ซึ่งประตูมันก็เหมือนประตูหมู่บ้านเราอะ หมู่บ้านหลังนึงอาจจะออกหลาย ๆ ทางก็ได้นะ เพื่อไม่ให้คนทะลักประตูพังพอดี
เราลองคิดถึงในระดับที่ใหญ่กว่านั้นกันบ้าง เอาแบบระดับประเทศกันไปเลย ข้อมูลเราจะวิ่งออก Gateway ของ ISP เรา ซึ่งไม่รู้นะว่า Gateway ของ ISP เจ้าไหนบ้างที่ดันข้อมูลออกนอกประเทศได้เลย เจ้าไหนใช้ของ CAT เป็นทางออกอยู่ (สามารถเข้าไปดูได้ ที่นี่ เป็นข้อมูลจาก NECTEC)
เอาเป็นว่า ข้อมูลของเราก็จะวิ่งออกนอกประเทศ ผ่านอะไรบ้างก็ไม่รู้ละ เหมือนเรานั่งเครื่องบินอะ ถ้าเราจะไป USA ที่อยู่ตรงข้ามกัน ไม่ใช่ว่า เราจะวาร์ปเป็น Jame T. Kirk ไปถึงปลายทางได้เลย เราก็ต้องวิ่งผ่านเครื่องในประเทศต่าง ๆ ระหว่างทางอยู่ไปเรื่อย ๆ จนไปถึง USA นั่นเอง (เรื่องวิธีการเลือกเส้นทางเราขอไม่พูดถึงนะ ยาวเกิ้น !!) นั่นเป็นสาเหตุที่ทำให้เวลาเราเชื่อมต่อออกไปที่เว็บต่างประเทศถึงช้ากว่า เราเชื่อมต่อในประเทศ
ถ้าพูดถึงในเชิง Physical แล้ว การส่งข้อมูลข้ามประเทศบางประเทศก็อาจจะต้องส่งผ่านเคเบิลในทะเลก็มีเหมือนกัน เหมือนมันจะมีข่าวช่วงนึงมั่งที่สายเคเบิลที่ใช้ส่งข้อมูลใต้ทะเลมีปัญหา ทำให้เรารับส่งข้อมูลออกไปบางประเทศจะช้าลง (เพราะจริง ๆ แล้วเส้นทางที่ใช้วิ่งออกไปนอกประเทศ มันไม่ได้มีทางเดียว แต่พอทางนึงพัง ทางที่เหลือมันก็ต้องรับภาระแทน ทำให้มันช้าลง เหมือนกับถนนโดนปิดที่คนก็จะย้ายไปใช้ถนนอีกเส้นที่ใกล้เคียงกันนั่นเอง) นั่นแหละ คือข้อพิสูจน์ได้ดีเลยว่า ข้อมูลมันก็ต้องเดินทางเหมือนเรานั่นแหละ ไม่ได้วาร์ปโดยคุณซูลูสักหน่อย
ถึงมันจะวาร์ปไม่ได้ แต่ด้วยเทคโนโลยีการส่งข้อมูลในปัจจุบัน ใช้พวก Fibre Optics ที่เป็นการใช้แสงในการส่ง อย่างที่เรารู้กันว่าแสงเดินทางด้วยความเร็ว 3*10E8 เมตรต่อวินาที เลยทำให้การเชื่อมต่อ มันก็ไม่ได้ช้าขนาดเรานั่งเครื่องบินอะไรแบบนั้น ก็เร็ว แต่ถ้าลองไปถามคนที่เล่นเกมออนไลน์ก็จะรู้ว่า เราคุยกันในระดับ ms กันเลยทีเดียว ทำให้เวลาเล่นเกมมันก็อาจจะมีด่าพ่องได้ เมื่อเราเล่น Server ที่อยู่ในต่างประเทศ โดยเฉพาะประเทศที่ไกลจากเรามาก ๆ อย่างเช่น USA
จะเห็นได้ว่า โลกของอินเตอร์เน็ต เป็นโลกที่ซับซ้อนกว่าที่เราคิด แต่ทั้งหมด มันก็เกิดจากเครื่องคอมพิวเตอร์มาต่อกันจนเป็นเครือข่ายขนาดใหญ่มาก ๆ
เราสามารถดักข้อมูลที่ส่งผ่านได้หรือไม่ ?
หลังจากที่เรารู้กันแล้ว ว่าเวลาเราจะส่งข้อมูล ข้อมูลของเราจะวิ่งผ่านที่ไหนบ้าง คำถามต่อไปที่หลาย ๆ คนน่าจะถามกันคือ แล้วเราสามารถดักข้อมูลระหว่างทางได้มั้ย ?
คำตอบคือ ได้ !! นอกจากจะดักได้แล้ว ยังมีการโจมตีที่สามารถเปลี่ยนแปลงข้อมูลที่ส่ง หรือจะสับรางมาก็ยังได้ ยัน ปลอมเป็นตัวเรา แล้วส่งข้อมูลได้อีกด้วยนะ การโจมตีพวกนี้เราเรียกว่า Man-in-the-middle attack (MITM) เราลองค่อย ๆ มาดูทีละเหตุการณ์กัน
เอาอันแรก การดักจับข้อมูล (Data Sniffing) หลักการก็คือ มีคนมาอยู่ตรงกลางระหว่างเรากับปลายทางแล้วแอบดูข้อมูล ที่ต้นทางและปลายทางคุยกัน ซึ่งอาจจะดักจากเครื่องที่เป็น Node ที่ใช้ส่งผ่านก็ได้ ยกตัวอย่างเช่น Bob จะคุยกับ Alice (ตัวอย่าง Classic เวอร์) ก็จะส่งข้อมูลไปกลับกันใช่ม่ะ เอาเป็น Bob ส่งข้อความว่า Som___ J___ is back!! (Keyword สมมุติเท่านั้น) ละกัน ถ้ามีใครมาดักมันก็จะไม่มีอะไรเกิดขึ้น
ถ้าเกิดมีนาย P เข้ามาดักข้อมูล ไม่ว่าจะจากที่ไหนที่ข้อมูลวิ่งผ่านไม่ว่าจะเป็น ISP หรืออะไรก็ตาม นาย P ก็จะได้เห็นข้อมูลที่ Bob ส่งหา Alice นั่นเอง
ตัวอย่างต่อไป เอาให้พีคกว่านั้นอีก ว่านาย P สามารถปลอมเป็น Bob เพื่อส่งข้อมูลให้กับ Alice ก็ย่อมได้เช่นกัน เช่น ! Bob ยังไม่ได้ส่งอะไรเลยนะ แต่ Alice ได้รับข้อความด่าพร่องส์จาก Bob มา ฝั่ง Alice ก็จะหัวร้อนและด่า Bob กลับไป พอ Bob ได้ข้อความก็จะหัวร้อนอีกประมาณว่า ด่าไรตรู ยังไม่ได้ทำอะไรเลยนะ สรุปคือ นาย P ก็คือตัวสร้างความร้าวฉานให้กับทั้ง Alice และ Bob นั่นเอง
นี่แหละเป็นตัวอย่างของ MITM ที่เราอาจจะเจอได้ จริง ๆ มันมีอะไรที่พิดารกว่านี้เยอะเลย ก็ลองไปหาอ่านดูได้นะ
เราจะป้องกันการแอบดูจากพวกถ้ำมองได้อย่างไร ?
ทีนี้เรามาดู Countermeasure กันบ้าง ว่าถ้าเราอยากจะส่งข้อมูลโดยที่ให้ไม่มีใครรู้ว่าเราส่งข้อมูลอะไรกัน เราอาจจะจัดการกับพวกชอบถ้ำมองนี่ยังไงดี
เราก็ไม่อาจห้ามพวกถ้ำมอง ไม่ให้ดักข้อมูลของเราได้ ดังนั้น วิธีที่ง่ายที่สุดก็คือ ส่งข้อมูลให้เราและปลายทางเข้าใจโดยที่ไม่ให้พวกถ้ำมองเข้าใจได้ อาจจะเป็นการใช้ Keyword บางอย่างที่เข้าใจกัน หรือจะเล่น ฤาษีแปลงสาร กวนประสาทแก๊งค์ถ้ำมองก็เอาที่สบายใจ ฮ่า ๆ
โดยหลักกการที่เรามักจะใช้กันคือ การเข้ารหัส (Encryption) ส่วนการเข้ารหัสแบบที่เราเอามาเล่าในวันนี้เรียกว่า Asymmetric Encryption เราเคยเขียนหลักการของมันไว้หน่อยละในเรื่อง HTTPS, SSL และ TLS ของง่าย ๆ ที่ทำให้ชีวิตปลอดภัย แต่ถ้าใครที่ยังไม่ได้อ่านเราขอสรุปหลักการคร่าว ๆ ละกัน นั่นคือ ในการทำงานของแต่ละฝั่ง จะมีกุญแจอยู่ 2 ดอกด้วยกัน ดอกนึงเรียก Public Key อีกดอกเรียก Private Key
ซึ่ง Public Key จะเป็นกุญแจที่ใช้ในการเข้ารหัสข้อมูลเท่านั้น ไม่สามารถถอดกลับมาเป็นข้อมูลได้ และ Private Key สามารถที่จะถอดรหัสข้อมูลได้ ดังนั้น กุญแจดอกที่เราควรจะเก็บไว้เองคือ Private Key ตามชื่อนั่นเอง ส่วน Public Key สามารถเอาไปให้ใครก็ได้ที่ต้องการจะส่งข้อมูลให้เรา
เราจะใช้ข้อดีของการแยกกุญแจตรงนี้แหละ ในการเข้ารหัสข้อมูลกัน นึกถึงเวลา Bob คุยกับ Alice อีกครั้ง แต่รอบนี้เราเปลี่ยนนิดนึง เราให้ทั้งคู่สร้างกุญแจทั้ง 2 ดอกออกมาทั้ง 2 ฝั่ง ดังนั้น ในตัวอย่างนี้ เราจะมีกุญแจทั้งหมด 4 ดอก นั่นคือ
- Public Key ของ Alice
- Public Key ของ Bob
- Private Key ของ Alice
- Private Key ของ Bob
อย่าลืมนะว่า Private Key เราห้ามให้ใครเด็ดขาด การที่ Bob จะพูดกับ Alice ได้คือ Bob จะต้องมี Public Key ของ Alice เพื่อที่ Bob จะได้เข้ารหัสข้อความด้วยกุญแจจาก Alice เพื่อให้มั่นใจว่า Alice จะเป็นคนเดียวที่อ่านข้อมูลนี้ได้
และกลับกันถ้า Alice จะคุยกับ Bob ก็ Alice จะต้องมี Public Key ของ Bob ก่อนที่จะส่งข้อมูลไปให้ Bob ได้ อาจจะดูงง ๆ เนอะ ฮ่า ๆ
ตรงนี้สำคัญ การอ่าน เราจะใช้ Private Key ที่ถูกเก็บไว้ที่ปลายทางเท่านั้นในการถอดรหัสกลับเป็นข้อความต้นฉบับได้
ดังนั้นเวลาใน Messenging App ที่รองรับการเข้ารหัสแบบนี้ ใน Server ก็จะเก็บ User คู่กับ Public Key ของคนนั้น ๆ เพื่อให้เวลาเพิ่มเพื่อน หรือ เริ่มการสนทนา จะได้ทำการโหลด Public Key ของทั้ง 2 ฝั่งออกมาได้เลย พร้อมกับ Conversation ที่เข้ารหัสไว้ นั่นส่งผลให้ เจ้าของ App เองก็ไม่มีทางอ่านข้อความที่ผู้ใช้คุยกันได้เลย เพราะเขาถือไว้เพียง Public Key ที่ใช้เข้ารหัสเท่านั้น (เราขอไม่พูดถึงวิธีถ้าเราแชทเป็นกลุ่มนะ)
แน่นอนว่า การถือ Public Key อยู่ เราแทบจะไม่สามารถสร้าง Private Key ออกมาได้ง่าย ๆ เลยนับว่าเป็นคุณสมบัตินึงของการสร้าง Public Key เลยก็ว่าได้ ทำให้เวลาเราคุยกัน แล้วถ้ามีใครมาขอดูข้อมูลที่ผู้ให้บริการ App ที่เราใช้ละก็ สิ่งที่เขาจะให้กับคนขอไปก็คือ #Q$%#$!@$!#$@$^@%$# อะไรก็ไม่รู้
เราลองสร้าง Key ขึ้นมาชุดนึง และลองเข้ารหัสดู ก็จะได้ข้อความออกมาแบบนี้
Salted__ù^^^Fëp^E*fT^\ò^L<88>ð÷¯zÏÿX[×)û
ในตัวอย่างนี้เราใช้การเข้ารหัสง่าย ๆ อย่าง RSA เพื่อสร้าง Public Key และ Private Key ของตัวเองขึ้นมา แล้วทำการเข้ารหัสข้อความที่ว่า Hello World ด้วย Public Key ที่พึ่งสร้างไป
ดูออกม่ะว่า ต้นฉบับคืออะไร ได้ก็เก่งละ โธ่ ~~ นั่นแหละ ซึ่งข้อความต้นฉบับคือคำว่า Hello World แค่นั้นเลย
อาจจะเกิดคำถามว่า แล้วถ้า Private Key หายไป แล้วจะทำยังไงต่อ คำตอบคือ ก็ ชิบหาย ไง เพราะข้อความอันก่อน ๆ รวมถึงปัจุบันที่ใช้ Public Key ที่สร้างออกมาคู่กัน จะอ่านไม่ได้อีกเลย ดังนั้น ข้อควรระวังคือ เราควรสำรอง Private Key ของเราเก็บไว้เสมอ เผื่อเกิดอะไรขึ้น หรือถ้าต้องการความเป็นส่วนตัวมาก ๆ ก็แนะนำให้สร้าง Public Key และ Private Key ในแต่ละครั้งที่เราคุยกันไปเลย พอคุยเสร็จก็ลบ พอจะคุยใหม่ก็สร้างใหม่
เพราะเครื่อง 1 เครื่องสามารถมีกี่ Key ก็ได้นะ มันไม่ได้จำกัดว่าเครื่องนึงมีได้กี่ Key เพราะ Key จริง ๆ แล้วมันก็คือไฟล์นั่นเอง
หรือถ้าเราอยากให้มันปลอดภัยกว่านั้นอีก เมื่อเราลบ Private Key ที่เป็นไฟล์ไปแล้ว การกู้คืนยังสามารถทำได้ ถ้าต้องการให้มันหายไปจริง ๆ เราแนะนำให้ทำลายข้อมูลซะ โดยเราทำได้ 2 วิธีใหญ่ ๆ คือ Secure Delete และ การทำลายที่เก็บข้อมูลไปเลยเป็นวิธีที่มั่นใจได้ แต่มันก็โหดไปหน่อยนะฮ่า ๆ
สำหรับเรื่องของการปลอมตัวแล้วมาแทรกกลางที่เราเล่าไปใน MITM จริง ๆ มันสามารถจัดการได้ด้วยการเข้ารหัสแบบนี้ด้วยนะ มันคือการทำ Digital Signature แนบลงไปเป็นการบอกว่า ข้อความนั้นมาจากเราจริง ๆ เหมือนกับ Signature ที่เราเห็นกันในกระดาษเลย แค่กลายร่างจากลายเซ็นต์กลายเป็นการคำนวณทางคณิตศาสตร์เอง
เมื่อก่อนตอนเราอ่านพวกเรื่อง Cryptography ครั้งแรกนี่แหยงมาก แต่ก็ต้องยอมเพราะมันต้องเรียน เพราะเกลียดคณิตศาสตร์เข้าไส้ แต่พออ่านไป เห้ย มันคือความสวยงามของคณิตศาสตร์มากเลยนะ อย่างเรื่อง Asymmetric Encryption ที่เรามีกุญแจ 2 ดอกแล้ว เราสามารถสร้างวิธีที่ทำให้ Public Key สามารถเข้ารหัสได้ แต่ถอดรหัสไม่ได้เนี่ย นอกเรื่องไปไกลละ.....
App ในปัจจุบัน มันทำให้ชีวิตเราง่ายกว่านั้นเยอะแล้ว เพราะเราไม่ต้องมานั่งดูแล้วว่า อันไหนคือ Public Key กับอะไรคือ Private Key เพราะเขาจัดการให้เราหมดแล้ว หน้าที่ของ User คือใช้มันอย่างเดียว แต่เราเองในฐานะของ Superuser มันก็จำเป็นที่จะต้องรู้เรื่องพวกนี้เนอะ
สรุปแล้วรัฐบาลสามารถแอบดูข้อมูลของเราแบบในภาพได้มั้ย
คำตอบคือ ได้ และ ไม่ได้ ถ้าเราตอบในเชิง Technical ถ้า App นั้น ๆ ใช้การเข้ารหัสแบบ End-to-End จะส่งผลให้ คนที่ถอดรหัสได้จะมีเพียงเราและเราเท่านั้น เจ้าของ App จะไม่สามารถถอดออกมาดูได้ (ถ้ามันเป็น End-to-End จริง ๆ อะนะ แบบไม่ได้ย้อมแมวมี Master Key ไม่ก็ โดนแอบเก็บ Private Key อะไรแบบนี้ เราเชื่อว่า ถ้าาาาา บริษัทเจ้าของมี Ehtics ที่มากพอ เขาก็ไม่ทำมั้งงงงงงงงงงง) นั่นแปลว่า ถ้าคุณ_ง หรือ ไม่ว่าใครหน้าไหน มาขอข้อมูลการสนทนาไป ก็จะได้แต่ #%@$#%$#%@$# ไป ที่กว่าจะถอดได้ ก็เอาจริง ๆ น่าจะแก่ตายกันหมดแล้วละ หรือถ้าจะดักข้อมูลก็ย่อมได้ไปเพียงข้อมูลที่เข้ารหัสแล้วเช่นกัน เพราะข้อมูลถูกเข้าและถอดรหัสที่ ต้นทางและปลายทางเท่านั้น ไม่มีการส่งข้อมูลที่ไม่ได้รับการเข้ารหัสในเครือข่ายแน่นอน
แต่ไม่ว่าเราจะคุยกันแต่เรื่องดี ๆ อยู่ในศีลธรรมอันดีของประเทศไทยเมืองพุทธ? หรือเรื่องฉาวโฉ่..แต_ อะไรก็ตาม การเปิดเผยมันซะทุกอย่างมันก็ไม่ใช่เรื่องเท่าไหร่ใช่ม่ะ คนเรามันก็มีหลายโลกและโรคเหมือนกัน (บางคนอาจจะมี 2 บ้าง 3 บ้าง ก็แล้วแต่นะ 😂🤣) ดังนั้นเรื่องอิสรภาพในการสื่อสาร และความเป็นส่วนตัว เป็นสิทธิที่ทุกคนควรพึงมีและตระหนักรู้ในยุคที่เทคโนโลยีพัฒนาทำให้เราใช้สื่อและเทคโนโลยีในยุคปัจจุบันได้อย่างเท่าทันและมีประสิทธิภาพสูงสุดนั่นเอง