0

Thực chiến Device Authentication Bài 1: Tổng quan - Tại sao Username/Password là "tử huyệt" của thiết bị phần cứng?

Khi bước chân vào thế giới của các hệ thống giao tiếp giữa Máy và Máy (Machine-to-Machine / M2M) hoặc khi backend của bạn phải phục vụ các thiết bị phần cứng vật lý (như máy bán vé tự động ở ga tàu, màn hình quảng cáo kiosk, hoặc thiết bị IoT), tư duy bảo mật buộc phải thay đổi hoàn toàn.

Nếu bạn đang mang tư duy xác thực người dùng (User Authentication) áp dụng sang xác thực thiết bị (Device Authentication), hệ thống của bạn đang tồn tại một lỗ hổng chí mạng.


1. Sai lầm kinh điển: "Hardcode" thông tin đăng nhập

Cách dễ nhất và cũng... nguy hiểm nhất mà các lập trình viên thường làm khi kết nối một thiết bị mới vào hệ thống là:

  • Tạo một tài khoản trong database: username: kiosk_station_1, password: secret123.
  • Gắn cứng (hardcode) chuỗi này vào source code của thiết bị hoặc lưu thẳng dưới dạng plain text trong file .env trên ổ cứng thiết bị đó.
  • Thiết bị gọi API /login, lấy JWT Token và bắt đầu hoạt động.

Tại sao cách này lại thảm họa?

  • Thiếu sự bảo vệ vật lý: Khác với máy chủ nằm sâu trong Data Center, các thiết bị này thường được đặt ở nơi công cộng. Một kẻ gian chỉ cần mở vỏ máy, cắm USB hoặc tháo ổ cứng là có thể chép toàn bộ source code và file config.
  • Không thể định danh duy nhất: Khi hacker lấy được username/password, họ có thể dùng Postman hoặc viết một script từ máy tính cá nhân ở nhà để "giả danh" là cái máy bán vé đó, thao túng dữ liệu hoặc đánh sập backend bằng DDoS. Hệ thống của bạn không có cách nào phân biệt được đâu là "máy thật", đâu là "script giả".
  • Chi phí xoay vòng (Rotation) quá đắt đỏ: Khi nghi ngờ lộ password, bạn phải cho nhân viên bảo trì ra tận hiện trường, cắm chuột phím vào từng thiết bị để đổi lại mật khẩu mới.

2. Sự khác biệt cốt lõi: "User" và "Device"

  • Xác thực con người dựa trên "Những gì bạn biết" (Mật khẩu, mã PIN). Con người có thể nhớ mật khẩu, có thể tự nhập mã OTP gửi qua điện thoại.
  • Nhưng máy móc không có trí nhớ chủ động và không thể tự bấm OTP. Xác thực thiết bị phải dựa trên "Những gì thiết bị có" và "Bản chất của thiết bị đó".

Để giải quyết bài toán này, chúng ta cần một cơ chế không yêu cầu truyền mật khẩu qua mạng, và dù hacker có tháo tung thiết bị ra cũng không thể sao chép được "nhân dạng" của nó. Đó là lúc Mật mã học (Cryptography) lên ngôi.


3. Mảnh ghép đầu tiên: DeviceID và Cặp khóa bất đối xứng

Thay vì dùng mật khẩu, hệ thống Device Authentication hiện đại sử dụng hai yếu tố sau làm nền tảng:

A. Định danh phần cứng (DeviceID / Fingerprint)

Thiết bị không dùng username tự đặt. Nó tự sinh ra một mã định danh duy nhất dựa trên chính "thể xác" của nó. Thường là sự kết hợp (hash) của:

  • MAC Address của Card mạng.
  • Serial Number của Mainboard/CPU.
  • Mã ID của chip bảo mật (nếu có).

Key Takeaway: DeviceID đảm bảo định danh này gắn liền với phần cứng. Bạn mang ổ cứng cắm sang cái máy khác, MAC và CPU khác đi, DeviceID sẽ thay đổi.

B. Cặp khóa Bất đối xứng (Asymmetric Keys)

Đây là linh hồn của hệ thống. Ngay trong lần khởi động đầu tiên tại xưởng (Provisioning), thiết bị sẽ tự động sinh ra một cặp khóa (thường dùng thuật toán RSA hoặc ECC):

  • Public Key (Khóa công khai): Được gửi lên Backend để lưu vào Database. Backend dùng khóa này để "nhận diện" thiết bị.
  • Private Key (Khóa bí mật): Lưu chết bên trong thiết bị, lý tưởng nhất là lưu trong các chip bảo mật chuyên dụng (TPM - Trusted Platform Module) để không một phần mềm nào (kể cả root user) có thể copy nó ra ngoài.

Tạm kết

Với cơ chế mới, thiết bị sẽ không bao giờ gửi "Mật khẩu" (Private Key) qua mạng lưới API. Thay vào đó, nó sẽ dùng Private Key để "ký tên" lên từng gói dữ liệu. Backend dùng Public Key để kiểm tra chữ ký đó.

Hacker có thể đánh cắp gói dữ liệu, nhưng không thể làm giả chữ ký cho các request tiếp theo nếu không cầm trong tay con chip vật lý chứa Private Key.

Ở Bài 2, chúng ta sẽ đi sâu vào thiết kế kiến trúc của luồng "Chữ ký điện tử" này và cách vô hiệu hóa hoàn toàn đòn tấn công nhai lại (Replay Attack).


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí