Về cơ bản, bạn có ba yêu cầu:
- không nên dễ dàng sử dụng cùng một khóa cho nhiều trường hợp khách hàng,
- không dễ để tạo khóa hợp lệ mới và
- không nên dễ dàng đánh cắp chìa khóa của một khách hàng hợp pháp.
Phần đầu tiên khá đơn giản: chỉ cần đừng để hai người chơi đăng nhập vào cùng một máy chủ cùng một khóa. Bạn cũng có thể yêu cầu máy chủ trao đổi thông tin về người dùng đã đăng nhập hoặc liên hệ với máy chủ xác thực chia sẻ, do đó, ngay cả việc sử dụng cùng một khóa cho những người chơi khác nhau trên các máy chủ khác nhau cùng một lúc sẽ thất bại. Bạn cũng có thể muốn tìm kiếm các mẫu đáng ngờ về việc sử dụng khóa và, nếu bạn xác định rằng một khóa đã bị rò rỉ, hãy thêm nó vào danh sách các khóa bị cấm.
Đối với phần thứ hai, một cách đơn giản là duy trì cơ sở dữ liệu của tất cả các khóa được cấp hợp lệ. Miễn là các khóa đủ dài (giả sử, 128 bit trở lên) và được chọn ngẫu nhiên (sử dụng RNG an toàn), tỷ lệ của bất kỳ ai quản lý để đoán khóa hợp lệ về cơ bản là bằng không. (Ngay cả các khóa ngắn hơn nhiều cũng có thể an toàn nếu bạn sử dụng một số loại giới hạn tỷ lệ đối với các lần thử đăng nhập thất bại để ngăn các nỗ lực tìm khóa hợp lệ bằng vũ lực.)
Ngoài ra, bạn có thể tạo khóa bằng cách lấy bất kỳ mã định danh duy nhất nào và thêm mã xác thực tin nhắn (chẳng hạn như HMAC ), được tính bằng khóa chính bí mật. Một lần nữa, miễn là MAC đủ dài, tỷ lệ của bất kỳ ai không biết khóa chính có thể đoán MAC hợp lệ cho bất kỳ ID nào là không đáng kể. Một lợi thế của phương pháp này, bên cạnh việc loại bỏ nhu cầu về cơ sở dữ liệu khóa, là mã định danh có thể là bất kỳ chuỗi duy nhất nào và có thể mã hóa thông tin về máy khách mà khóa được cấp.
Một vấn đề khi sử dụng MAC là các máy chủ trò chơi chính thức (hoặc ít nhất là máy chủ xác thực) cần biết khóa chính để xác minh MAC, điều đó có nghĩa là, nếu máy chủ bị hack, khóa chính có thể bị rò rỉ. Một cách để giảm thiểu rủi ro này có thể là tính toán một số MAC cho mỗi ID, sử dụng các khóa chính khác nhau, nhưng chỉ lưu trữ một trong các khóa chính trên các máy chủ trò chơi. Bằng cách đó, nếu khóa chính đó bị rò rỉ và được sử dụng để tạo ID giả, bạn có thể thu hồi nó và chuyển sang khóa chính khác. Ngoài ra, bạn có thể thay thế MAC bằng chữ ký điện tử , có thể được xác minh chỉ bằng một nửa công khai của khóa chính.
Đối với phần thứ ba, một cách tiếp cận là đảm bảo rằng khách hàng sẽ không gửi khóa cho bất kỳ ai mà không cần xác minh rằng người nhận thực sự là một máy chủ chính thức hợp pháp. Ví dụ: bạn có thể sử dụng SSL / TLS (hoặc DTLS ) cho quá trình đăng nhập, cấp chứng chỉ tùy chỉnh cho máy chủ trò chơi của bạn và chỉ có chứng chỉ tin cậy máy khách do bạn cấp. Thuận tiện, sử dụng TLS cũng sẽ bảo vệ các khóa máy khách (và bất kỳ dữ liệu xác thực nào khác) khỏi những kẻ nghe trộm, ví dụ như trên các mạng WLAN công cộng.
Thật không may, cách tiếp cận này sẽ không cho phép các máy chủ của bên thứ ba xác minh khóa máy khách ngay cả khi họ muốn. Bạn có thể giải quyết vấn đề này bằng cách thiết lập máy chủ xác thực chính thức mà máy chủ trò chơi của bên thứ ba có thể sử dụng, ví dụ: bằng cách đăng nhập máy khách vào máy chủ xác thực và nhận mã thông báo một lần ngẫu nhiên mà họ có thể sử dụng để đăng nhập vào máy chủ trò chơi (sau đó gửi mã thông báo đến máy chủ xác thực để xác minh).
Ngoài ra, bạn có thể cấp chứng chỉ ứng dụng khách thực tế hoặc một cái gì đó giống như chúng cho khách hàng của bạn. Bạn có thể sử dụng một giao thức hiện có (như TLS) hỗ trợ xác thực chứng chỉ ứng dụng khách (được khuyến nghị) hoặc thực hiện giao thức của riêng bạn, ví dụ như thế này:
- Chứng chỉ ứng dụng khách bao gồm một chuỗi ID tùy ý, cặp khóa chung / riêng và chữ ký số của ID và khóa chung sử dụng khóa chính.
- Để đăng nhập, khách hàng gửi ID, khóa công khai và chữ ký của họ. Máy chủ trả lời bằng một chuỗi thử thách duy nhất (tốt nhất là bao gồm ID máy chủ và dấu thời gian mà khách hàng cần xác minh), mà khách hàng ký với khóa riêng (để chứng minh rằng họ biết khóa) và gửi chữ ký đến máy chủ.
- Máy chủ kiểm tra cả hai chữ ký, chứng minh rằng ID + khóa chung tạo thành khóa khách hợp pháp (vì chúng được ký với khóa chính) và khóa máy khách thực sự thuộc về máy khách (vì máy khách có thể ký thách thức của máy chủ với riêng tư Chìa khóa).
(Giao thức này có thể được đơn giản hóa hơn nữa bằng cách ứng dụng khách tạo ra "thử thách", bao gồm ID máy chủ và dấu thời gian và ký tên. Tất nhiên, sau đó máy chủ cần xác minh rằng ID và dấu thời gian là hợp lệ. giao thức đơn giản này tự nó sẽ không ngăn kẻ tấn công trung gian có thể chiếm quyền điều khiển phiên của khách hàng, mặc dù điều đó sẽ ngăn họ lấy khóa riêng của khách hàng để đăng nhập trong tương lai.)