PUN Classic (v1), PUN 2, Bolt는 휴업 모드입니다. Unity2022에 대해서는 PUN 2에서 서포트하지만, 신기능의 추가는 없습니다. 현재 이용중인 고객님의 PUN 및 Bolt 프로젝트는 중단되지 않고, 퍼포먼스나 성능이 떨어지는 일도 없습니다.
앞으로의 새로운 프로젝트에는 Photon Fusion 또는 Quantum을 사용해 주십시오.
Bolt Connection Encryption System
보안성은 Photon Bolt로 개발할 때 주요 목표 중 하나이며, 이러한 이유로 Bolt는 기본 암호화 시스템을 구축하여 각 패키지를 암호화/복호화하여 제3자가 수정할 수 없도록 지원합니다. Photon Bolt v1.2.13부터 사용할 수 있습니다.
이 구현에 관한 한 가지 핵심 사항은 Bolt가 비밀(키) 교환을 수행하지 않지만 이러한 키를 만들고 추출하는 데 필요한 모든 수단을 제공한다는 것입니다. 이 방법은 나중에 데이터를 암호화하는 데 사용됩니다.
요약하자면, 이 시스템을 올바르게 사용하려면 보안 교환 서비스를 구현해야 합니다.
기본 설정
암호화 시스템 설정은 필요한 모든 키를 설정하기만 하면 됩니다.
Photon Bolt는 이 키를 사용하여 다른 개입 없이 모든 패키지를 암호화하고 해독합니다.
아래 예제 코든는 암호화 시스템을 설정하고 재설정할 수 있는 방법을 보여줍니다.
C#
using System;
using UdpKit.Security;
using UnityEngine;
namespace Bolt.Samples.Encryption
{
/// <summary>
/// Example class to fill the Encryption Keys
/// </summary>
public class EncryptionSystemSample
{
/// <summary>
/// Setup the Encryption System
/// </summary>
public static void InitEncryption()
{
// The Encryption System includes some Utility methods to generate all necessary Keys
var IV = EncryptionManager.GenerateAesIV();
var key = EncryptionManager.GenerateAesKey();
var secret = EncryptionManager.GenerateHashSecret();
EncodedIV = Convert.ToBase64String(IV);
EncodedKey = Convert.ToBase64String(key);
EncodedSecret = Convert.ToBase64String(secret);
// Initlize the system just passing the keys as argument and done
EncryptionManager.Instance.InitializeEncryption(EncodedIV, EncodedKey, EncodedSecret);
}
/// <summary>
/// Reset the Encryption System
/// </summary>
public static void ResetEncryption()
{
// Reset all configurations on the Encryption System if you want to disable it
EncryptionManager.Instance.DeinitializeEncryption();
}
}
}
또한 암호화 시스템을 설정하기 위한 중앙 클래스인 EncryptionManager
클래스와 상호 작용할 수 있는 방법을 보여주는 간단한 예제도 포함되어 있습니다.
SDK 또는 샘플 리포의 samples
패키지에 포함되어 있는 SetupEncryptionSystem
폴더 안을 확인해보실 수 있습니다.
암호화 시스템 설명
패킷 암호화 시스템은 지정된 설정을 사용하여 다음과 같은 잘 알려진 알고리즘을 적용하여 해당 동작을 수행합니다.
- 고급 암호화 표준 (Advanced Encryption Standard, AES)(문서 페이지):
- 키 크기: 256 bits;
- 모드: CipherMode.CBC (문서 페이지).
- 메시지 인증 코드 (HMAC)(문서 페이지).
- SHA256 함수 사용 (문서 페이지).
데이터 암호화 프로세스는 다음 단계들로 설명할 수 있습니다.
- 데이터 암호화:
- 패킷 앞에 고유 순차적
ID
가 붙습니다. - 패킷 내용을 기반으로 하는
Hash
가 생성되어 데이터 버퍼에 추가됩니다. - 모든 버퍼는 위의 알고리즘을 사용하여 암호화됩니다.
- 패킷 앞에 고유 순차적
- 데이터 복호화:
- 수신된 데이터 버퍼가 복호화됩니다.
Hash
코드가 유효한지 확인하고 그렇지 않으면, 패킷은 폐기됩니다.- 수신된
ID
는 가장 마지막의 유효한 패킷과 검사되고, 오래된 것이라면 패킷은 폐기됩니다.
추가 노트
일반적인 암호화에 대한 관련된 정보 링크:
- https://docs.microsoft.com/en-us/dotnet/standard/security/cryptography-model
- https://chrishammond.ca/2018/09/03/rijndaelmanaged-aesmanaged-and-aescryptoserviceprovider-simpleaccountlocker-app/
- http://www.philosophicalgeek.com/2014/10/22/using-memorystream-to-wrap-existing-buffers-gotchas-and-tips/