Es/Counter-Strike: Global Offensive Network Channel Encryption

__NOTOC__
Esta página recoge las nociones básicas sobre cómo funciona el cifrado del canal de red de CS:GO y cómo los terceros pueden proporcionar extensiones de servidores y software del cliente para asegurar la comuniación entre el cliente y el servidor del juego mediante claves de cifrado. Es necesario tener una versión actualizada de CS:GO 1.35.6.0 o superior para usar el protocolo de claves de cifrado de canales de red de terceros.thumb|right|360px|Counter-Strike: Global Offensive
La comuniación del canal de red de CS:GO puede cifrarse con una clave binaria de 16 byte. Initial "connectionless" packets starting with four bytes 0xFF 0xFF 0xFF 0xFF and followed by either A2S_GETCHALLENGE 'q' byte or C2S_CONNECT 'k' byte and are always sent unencrypted in the clear. After the client connection is accepted by the game server, the network channel is established and must be used. If the network channel must use the encryption key then the key configured on the client side and on the server side must match for communication to succeed.
== Cambiando claves de cifrado ==
Los terceros pueden implementar administración de claves de cifrado para sus jugadores de distintas formas, así como controlar que clientes necesitan clave y cuáles no, pudiendo conectarse sin necesidad de ella. If the client requires an encryption key then typically 3rd party backend will have a secure connection with client software to inform the 3rd party client software in a secure way of the required encryption key. Secure implementation of backend to client protocol is required because this channel is the most likely target for man-in-the-middle attack by malicious clients with the goal of extracting the encryption key. 3rd party client software will forward the encryption key to the CS:GO game client using machine-local communication. At the same time 3rd party backend will communicate the client's encryption key to the 3rd party game server that will be hosting the match for this client. By the time the client connects to the game server they can both use the same established encryption key and benefit from encrypted network channel communication.
== Establecer clave de cifrado del cliente ==
El siguiente código muestra un ejemplo de clave de cifrado del cliente de CS:GO por parte de un software de terceros. El formato el una dirección de servidor remota, a la que el cliente debe utilizar una clave para conectarse, el símbolo de "mayor qué" (>), la clave de 32 bit debe contener must contain non-zero in the upper word ( ( idx & 0xFFFF0000 ) != 0 ) to avoid conflicting with built-in encryption keys, the 16-byte plaintext key that the client will use to encrypt messages, and non-zero amount up to 256 bytes of 3rd party defined payload that client will send to the server over the wire unencrypted so shouldn't contain the encryption key because man-in-the-middle attacker will be able to extract it.
== Establecer clave de cifrado del servidor ==
Se necesita una extensión del servidor de terceros para establecer la clave de cifrado del servidor, el cual debe estar ejecutándose con el comando -externalnetworkcryptkey para activar dicha característica. La extensión debe implementar la interfaz IServerPluginCallbacks v4 "ISERVERPLUGINCALLBACKS004". La interfaz v4 se ha ampliado de dos modos adicionales en comparación a la v3: BNetworkCryptKeyCheckRequired y BNetworkCryptKeyValidate. Toda la información de la interfaz en C++ está aquí.
An example implementation of the server plugin is provided here.
== Enlaces externos ==
* Web oficial
* Wikipedia:Counter-Strike:_Global_Offensive