PUN Classic(PUN1이라고도 불립니다)은 PUN의 첫 버전입니다.         현재는 리팩토링 및 기능 확장에 의해 PUN2로 새롭게 바뀌었습니다.          새 프로젝트에는 PUN2를 이용해 주시고, 기존의 프로젝트도 가능하면 PUN1에서 PUN2로 옮기는 것을 권장합니다.  자세한 내용은: "마이그레이션 노트". PUN Classic은 곧 점검이 시작됩니다.        중요한 버그의 수정과 Unity의 신버전의 지원 등을 예정하고 있습니다. 신기능의 추가는 PUN2에서만 이루어지므로 주의해 주십시오.

암호화

Photon 은 클라이언트와 서버간 메시지에 대해서 암호화 할 수 있으며 입력된 인증정보 또는 민감한 사용자 정보를 전송 할 때는 암호화가 필수 입니다.

다른 한편 암호화는 큰 오버헤드의 원인이 되기 때문에 빈번하게 사용되지 않으며 API 에서 노출 하지 않았습니다.

예를 들어 디폴트 로직에서 룸의 모든 플레이어에게 공개적으로 전달 되어야 하기 때문에 너무 비밀 스럽게 할 수 없습니다. 따라서 모든 이벤트들은 기본적으로 암호화 되지 않습니다.

클라이언트 SDK에서는 인증을 위해서만 암호화를 사용되고 있습니다. 개발자는 메시지에 대해서 암호화를 사용할 수 있습니다.

기술 상세 내용

Photon LoadBalancing 또는 PUN 을 사용할 때, API 는 클라이언트와 서버간에 암호화 키를 자동적으로 교환합니다. 키 교환은 클라이언트가 연결될 때 Diffie-Hellman Key Exchange 를 통해 이루어 집니다. 필요에 따라 160 bit 키가 AES 암호화 에 사용 됩니다.

클라이언트가 인증되었으면 서버는 토큰을 발행 합니다. 토큰은 클라이언트 인증 값의 암호화 된 요약으로서 다른 서버에서 사용됩니다. 클라이언트가 토큰을 읽을 필요는 없습니다.

만약 Webhooks 또는 WebRPC 를 사용 한다면 Photon 서버는 HTTPS 연결로 호출 하게 됩니다. 만약 유니티의 WebGL export 를 사용하고 있다면 클라이언트는 보안 웹소켓을 통해 연결되게 됩니다.

Back To Top

PUN 에서 암호화(Photon Unity Networking)

PUN 에서는 PhotonView 에서 RpcSecure() 호출 하여 암호화된 방식의 RPC 호출 할 수 있습니다.

Back To Top

오퍼레이션의 암호화

모든 API 에서 PhotonPeer라고 하는 클래스가 있습니다. 낮은 레벨의 클래스로 OpCustom() 메소드를 제공 합니다. 이것은 클라이언트에서 수행하는 모든 오퍼레이션 호출의 기본이며 암호화 매개 변수를 가집니다.

PUN 에서 PhotonNetwork.networkingPeer는 PhotonPeer 입니다. LoadBalancing 에서는 LoadBalancingClient.loadBalancingPeer 입니다.

필요에 따라 암호화 파라미터를 true로 설정 하여 OpCustom() 를 사용 합니다.

Back To Top

수동으로 암호화 수립

LoadBalancing API 또는 PUN 을 사용하고 있다면, 수동으로 할 필요가 없습니다. 처음부터 클라이언트를 시작하는 경우에는 연결 후에 암호화를 수립 해주어야 합니다.

최고의 경우는 다음과 같이 OnStatusChanged 에서 peer.EstablishEncryption() 를 호출합니다:

    
    public void OnStatusChanged(StatusCode returnCode)
    {
        // handle returnCodes for connect, disconnect and errors (non-operations)
        switch (returnCode)
        {
            case StatusCode.Connect:
                this.peer.EstablishEncryption();
                // ...

라이브러리는 필요한 키를 전송 및 처리합니다. 이것이 끝나면 다음 중 하나의 코드로 클라이언트 라이브러리에서 OnStatusChanged를 호출합니다:

    
    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;

기술문서 TOP으로 돌아가기