กลับไปหน้ารวมไฟล์
win10-login-via-mfrc522-hc06-oled-hcsr04-android-security-84307c.md

[ENG] รุ่นพี่จัดเตรียมคำอธิบายโปรเจคไว้ให้ทั้งภาษาอังกฤษและฮังการีแล้วจ้า

[HUN] A projekt leírását elkészítettem angolul és magyarul is.

━━━━━━━━━

ENGLISH VERSION

━━━━━━━━━

PROJECT STORY

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

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

อีกเหตุผลที่เลือก RFID คือที่ทำงานใช้การ์ด RFID เปิดประตูอาคารและเข้าได้แค่บางห้อง (ถ้ามีสิทธิ์) ดังนั้นรุ่นพี่ก็จะล็อคและปลดล็อค Windows ด้วยการ์ดใบเดียวกันนี้ได้เลย สะดวกเว่อร์

INTRODUCTION

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

หลังจากคิดหนัก ออกมาได้ 2 ทางเลือก:

  • เพื่อให้การเข้าถึงด้วย RFID ปลอดภัยขึ้น รุ่นพี่ใช้แอป Android ที่ส่งรหัสผ่านของผู้ใช้ไปยัง Arduino ผ่านบลูทูธ โดยมีการเข้ารหัส AES ฝั่งส่งและถอดรหัส AES ฝั่งรับ นอกจากนี้ฝั่ง Arduino ยังมีกลไกเพิ่มความปลอดภัยอีก: ถ้าสัญญาณบลูทูธขาด รหัสผ่านจะถูกทำให้หมดอายุและลบทันที; ถ้าไม่มีใครนั่งหน้าจอเกินเวลาที่กำหนด ระบบจะล็อคแอคเคานต์อัตโนมัติ; ในกรณีที่ทำงานต่อเนื่อง มีการเชื่อมต่อบลูทูธและล็อกอินอยู่ ก็จะกำหนดอายุการใช้งานของรหัสผ่านด้วย พอรหัสหมดอายุ ระบบจะทำงานต่อได้ก็ต่อเมื่อส่งรหัสผ่านไปยัง Arduino ผ่านแอปอีกครั้ง
  • เวอร์ชันที่สองเหมือนกับเวอร์ชันแรกทุกประการ ยกเว้นว่าไม่มีกระบวนการเข้ารหัสและถอดรหัส AES สองฝั่ง

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

เมื่อตัดสินใจได้แล้ว ก็มากำหนดองค์ประกอบและฟังก์ชันการทำงานของระบบกัน:

  • ยอมรับการ์ด RFID เพียงใบเดียวว่าใช้ได้ ทั้งตอนล็อคแอคเคานต์ผู้ใช้และตอนล็อกอิน
  • หลังจากอ่านการ์ดแต่ละครั้ง ข้อมูลการ์ดที่สแกน (UID) จะถูกระบบปล่อยออกไปและไม่มีการเก็บไว้ มีเพียง UID ของการ์ดหลัก (ที่ใช้ควบคุมระบบ) เท่านั้นที่ถูกบันทึกไว้ในโค้ดโปรแกรม
  • แอปพลิเคชันสามารถเชื่อมต่อกับโมดูลบลูทูธ HC-06 และส่งรหัสผ่านที่ผู้ใช้กำหนดให้ได้
  • หากรหัสผ่านหมดอายุ, ไม่มีการเชื่อมต่อบลูทูธ หรือรหัสผ่านไม่ถูกต้อง การเข้าถึงจะล้มเหลว ดังนั้น เพื่อให้สามารถเข้าถึงได้ ต้องมีสิ่งต่อไปนี้พร้อม: รหัสผ่านที่ยังใช้ได้, การเชื่อมต่อบลูทูธที่ใช้งานอยู่, รหัสผ่านที่ถูกต้องและป้อนถูกต้อง
  • ในการล็อคแอคเคานต์ด้วยการ์ด RFID ต้องการแค่การ์ดหลักใบเดียว ซึ่งมี UID เดียวกับการ์ดที่บันทึกไว้ในโค้ดโปรแกรม
  • อุปกรณ์ยังสามารถทำการล็อคอัตโนมัติโดยใช้เซ็นเซอร์วัดระยะอัลตราโซนิค (HC-SR04) และโพเทนชิโอมิเตอร์ (Potentiometer) โพเทนชิโอมิเตอร์ใช้ตั้งค่าระยะเป็นเซนติเมตรที่ภายในระยะนั้น หากไม่ตรวจพบอะไรโดยเซ็นเซอร์วัดระยะ และสถานะระบบคืออยู่ในช่วงล็อกอินแล้ว ระบบจะล็อคแอคเคานต์อัตโนมัติภายใน 10 วินาที การนับถอยหลังจะถูกขัดจังหวะในสองกรณี: เมื่อปรับโพเทนชิโอมิเตอร์ไปยังตำแหน่งที่เซ็นเซอร์วัดระยะตรวจพบวัตถุอีกครั้งภายในค่าที่ตั้งไว้ (ระยะทาง), หรือเมื่อเซ็นเซอร์วัดระยะตรวจพบวัตถุอีกครั้งภายในค่าดั้งเดิมของโพเทนชิโอมิเตอร์ที่ตั้งไว้ก่อนหน้า
  • ข้อมูลทั้งหมดจะแสดงบนจอ OLED: การเข้าสู่ระบบและออกจากระบบ, ค่าระยะตรวจจับที่ปรับได้ด้วยโพเทนชิโอมิเตอร์ (หน่วยเซนติเมตร), เวลาที่เหลือจนถึงการล็อคอัตโนมัติ (หน่วยวินาที)
  • อุปกรณ์ยังสามารถปลุกระบบจากโหมดสลีปได้ พร้อมกับการล็อกอิน โดยมีเงื่อนไขว่าสถานะระบบล่าสุดคือ 'แอคเคานต์ถูกล็อค', การเชื่อมต่อบลูทูธใช้งานอยู่ และรหัสผ่านถูกต้อง เพื่อให้ฟีเจอร์นี้ทำงานได้ถูกต้องบนอุปกรณ์อื่น อาจจำเป็นต้องปรับเปลี่ยนโค้ดโปรแกรมเพื่อให้เหมาะสมกับอุปกรณ์นั้น (ปรับคำสั่ง delay() ในฟังก์ชันล็อกอินให้มีเวลาหน่วงที่เหมาะสม)

EXPANDED TECHNICAL DETAILS

Advanced Cyber-Physical Security

เจ้า Multi-factor authentication hub ตัวนี้จัดให้เลยวัยรุ่น! มันยกระดับความปลอดภัยให้กับคอมพิวเตอร์ Windows 10 แบบระดับโปร ด้วยการผสมผสานระหว่างกุญแจทางกายภาพและดิจิทัลเข้าด้วยกัน

  • Multi-Source Authentication: ต้องผ่านทั้ง การสแกน RFID (MFRC522) และ การยืนยันดิจิทัลขั้นสองจากสมาร์ทโฟน Android ที่ได้รับอนุญาตผ่าน Bluetooth (HC-06) ถึงจะเข้าได้
  • Presence Detection: เซ็นเซอร์วัดระยะอัลตราโซนิค HC-SR04 จะคอยจับตาดูว่ายืนอยู่หน้าคอมไหม ถ้าเดินหนีไปเกิน 30 วินาที Arduino จะสั่ง Lock Windows อัตโนมัติเลย สบายาย~

Visual Feedback

  • Secure Dashboard: สถานะความปลอดภัยปัจจุบัน, ชื่อผู้ใช้ที่ได้รับอนุญาต, และสถานะการเชื่อมต่อจะแสดงผลบนจอ I2C OLED ที่คมชัด ให้อินเตอร์เฟซที่ชัดเจนสำหรับกระบวนการยืนยันตัวตน

HARDWARE

ต่อไปนี้ พี่จะอธิบายอุปกรณ์ที่ใช้ในโปรเจค การต่อสายแบบเป๊ะๆ และข้อมูลสำคัญที่เกี่ยวข้องกับโปรเจคให้ฟังนะน้อง

Arduino Micro

Arduino Micro คือบอร์ดไมโครคอนโทรลเลอร์ที่ใช้ชิป ATmega32U4 พัฒนาร่วมกับ Adafruit

มันมีพินดิจิทัลอินพุต/เอาต์พุต 20 พิน (7 ในนั้นใช้เป็น PWM ได้ และ 12 พินใช้เป็นอนาล็อกอินพุต), คริสตัลออสซิลเลเตอร์ 16 MHz, การเชื่อมต่อ micro USB, หัว ICSP และปุ่มรีเซ็ต

Arduino Micro Pinout

The MFRC522 module

MFRC522

การเชื่อมต่อ MFRC522 ผ่าน SPI: (MFRC522 -> Arduino Micro)

  • SDA -> SS
  • SCK -> SCK
  • MOSI -> MOSI
  • MISO -> MISO
  • IRQ -> NOT CONNECTED
  • GND -> GND
  • RST -> 5
  • VCC -> 3.3V
MFRC522 wiring

The HC-06 bluetooth module

HC06

การเชื่อมต่อโมดูลบลูทูธ HC-06: (HC-06 -> Arduino Micro)

  • RXD-> TXD
  • TXD-> RXD
  • GND -> GND
  • VCC-> 5V

ขา RX และ TX ของโมดูลบลูทูธ HC-06 นี่ ไม่ทนแรงดัน 5V นะจ๊ะ แต่ว่าให้มันทำงานได้ปกติ แค่ใส่ Voltage Divider 5V - 3.3V ให้กับขา RX ขาเดียวก็พอ ซึ่งพี่ทำด้วยตัวต้านทาน (Resistor) 10kΩ กับ 20kΩ

ถ้าอยากเช็คหรือคำนวณว่าตัวต้านทานที่ใช้ในการออกแบบ Voltage Divider ถูกต้องไหม ลองใช้เครื่องคิดเลขพวกนี้ดูได้เลย อย่าลืมเช็คให้ดีก่อนลงมือนะ ห้ามช็อตนะตัวนี้!

HC-06 wiring with voltage divider
Checking the correct design of the voltage divider

ทำไมการเลือก Voltage Divider ที่ถูกต้องถึงสำคัญ? ตอนเริ่มโปรเจคใหม่ๆ พี่ก็ลืมใส่ Voltage Divider ที่จำเป็นให้กับโมดูล HC-06 ไปแบบสวยๆ เลยไง ผลลัพธ์ที่ได้ก็ดูสวยงามตามในวิดีโอด้านล่างนี้เลย (ไฟ LED กะพริบแบบที่คู่มือไม่ได้บอกไว้ หาโมดูลไม่เจอด้วยเครื่องมือใดๆ เลย ทำให้การเชื่อมต่อ/จับคู่เป็นไปไม่ได้)

HC-06 after discharge

The HC-SR04 distance sensor module

Pinout and main parameters of the HC-SR04 module
Acrylic bracket for HC-SR04 module

การเชื่อมต่อโมดูลเซ็นเซอร์วัดระยะ HC-SR04: (HC-SR04 -> Arduino Micro)

  • VCC-> 5V
  • TRIG -> 8
  • ECHO -> 7
  • GND -> GND
HC-SR04 wiring

The OLED display

สเปคหลักของจอที่พี่ใช้:

  • ความละเอียด 128x32 พิกเซล
  • ขนาด 0.91 นิ้ว
  • สื่อสารผ่าน I2C
  • ใช้ไดรเวอร์ SSD1306
The OLED display

การเชื่อมต่อจอ OLED: (OLED -> Arduino Micro)

  • GND -> GND
  • VCC -> 5V
  • SCL -> 3
  • SCA -> 2

ข้อมูล Frontmatter ดั้งเดิม

title: "ปลดล็อก Windows 10 แบบเทพๆ ด้วยบัตร RFID งานง่ายแต่หล่อ!"
description: "โปรเจคนี้จะทำให้เราปลดล็อกและล็อกอินเข้าบัญชี Windows 10 ได้ด้วยบัตร RFID ของเราเอง แถมยังมีฟีเจอร์ความปลอดภัยและความสะดวกแบบจัดเต็ม ทั้งการแจ้งเตือนผ่าน Android และเซนเซอร์ตรวจจับการอยู่หน้าจอ!"
author: "kela910512"
category: "Lab Stuff"
tags:
  - "Security"
  - "Smart appliances"
  - "Internet Of Things"
  - "Communication"
views: 3452
likes: 0
price: 699
difficulty: "Intermediate"
components:
  - "1x Universal PCB"
  - "1x Resistor 220 ohm"
  - "1x Soldering iron (generic)"
  - "1x Rotary potentiometer (generic)"
  - "1x RFID MFRC522"
  - "1x HC-06 Bluetooth Module"
  - "1x Hobby glass"
  - "1x Breadboard (generic)"
  - "1x Ultrasonic Sensor - HC-SR04 (Generic)"
  - "1x Blue OLED display - 128x32, 0.91 inch, I2C, SSD1306"
  - "1x Through Hole Resistor, 10 kohm"
  - "1x Through Hole Resistor, 20 kohm"
  - "20x Jumper wires (generic)"
  - "1x Arduino Micro"
  - "1x LED (generic)"
  - "1x TP-LINK TL-SF1008D 8 port switch"
  - "1x Solder Wire, Lead Free"
  - "1x HC-SR04-CLS"
tools: []
apps:
  - "1x MIT App Inventor 2"
downloadableFiles:
  - "https://projects.arduinocontent.cc/369dc494-c5ac-41e3-b697-762c8464794e.ino"
  - "https://github.com/Kela910512/RFID_WIN10_LOGIN_SYSTEM"
  - "https://github.com/Kela910512/RFID_WIN10_LOGIN_SYSTEM/tree/main/ANDROID"
documentationLinks: []
passwordHash: "a02c88e43e5f8d870001121a435743dade49499e8831b05203acd96bd07ec91c"
encryptedPayload: "U2FsdGVkX1/7EqlAGlBW+mKsJTMI9bV3kL5Xhz4uIs5OLwRlIgdqSH9i7OG6QHpctahrHhkjIXfQ+2DjRdzl1V6gpF51yCXj182ETgycPy0="
seoDescription: "Secure Windows 10 Login using RFID card with MFRC522, HC06, and HCSR04. Includes Android security features and OLED status display."
videoLinks:
  - "https://www.youtube.com/embed/a4jEotuZvxU"
  - "https://www.youtube.com/embed/UtUbcHyD2SY"
  - "https://www.youtube.com/embed/OPdHExjkcDc"
  - "https://www.youtube.com/embed/a4jEotuZvxU"
  - "https://www.youtube.com/embed/UtUbcHyD2SY"
  - "https://www.youtube.com/embed/OPdHExjkcDc"
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/win10-login-via-mfrc522-hc06-oled-hcsr04-android-security-84307c_cover.jpg"
lang: "en"