RFID + Arduino ปลดล็อกเครื่องคอมพิวเตอร์

ก่อนหน้านี้ประมาณ 3 – 4 วันก่อน มีไอเดียเกี่ยวกับความปลดภัยผุดขึ้นมา เป็นไอเดียการปลดล็อกเครื่องคอมพิวเตอร์สำหรับห้องปฎิบัติการคอมพิวเตอร์ ในสถานศึกษา แนะคิดคือการป้องกันไม่ให้ใครก็ได้เข้ามาใช้งานเครื่อง PC หากไม่ใช่คนที่มีสิทธิ์จริง ๆ หนึ่งในสิ่งของที่นักเรียน นักศึกษา ต้องมี คือบัตรประจำตัวนักศึกษา และในตอนนี้บัตรประจำตัวนักศึกษาส่วนใหญ่ก็เป็นแบบ RFID แล้วด้วย เหมาะสำหรับนำมาใช้งานเกี่ยวกับการยืนยันตัวตนอยู่แล้ว ผมจึงได้เลือกใช้บัตร RFID มาควบคุมการเข้าใช้งานคอมพิวเตอร์ (เป็นตัวอย่างเพื่อนำไปประยุกต์ แก้ไขให้ดียิ่งขึ้น)

การค้นหา COM Port ที่ต้องเชื่อมต่ออัตโนมัติ

จากเดิมหากต้องการสื่อสารกับบอร์ด Arduino จะต้องทำการเลือก COM Port เสียก่อน แต่ด้วยวิธีการข้างล่างนี้ ก็จะทำให้โปรแกรมที่เราเขียน สามารถเลือกเชื่อมต่อ COM Port ที่ถูกต้องโดยอัตโนมัติ

หลักการก็คือ ที่อุปกรณ์และโปรแกรมบนเครื่องคอมพิวเตอร์ได้มีการตกลงรูปแบบการถาม – ตอบกันไว้แล้ว ตัวอย่างโค้ดที่ผมใช้คือหากคอมพิวเตอร์ส่งข้อความไปว่า RF? แล้วมีการตอบ Y กลับมา แสดงว่า COM Port นี้คือพอร์ตที่ถูกต้อง ที่จะต้องเชื่อมต่อด้วย

โค้ดด้านล่างนี้เป็นโค้ดส่วนของการตรวจหา COM Port ของอุปกรณ์

เก็บผู้ใช้ลงฐานข้อมูล

เดิมทีผมคิดว่าจะเก็บเป็น JSON แต่ว่าใน Autoit ไม่ค่อยรองรับซักเท่าไร อีกทั้งยังจัดการยากอีกด้วย เลยไปลองใช้ SQLlite แต่ก็พบว่ามันมีกับหากับไฟล์ DLL ผมเลยย้ายไปใช้ฐานข้อมูล Access แทน ถึงจะมีความปลดภัยที่ค่อนข้างต้ำ แต่หากมีการจัดการข้อมูล มีการเข้ารหัสที่ดี ก็น่าจะทำให้ได้ข้อมูลที่แท้จริงจากฐานข้อมูลได้ยาก

ตัวอย่างความปลดภัยอันดับต้น ๆ ของโปรแกรมคือ ห้ามปล่อยให้รหัสผ่านเข้าตั้งค่าหลุดได้เด็ดขาด ดังนั้นผมนึงใช้วิธีเอารหัสผ่านมา MD5 เมื่อเวลากรอกรหัสผ่านเข้ามาก็เอาไป MD5 แล้วเทียบกันว่าตรงหรือไม่

วิธีนี้นักทำเว็บไซต์จะรู้จักดี ถึงแม้ฐานข้อมูล MySQL จะถูกแฮกเอาไปได้ยาก และหากมีไฟล์วอลจะทำได้ยากมาก แต่หากฐานข้อมูลหลุดออกไปแล้ว จะเจอการป้องกันอีกชั้นโดยข้อมูลที่ได้ไปมาการเข้ารหัสไว้ทั้งหมด โดยเฉพาะรหัสผ่าน หากใช้วิธีการเข้ารหัสแบบทางเดียว (เข้ารหัสได้ แต่ถอดรหัสไม่ได้) ก็จะทำให้โอกาศที่รหัสผ่านจะรั่วไปได้มีน้อย ถึงน้อยมาก ๆ (แต่อย่าทำวิธีการเข้ารหัสหลุดไปด้วยก็พอ)

ตัวอย่างหน้าตาโปรแกรม

16-8-2559 7-50-30

On GitHub

โค้ดทั้งหมดท่านสามารถดาว์นโหลดได้ที่ https://github.com/ioxhop/Arduino-RFID-Unlock-PC ครับ

ห้ามเอาไปใช้งานจริง

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