Giải Pháp Xác Thực Người Dùng Đa Máy Chủ - nói dối e blog

Giải Pháp Xác Thực Người Dùng Đa Máy Chủ

Khi hệ thống máy chủ game mở rộng quy mô, việc chỉ cho phép người dùng kết nối qua một cổng duy nhất sẽ tạo ra áp lực lớn cho điểm truy cập đó. Để giải quyết vấn đề này, chúng ta cần thiết kế hệ thống sao cho nhiều máy chủ trong cụm đều có thể chấp nhận kết nối trực tiếp từ người dùng.

Tuy nhiên, khi cho phép kết nối đa điểm như vậy, bài toán quan trọng đầu tiên cần giải quyết chính là xác thực danh tính người dùng. Các công ty cung cấp dịch vụ trực tuyến lớn như Microsoft với hệ thống Passport hay NetEase với hệ thống chứng thực riêng đều xây dựng hệ thống xác thực tập trung. Để tránh gây quá tải cho hệ thống xác thực do phải kiểm tra lặp lại nhiều lần, giải pháp được đề xuất như sau:

Cơ chế xác thực hai giai đoạn:

  1. Máy chủ đăng nhập trung tâm (Login Server):

    • Chỉ duy nhất một máy chủ đảm nhiệm việc xác thực lần đầu
    • Sau khi xác minh thành công thông tin đăng nhập, hệ thống sẽ cấp cho người dùng một “thẻ thông hành tạm thời” (temporary token) dùng để truy cập vào các máy chủ game cụ thể
  2. Quy trình phát hành thẻ thông hành:

    • Khi người dùng đăng nhập lần đầu, máy chủ xác thực sẽ:
      • Truy vấn CSDL để lấy ServerID (thường là máy chủ mà người dùng đăng nhập lần gần nhất hoặc máy chủ được chỉ định theo logic game)
      • Kết hợp các yếu tố sau để tạo token:
        • GameID (ID trong game, khác với tên đăng nhập)
        • Chuỗi ký tự bí mật chung (shared secret)
        • Số phiên bản (version number) tăng dần
        • Các byte ngẫu nhiên
      • Sử dụng thuật toán mã hóa đối xứng DES để mã hóa dữ liệu trên
      • Cập nhật số phiên bản sau mỗi lần phát hành token

Cơ chế bảo mật đa lớp:

  1. Bảo vệ thông tin xác thực:

    • Không truyền trực tiếp mật khẩu qua mạng
    • Áp dụng cơ chế “challenge-response”:
      • Máy chủ gửi chuỗi ngẫu nhiên (nonce) cho client
      • Client kết hợp nonce với mật khẩu, băm bằng thuật toán MD5 rồi trả về server
  2. Mã hóa token khi truyền tải:

    • Sử dụng giá trị băm MD5 của mật khẩu (hoặc kết hợp với chuỗi bí mật) làm khóa mã hóa
    • Mỗi token chỉ có hiệu lực duy nhất một lần
  3. Ngăn chặn tấn công replay:

    • Mỗi máy chủ đích sẽ kiểm tra:
      • ServerID có khớp với máy chủ hiện tại không
      • Số phiên bản token có lớn hơn lần sử dụng trước đó không
    • Khi người dùng chuyển máy chủ, token mới sẽ được phát hành từ máy chủ hiện tại

Ưu điểm nổi bật:

  • Tính bảo mật cao: Token là chuỗi mã hóa không có nghĩa với người dùng, không thể giả mạo
  • Hiệu suất tối ưu: Giảm tải cho hệ thống xác thực trung tâm
  • Linh hoạt trong di chuyển: Cho phép chuyển đổi máy chủ mượt mà qua cơ chế token kế tiếp

Lưu ý triển khai:

  • Khóa mã hóa DES phải được bảo quản bí mật giữa các máy chủ
  • Cơ chế sinh số ngẫu nhiên cần đảm bảo tính không đoán trước
  • Hệ thống cần có cơ chế đồng bộ số phiên bản giữa các máy chủ

Giải pháp này hiện đang được áp dụng rộng rãi trong các hệ thống game online quy mô lớn, đảm bảo cân bằng giữa yếu tố bảo mật và hiệu năng vận hành.

0%