Bolt Connection Encryption System

보안성은 Photon Bolt로 개발할 때 주요 목표 중 하나이며, 이러한 이유로 Bolt는 기본 암호화 시스템을 구축하여 각 패키지를 암호화/복호화하여 제3자가 수정할 수 없도록 지원합니다. Photon Bolt v1.2.13부터 사용할 수 있습니다.

이 구현에 관한 한 가지 핵심 사항은 Bolt가 비밀(키) 교환을 수행하지 않지만 이러한 키를 만들고 추출하는 데 필요한 모든 수단을 제공한다는 것입니다. 이 방법은 나중에 데이터를 암호화하는 데 사용됩니다. 요약하자면, 이 시스템을 올바르게 사용하려면 보안 교환 서비스를 구현해야 합니다.

기본 설정

암호화 시스템 설정은 필요한 모든 키를 설정하기만 하면 됩니다. Photon Bolt는 이 키를 사용하여 다른 개입 없이 모든 패키지를 암호화하고 해독합니다. 아래 예제 코든는 암호화 시스템을 설정하고 재설정할 수 있는 방법을 보여줍니다.

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 폴더 안을 확인해보실 수 있습니다.

메인 화면으로

암호화 시스템 설명

패킷 암호화 시스템은 지정된 설정을 사용하여 다음과 같은 잘 알려진 알고리즘을 적용하여 해당 동작을 수행합니다.

데이터 암호화 프로세스는 다음 단계들로 설명할 수 있습니다.

  1. 데이터 암호화:
    1. 패킷 앞에 고유 순차적 ID가 붙습니다.
    2. 패킷 내용을 기반으로 하는 Hash가 생성되어 데이터 버퍼에 추가됩니다.
    3. 모든 버퍼는 위의 알고리즘을 사용하여 암호화됩니다.
  2. 데이터 복호화:
    1. 수신된 데이터 버퍼가 복호화됩니다.
    2. Hash 코드가 유효한지 확인하고 그렇지 않으면, 패킷은 폐기됩니다.
    3. 수신된 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/

기술문서 TOP으로 돌아가기