PUN Classic (v1)、PUN 2、Boltはメンテナンスモードとなっております。Unity2022についてはPUN 2でサポートいたしますが、新機能が追加されることはありません。お客様のPUNプロジェクトおよびBoltプロジェクトが停止することはなく、将来にわたってパフォーマンス性能が落ちることはありません。
今後の新しいプロジェクトについては、Photon FusionまたはQuantumへ切り替えていただくようよろしくお願いいたします。
Bolt接続暗号化システム
セキュリティはPhoton Boltで開発する上での主な目的の一つです。この理由から、Boltはネイティブ暗号化システムを内蔵しており、各パッケージが暗号化/復号化されていることを保証し、第三者による変更を困難にします。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
フォルダ内、または Samples Repo で確認することができます。
暗号化システムの説明
パケット暗号化システムは、以下のよく知られたアルゴリズムを指定された設定で適用して、その動作を実現します。
- 高度暗号化規格(AES) (ドキュメントページ):
- キーサイズ:256 bit
- モード: 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/