Estas práticas recomendadas são fornecidas como referências exemplares. Avalie suas implementações de forma independente.
Ponto a ponto
Use o PlayFab Party. Ele lida de forma transparente com a criptografia e a autenticação da comunicação ponto a ponto e é altamente recomendado para todo o tráfego ponto a ponto em títulos GDK. Disponível em várias plataformas com suporte entre redes. Consulte PlayFab Party.Cliente/servidor
Use o MsQuic. O QUIC oferece segurança e criptografia integradas. Versões GDK da biblioteca estão disponíveis junto com builds de cliente/servidor para Windows e Linux. O MsQuic criptografa a conexão e autentica o servidor por meio de certificados TLS padrão; ainda assim, use a autenticação por token XSTS para autenticar o cliente no servidor.Cliente/servidor personalizado
Se você precisar criar sua própria solução, use DTLS com autenticação do servidor por certificado TLS e autenticação do cliente por token XSTS. Implementar DTLS por meio da API Bcrypt do GDK é complexo e propenso a bugs de protocolo. Prefira o OpenSSL: mantido ativamente, multiplataforma e amplamente revisado. Inclua a versão secundária mais recente do OpenSSL disponível publicamente no lançamento do título e atualize-a após o lançamento em caso de divulgações de segurança que afetem a funcionalidade que você usa. Derivados do OpenSSL ou bibliotecas que não são de código aberto não são mantidos/revisados no mesmo nível; evite-os. Configuração mínima de DTLS do OpenSSL: opção de cifraHIGH (somente conjuntos de cifras “high”). Para obter a melhor segurança, restrinja aos conjuntos de cifras que incluam todos os itens a seguir:
- AES256
- GCM
- SHA256 ou superior
Autenticação do servidor
Autentique os servidores via DTLS usando certificados SSL com raiz em uma AC reconhecida pelo GDK e pela plataforma. Consulte Microsoft Trusted Root Participants. Use um certificado curinga entre os servidores, por exemplo*.servers.mytitle.com, abrangendo nomes como na-1230.servers.mytitle.com. Isso permite certificados pré-instalados para instâncias alocadas dinamicamente.
O MsQuic usa o mesmo caminho de autenticação das solicitações da Web HTTPS e expõe APIs de configuração para o certificado de servidor com raiz. Consulte autenticação do servidor no MsQuic.
Autenticação do cliente
Os clientes também devem se autenticar via DTLS usando certificados com raiz em uma AC. Em vez disso, emita certificados de cliente com segurança em tempo de execução e valide-os por meio de um serviço do título autenticado com XSTS. Dois tipos de solicitação são suficientes: 1. Emitir certificado de cliente Usa as informações do token XSTS para emitir um novo certificado folha assinado pela AC de clientes do título (clients.mytitle.com). Faça o tempo de expiração corresponder ao do token XSTS (normalmente 4 horas). O nome do certificado inclui um nonce aleatório seguro (por exemplo, l8n4ulxga3.clients.mytitle.com), nunca PII / XUID / consoleID (o nonce fica visível no handshake DTLS).
O serviço armazena em seu banco de dados interno: nome do certificado, hash, expiração, XUID do jogador associado e tipo de dispositivo. Remova as entradas após a expiração.
Números de sequência de mensagens
Inclua números de sequência dentro do payload criptografado para que os invasores não possam observá-los ou modificá-los para descartar, duplicar ou reordenar pacotes. Os números não devem ser previsíveis:- Inicialize com um valor inicial aleatório seguro e incremente de forma monotônica.
- Não use
rand()nem funções de hash, pois não são criptograficamente seguras. - Use
BCryptGenRandompara a semente.
Qualidade de Serviço (QoS) cliente/servidor
As sondagens UDP de QoS selecionam o melhor datacenter/servidor. Normalmente, elas são independentes da identidade do usuário e podem ser executadas antes da entrada, portanto a autenticação e a criptografia completas não estão disponíveis. Mitigue:- Nunca inclua dados do usuário, do cliente ou do servidor no payload de QoS. Trate as sondagens como publicamente acessíveis: torne o payload aleatório ou preencha-o com zeros.
- Não analise os dados do payload. Os invasores modificam os payloads para explorar bugs de analisador. Responda apenas com base nas informações do cabeçalho do pacote.
- Teste e reforce a implementação de análise de QoS, mantendo-a o mais simples possível. Faça testes de fuzzing nela.
Documentação de API relacionada
- PlayFab Party: plano de voz + dados com DTLS integrado
- Referência da API de rede: superfície do Winsock e endereços de dispositivos seguros
- Referência da API XNetworking: verificação de certificados e dicas de conectividade
- Referência de Multiplayer do XSAPI: sessões MPSD que estabelecem a malha
- Referência do Multiplayer Manager do XSAPI: orquestração de nível mais alto
