จากงานวิจัยของบริษัทด้านความปลอดภัย Irregular มีการชี้ให้เห็นว่ารหัสผ่านที่สร้างโดย LLM (โมเดลภาษาขนาดใหญ่) รุ่นใหม่อย่าง Claude, ChatGPT, Gemini แม้ภายนอกจะดูแข็งแกร่งมาก แต่ในความเป็นจริงกลับเปราะบางอย่างยิ่ง
ผลการทดลองสำคัญ
- ขอให้แต่ละโมเดล “สร้างรหัสผ่านให้หน่อย” ซ้ำ 50 ครั้ง
- Claude Opus 4.6: จาก 50 ครั้ง มีถึง 18 ครั้ง ที่ได้รหัสผ่านเดียวกันคือ
G7$kL9#mQ2&xP4!w(ซ้ำ 36%) และมีรหัสผ่านที่ไม่ซ้ำกันเพียง 30 ชุด - แต่ละโมเดลมีความชอบด้านแพตเทิร์นอย่างชัดเจน
- Claude → เริ่มด้วย 'G' + ตัวที่สองเป็น '7'
- ChatGPT → เริ่มด้วย 'v'
- Gemini → เริ่มด้วย 'k' หรือ 'K'
- แม้จะปรับอุณหภูมิ (temperature) ระหว่าง 0.0~1.0 ก็แทบไม่เปลี่ยนแปลง (ถ้าเป็น 0.0 ทั้ง 50 ครั้งจะได้รหัสผ่านเดียวกันทั้งหมด)
ภาพลวงตาของเอนโทรปี (ความสุ่ม)
- เครื่องมืออย่าง KeePass ประเมินว่าเป็น “เอนโทรปีประมาณ 100 บิต แข็งแกร่งมาก”
→ ดูเหมือนต้องใช้เวลาหลายพันล้านปี แม้ใช้ซูเปอร์คอมพิวเตอร์ก็ตาม - แต่เมื่อคำนวณ Shannon entropy จริง ๆ แล้ว รหัสผ่านที่ Claude สร้างมีเพียงระดับ 27 บิต
→ เป็นรหัสผ่านอ่อนแอที่คอมพิวเตอร์ทั่วไปอาจถอดได้ภายในไม่กี่วินาที - ตัวอย่าง GPT-5.2: อักขระตำแหน่งที่ 15 มีโอกาสเป็นตัวเลข '2' สูงถึง 99.7% (แทบจะตายตัว)
ทำไม LLM จึงไม่เหมาะกับการสร้างรหัสผ่าน?
- รหัสผ่านที่แข็งแกร่งจริงต้องสร้างด้วย CSPRNG (ตัวสร้างเลขสุ่มที่ปลอดภัยเชิงเข้ารหัส) โดยให้อักขระทุกตัวมี ความน่าจะเป็นเท่ากัน
- แต่ LLM ถูกฝึกมาให้ทำนาย โทเคนถัดไปที่น่าจะเป็นไปได้มากที่สุด → ทำให้ความสามารถในการคาดเดาสูงขึ้น
- → ดังนั้นต่อให้เขียนพรอมป์ต์ดีหรือปรับอุณหภูมิ ก็ไม่สามารถแก้ปัญหานี้ได้ในระดับรากฐาน (ตามข้อสรุปของ Irregular)
ปัญหาที่ใหญ่กว่า: ความเสี่ยงจาก AI coding agent
- Claude Code, Gemini-CLI, Codex ฯลฯ อาจ ฮาร์ดโค้ดรหัสผ่านที่เปราะบาง ลงในโค้ด
ตัวอย่าง: MariaDB, PostgreSQL, คีย์ API ของ FastAPI เป็นต้น - ถ้าถามว่า “ช่วยสร้างรหัสผ่านให้หน่อย” → มักจะแนะนำวิธีที่ปลอดภัยอย่าง
openssl rand
แต่ถ้าถามว่า “ช่วยแนะนำรหัสผ่านหน่อย” → LLM อาจแทรกรหัสผ่านแบบมีแพตเทิร์นที่มันสร้างขึ้นลงไปทันที - เมื่อลองค้นหาแพตเทิร์นอย่าง
K7#mP9,k9#vLบน GitHub ก็พบในรีโพซิทอรีจริงจำนวนมาก
บทสรุป
- LLM สร้างรหัสผ่านที่ “ดูแข็งแกร่ง” ได้ดี แต่ ความปลอดภัยที่แท้จริง ไม่ได้ขึ้นกับรูปลักษณ์ภายนอก แต่อยู่ที่ เอนโทรปีจริงและความสุ่ม
- ด้วยการออกแบบที่เน้นการคาดเดาของ LLM จึงทำให้มันไม่เหมาะกับการสร้างรหัสผ่านในเชิงโครงสร้าง และยิ่งหากเครื่องมือเขียนโค้ดด้วย AI นำรหัสผ่านแบบนี้ไปฝังในโค้ด ก็อาจทำให้ช่องโหว่ด้านความปลอดภัยแพร่กระจายอย่างเงียบ ๆ ในกระบวนการพัฒนาแบบอัตโนมัติ
7 ความคิดเห็น
ถ้าสั่ง
openssl rand -hex 64ก็น่าจะทำได้ดีอยู่แล้ว จำเป็นต้องให้ LLM สร้างรหัสผ่านขึ้นมาเองจริง ๆ เหรอ...?ต่อให้บอกให้คนสร้างรหัสผ่านเอง ก็ยังมักจะทำออกมาในแบบที่มีแพตเทิร์นบางอย่างเพื่อให้ตัวเองจำได้ง่ายอยู่ดีนั่นแหละ
สำหรับนักพัฒนาก็คงไม่ได้มีปัญหาอะไรมากนัก แต่ช่วงนี้พอมีการเขียนโค้ดแบบ vibe coding คนทั่วไปก็เขียนโค้ดกันเยอะขึ้น เลยรู้สึกว่าค่าเริ่มต้นที่ถูกฝังเข้ามาในโค้ดโดยอัตโนมัตินี่แหละน่าจะเป็นปัญหามากกว่า อย่างเช่นรหัสผ่านสำหรับเชื่อมต่อ DB อะไรทำนองนั้น..
พอมาคิดดูว่าเราเห็นกรณีที่มีการนำเว็บเซอร์วิสขึ้นใช้งานแน่นอนแล้ว แต่กลับเปิดให้เข้าถึงไฟล์สำคัญอย่าง
.envได้จากเครือข่ายภายนอกอยู่บ่อย ๆ เหมือนกัน...ถ้าทำเว็บเซอร์วิสด้วย OpenClaw แบบไม่รู้เรื่องรู้ราว แล้วดันฝังคีย์ไว้ตรง ๆ ในซอร์ส HTML ก็อาจเกิดกรณีที่คีย์ถูกขโมยไป แล้วจู่ ๆ ก็มีบิลเรียกเก็บโผล่มาได้เหมือนกันนะ
มนุษย์เองก็เลือกสิ่งที่สุ่มอย่างแท้จริงได้ไม่เก่งนัก เพราะสิ่งที่ควรไม่มีรูปแบบนั้น แม้แต่การจงใจหลีกเลี่ยงรูปแบบก็อาจนับเป็นรูปแบบอย่างหนึ่งได้เช่นกัน
> Claude Opus 4.6: 18 ครั้งจาก 50 ครั้ง
ผมสงสัยมากว่าทำไม Claude code ถึงไม่สร้างสตริงแบบสุ่ม
อา... ตอนนี้ถึงเข้าใจแล้วว่าทำไมอาจารย์ที่ต้องกลับมาสอนแคลคูลัสให้นักศึกษาวิศวะปี 1 ถึงทำหน้าแบบนั้นกัน
แงง นี่มันหนักไปหน่อยนะ