15 ก.ย. 2020 เวลา 03:19 • วิทยาศาสตร์ & เทคโนโลยี
คณิตศาสตร์ของการแฮกพาสเวิร์ด
#การตั้งพาสเวิร์ดให้ปลอดภัย
(เรียบเรียงโดย สัมโมทิก สวิชญาน)
การตั้งพาสเวิร์ดและแฮกพาสเวิร์ดเป็นศาสตร์และศิลป์ที่วิวัฒนาการขับเคี่ยวกันในสงครามระหว่างเจ้าของพาสเวิร์ดกับโจรขโมยพาสเวิร์ด
คำถามคือ เราควรตั้งพาสเวิร์ดอย่างไรไม่ให้ถูกแฮกได้ง่ายๆ?
ถ้าตั้งพาสเวิร์ดยาว 6 ตัว จากตัวอักษรภาษาอังกฤษพิมพ์เล็ก 26 ตัว (เช่น "gphcja") พาสเวิร์ดที่เป็นไปได้ทั้งหมดมี 26⁶ แบบ
แต่ถ้าตั้งพาสเวิร์ดยาว 12 ตัว โดยสามารถใช้ตัวอักษรภาษาอังกฤษพิมพ์เล็กหรือใหญ่ รวมทั้งมีตัวเลขและเครื่องหมายร่วมด้วย (เช่น "2m.sWJ!ejMWP") พาสเวิร์ดที่เป็นไปได้ทั้งหมดจะเพิ่มขึ้นมาก กลายเป็นประมาณ 72¹² แบบ มากกว่าเดิมราว 62 ล้านล้านเท่า
ปริมาณของพาสเวิร์ดที่เป็นไปได้ เป็นสิ่งที่บอกคร่าวๆ ได้ว่า งานของโจรแฮกพาสเวิร์ดจะยากมากน้อยเพียงใด
สมมุติง่ายๆ ว่า (1) ถ้าโจรมีเวลาลองทุกพาสเวิร์ดได้จนกว่าจะผ่าน (2)คอมพิวเตอร์ที่ใช้แฮกมีสมรรถนะสามารถลองได้หนึ่งพันล้านพาสเวิร์ดต่อวินาที และ (3) โจรซื้อคอมพิวเตอร์ใหม่มาเปลี่ยนเรื่อยๆ เพราะคอมพิวเตอร์ในช่วงราคาเท่าๆ กัน มีสมรรถนะเพิ่มขึ้นสองเท่าทุกสองปี (ตามกฎของ Moore)
สิ่งที่จะเกิดก็ขึ้นคือ ถ้าพาสเวิร์ดเราเป็นแนว "gphcja" แค่ไม่ถึงหนึ่งชั่วโมงโจรก็ลองจนเจอพาสเวิร์ดเราได้แล้ว แต่ถ้าพาสเวิร์ดเป็นแนว "2m.sWJ!ejMWP" โจรต้องใช้เวลาประมาณ 29 ปี
แน่นอนว่าโดยปกติแล้ว ระบบคอมพิวเตอร์ที่ปกป้องด้วยพาสเวิร์ด จะไม่ให้ลองพาสเวิร์ดไปเรื่อยๆ โดยอาจจะจำกัดด้วยจำนวนครั้ง หรือด้วยการให้รอเมื่อกรอกพาสเวิร์ดผิด ซึ่งโจรจะต้องหาวิธีก้าวข้ามมาตรการเหล่านี้
ถ้าฐานข้อมูลผู้ใช้และพาสเวิร์ดผ่านรั่วไหลถึงมือโจร จะเกิดอะไรขึ้น?
ระบบที่ดี จะไม่เก็บพาสเวิร์ดผ่านในฐานข้อมูลแบบตรงๆ แต่จะนำไปผ่านการ "แฮช" (hash) ก่อน ซึ่งหมายถึงการนำไปแปลงเป็นลำดับตัวอักษร (ขอเรียกว่า "พาสเวิร์ดจำแลง") ที่ไม่สามารถแปลงกลับมาเป็นพาสเวิร์ดตั้งต้นได้รวดเร็ว ฉะนั้น ถึงข้อมูลรั่ว พาสเวิร์ดดั้งเดิมก็ไม่รั่วด้วย
ทั้งนี้ วิธีการแฮช (hash function) มีให้เลือกมากมาย แล้วแต่ว่าฐานข้อมูลหนึ่งๆ จะใช้แบบไหน ตัวอย่างเช่น ถ้าใช้แฮชฟังก์ชันชื่อ CRC32 มาแปลงพาสเวิร์ดตั้งต้น "gphcja" จะได้พาสเวิร์ดจำแลงเป็น "4c4506f8"
ในเมื่อการแปลงกลับเป็นสิ่งที่ทำได้ช้ามากๆ โจรก็จะไม่แปลงกลับ แต่จะอาศัยการทำรายการพาสเวิร์ดจำแลงไว้ล่วงหน้า สร้างเป็น พจนานุกรม (dictionary attack) เอาไว้เปรียบเทียบย้อนกลับ ยิ่งสร้างล่วงหน้ามาก ก็ยิ่งครอบคลุม แต่ก็ต้องใช้พื้นที่เก็บข้อมูลมากตามไปด้วย **
เช่น ถ้าจะให้ครอบคลุมพาสเวิร์ดยาว 12 ตัวอักษรที่เป็นตัวอักษรภาษาอังกฤษพิมพ์เล็กหรือพิมพ์ใหญ่ พจนานุกรมก็ต้องใหญ่เป็นหลายล้านเทระไบต์ ฉะนั้น ถ้าพาสเวิร์ดเรายิ่งยาวและซับซ้อน ก็จะยิ่งลดโอกาสที่พาสเวิร์ดเราจะไปปรากฏอยู่บนพจนานุกรมเหล่านี้
นอกจากนั้น เราไม่ควรใช้พาสเวิร์ดง่ายๆ
เช่น "password", "123456" หรือ "iloveyou" เพราะเชื่อได้เลยว่ามีคนไปนั่งคำนวณพาสเวิร์ดจำแลงของพาสเวิร์ดตั้งต้นเหล่านี้ภายใต้แฮชฟังก์ชันทุกๆ แบบไว้รอทำ dictionary attack เรียบร้อยแล้ว
อ่านจบแล้ว ถ้ารู้สึกว่าพาสเวิร์ดของตัวเองไม่ยาวพอและยังไม่แปลกพอ* ก็เปลี่ยนโลด
* ถ้าจะให้พาสเวิร์ด ปลอดภัยควรมีทั้งอักษรตัวเล็ก ใหญ่ สัญลักษณ์ และตัวเลข ความยาวรวมอย่างน้อยๆ 10 ตัว (แต่ต้องจำให้ได้นะ555)
** ตารางสายรุ้ง (rainbow table)ช่วยลดขนาดพจนานุกรมของเหล่าแฮกเกอร์ได้
ตารางสายรุ้งเป็นเรื่องที่อธิบายสั้นๆ ได้ยากมาก แต่ยกตัวอย่างคร่าวๆ คือ แทนที่พจนานุกรมจะเก็บพาสเวิร์ดจำแลงทั้งหมด ก็เก็บเฉพาะที่มีลักษณะเฉพาะหนึ่งๆ เท่านั้น (เช่น มี 0 นำหน้ายี่สิบตัว) โดยที่พาสเวิร์ดจำแลงแต่ละตัว เกิดจากการแฮชพาสเวิร์ดตั้งต้นซ้ำๆ หลายๆ รอบ
โฆษณา