推奨Unityバージョン: : 2022
テクスチャを暗号化した後、シェーダーを利用してテクスチャを復号化します。
アバターのコピーを防ぎ、リッピングによってアバターのテクスチャを剥がして修正することを防ぐことができます。
OSCプログラムで簡単にパスワードを入力することができます。
OSCのソースコード: https://github.com/Shell4026/ShellProtectorOSC
- Poiyomi 8.0, 8.1, 8.2, 9.0, 9.1(pro), PCSS(より多くのテストが必要)
- lilToon (1.3.8 ~ 1.7.3)(VCC)
- RGB24, RGBA32
- DXT1, DXT5
- Crunch Compressionフォーマットは自動的にDXT1またはDXT5に変換されます。
- テクスチャ暗号化
- 暗号を解読するためのOSCプログラム
- Blendshape難読化
- フォールバック: 友達以外のユーザーには、暗号化ノイズの代わりに16x16テクスチャで見えるようにする機能。
- アバターを右クリックして「Shell Protector」を押してコンポーネントを追加します。
- パスワードを設定し、暗号化するマテリアルやゲームオブジェクトを指定します。
( Modularを使用する場合、以下のプロセスは必要ありません).
- Encryptボタンを押します。
- 新しく生成されたアバターに入ったTestorコンポーネントで暗号化するかどうかを確認し、'Done'ボタンを押します。
- アバターをアップロードします。
- ReleaseにあるShellProtectorOSC.zipをダウンロードし、解凍してShellProtectorOSC.exeを実行します。 (最初に一度だけ実行するだけです。リセットアバターやパラメータ多重化を使用する場合は、継続してオンにしてください。)
- アップロードしたアバターに変更した後、OSCプログラムでユーザーパスワードを入力します。
- もしパスワードが変わってもアバターの外観に変化がなければ、VRChatでアクションメニュー - Options - OSC - Reset Configを押してください。
- それでも問題がある場合は、C:\Users\ユーザー\AppData\LocalLow\VRChat\VRChat\OSCフォルダを消去してください。
詳細原理:https://github.com/seanedwards/vrc-worldobject/blob/main/docs/parameter-multiplexing.md
パラメータ節約技術です。チェック後、OSCを常にオンにしておく必要があり、OSCプログラムにもParameter-multiplexingをチェックする必要があります。
ゲーム内で元の姿に戻るまでの時間が若干増加します。
16桁はVRChatのセキュリティ上の問題が発生する可能性があるため、12桁を推奨します。
パラメータマルチプレックス使用時、サーバーやネットワークの状況により、他のユーザにOSC値が伝達されず、復号化ができない場合があります。
この場合、OSC 1.5.0で追加されたRefresh rateを少し上げてみてください。
暗号化がかかっているときにSafetyがオンになっている人は、アバターを見るときに劣化したバージョンに見えるようにする機能です。
問題発見時、Issuesに上げていただければ幸いです。
<is not supported texture format!>
テクスチャを選択後、Inspectorで圧縮フォーマットをDXT1またはDXT5のいずれかに変更してください。 (透明度のあるテクスチャはDXT5)
<lilToon)Testorコンポーネントでテストしたときに元に戻らない場合>
lilToonのバグなので、無視してアップロードするか、3つの方法のいずれかを試してみてください。
- ShellProtectフォルダ内に作成された自分のアバターフォルダを消去して再暗号化します。
- Unityを再起動してみます。
- Assets - liltoon - Refresh Shaderを押してみます(時間がかかる!)
<特定の部位が単色に見える場合>
再暗号化後、Unityを再起動してください。
<ゲーム内で他の人が見たときに暗号化が解けない場合>
他の人がシェーダーとアニメーションの安全性をオフにするか、あなたをShow Avatarにする必要があります。
それでもダメな場合は、VRChatのパラメータ同期のバグにより、パスワードを変更して再アップロードする必要があります。
パラメータマルチプレックス使用時、サーバーやネットワークの状況により、他のユーザにOSC値が伝達されず、復号化ができない場合があります。
この場合、OSC 1.5.0で追加されたRefresh rateを少し上げてみてください。
<マテリアルにあったテクスチャが消える場合>
メインカラーと同じテクスチャを使用する場合、セキュリティ上の理由でそのテクスチャは削除されます。
例外として、リムライト、アウトラインテクスチャは除外されず、そのまま暗号化されたテクスチャを使用します。
SHA-256でキーを変形した後、XXTEA/Chacha8アルゴリズムを使用してマテリアルのMainTexureを暗号化します。
圧縮テクスチャは色のみを暗号化して容量を減らします。元のテクスチャの形は一部残ります。
テクスチャ自体を暗号化した後、VRChatサーバーにアップロードされます。このテクスチャはゲーム内のシェーダーで復号化されます。
シェーダーやマテリアル、アニメーションなどはコピーされるので、オリジナルに影響はありません。
MainTexture のみを暗号化するため、MainTexture と同じテクスチャをマテリアル内の他の場所に使用すると、セキュリティのために自動的に欠落します。足りない部分は適切なテクスチャで埋めてください。
例外として、リムライトテクスチャとアウトラインテクスチャがメインテクスチャと同じテクスチャの場合、MainTextureと同じ暗号化されたテクスチャを使用します。
メモリはオリジナルより少し多くなります。2K DXT1画像基準で1mb程度大きくなります。
PoiyomiがlilToonより性能が良かったです。
<おおよそのPoiyomi GPUの測定結果> Default : 0.1ms
Point:0.2ms
Bilinear:0.35ms
それほど大きな差はないようですが、パフォーマンスを考えると、必要なテクスチャだけを暗号化することをお勧めします。
基本的に16バイトのキーを持ち、シェーダー内部に保存されるキーとユーザーがVRCパラメータを利用して入力できるキーに分かれています(ユーザーキーと呼びます)。
0バイトのユーザーキーは、コンパイルされたシェーダーをアセンブリアに変えて分析するだけで、知ることができます。
4バイトのユーザーキーは、誰かが時間をかければ解読することができます。 (4バイトのキー = パラメータ32 / 11(パラメータ多重化使用時))
8バイトのユーザーキーは、パーソナルコンピュータでは調べるのに時間がかかるでしょう。 (8バイトのキー = パラメータ64 / 12)
12バイトのユーザーキーからは、現代のコンピュータでは解読できません。 (12バイトのキー = パラメータ96 / 13)
最小パラメータ96(パラメータ多重化使用時13マス)を使い、ユーザーキーの数を増やすと安全です。自分のパラメータスペースを考慮してキーを設定してください。
0バイトのユーザーキーは最小限の防御と見ればよく、単純ツールを利用したツールキディを防ぐには効果的でしょう。
世の中に完璧なセキュリティは存在せず、この方法も簡単ではありませんが、同じワールド内で誰かが粘り強く自分のネットワークパケットを分析すれば、キーを見つけ出す可能性は存在します。
しかし、誰かがユーザーのアバターを無差別に取り出してどこかで共有する方法は、十分なキーサイズを持っていれば100%防ぐことができます。
- BC7対応