암호화
Photon 은 클라이언트와 서버간 메시지에 대해서 암호화 할 수 있으며 입력된 인증정보 또는 민감한 사용자 정보를 전송 할 때는 암호화가 필수 입니다.
다른 한편 암호화는 큰 오버헤드의 원인이 되기 때문에 빈번하게 사용되지 않으며 API 에서 노출 하지 않았습니다.
예를 들어 디폴트 로직에서 룸의 모든 플레이어에게 공개적으로 전달 되어야 하기 때문에 너무 비밀 스럽게 할 수 없습니다. 따라서 모든 이벤트들은 기본적으로 암호화 되지 않습니다.
클라이언트 SDK에서는 인증을 위해서만 암호화를 사용되고 있습니다. 개발자는 메시지에 대해서 암호화를 사용할 수 있습니다.
기술 상세 내용
Photon LoadBalancing 또는 PUN 을 사용할 때, API 는 클라이언트와 서버간에 암호화 키를 자동적으로 교환합니다.
키 교환은 클라이언트가 연결될 때 Diffie-Hellman Key Exchange 를 통해 이루어 집니다.
필요에 따라 256 bit 키가 AES 암호화 에 사용 됩니다.
클라이언트가 인증되었으면 서버는 토큰을 발행 합니다. 토큰은 클라이언트 인증 값의 암호화 된 요약으로서 다른 서버에서 사용됩니다. 클라이언트가 토큰을 읽을 필요는 없습니다.
만약 Webhooks 또는 WebRPC 를 사용 한다면 Photon 서버는 HTTPS 연결로 호출 하게 됩니다.
만약 유니티의 WebGL export 를 사용하고 있다면 클라이언트는 보안 웹소켓을 통해 연결되게 됩니다.
PUN 에서 암호화(Photon Unity Networking)
PUN 에서는 PhotonView 에서 RpcSecure()
호출 하여 암호화된 방식의 RPC 호출 할 수 있습니다.
오퍼레이션의 암호화
모든 API 에서 PhotonPeer라고 하는 클래스가 있습니다. 낮은 레벨의 클래스로 OpCustom()
메소드를 제공 합니다.
이것은 클라이언트에서 수행하는 모든 오퍼레이션 호출의 기본이며 암호화 매개 변수를 가집니다.
PUN 에서 PhotonNetwork.networkingPeer
는 PhotonPeer 입니다.
LoadBalancing 에서는 LoadBalancingClient.loadBalancingPeer
입니다.
필요에 따라 암호화 파라미터를 true로 설정 하여 OpCustom()
를 사용 합니다.
수동으로 암호화 수립
LoadBalancing API 또는 PUN 을 사용하고 있다면, 수동으로 할 필요가 없습니다.
처음부터 클라이언트를 시작하는 경우에는 연결 후에 암호화를 수립 해주어야 합니다.
최고의 경우는 다음과 같이 OnStatusChanged
에서 peer.EstablishEncryption()
를 호출합니다:
C#
public void OnStatusChanged(StatusCode returnCode)
{
// handle returnCodes for connect, disconnect and errors (non-operations)
switch (returnCode)
{
case StatusCode.Connect:
this.peer.EstablishEncryption();
// ...
라이브러리는 필요한 키를 전송 및 처리합니다.
이것이 끝나면 다음 중 하나의 코드로 클라이언트 라이브러리에서 OnStatusChanged
를 호출합니다:
C#
public void OnStatusChanged(StatusCode returnCode)
{
// handle returnCodes for connect, disconnect and errors (non-operations)
switch (returnCode)
{
// ...
case StatusCode.EncryptionEstablished:
// encryption is now available
// this is used per operation call
break;
case StatusCode.EncryptionFailedToEstablish:
// if this happens, get in contact with Exit Games
break;