付与方法
ロールがプレイヤーに届く方法はいくつかあります。どれが適用されるかは、そのロールをどう設定するかによって決まり、ほとんどの方法は同じロールで組み合わせて使うことができます。
手動(ワールド内パネル)
セキュリティ担当者は、管理パネルのプレイヤーカード一覧から、ワールドに現在いる任意のプレイヤーの任意のロールをオン・オフできます。
この方法で付与されたロールは常に 一時的 です — 同じパネルから再び取り消すことができます — ただし、そのロールに Persistent フラグが付いている場合は、プレイヤーが同じインスタンスを離れて再参加すると自動的に元に戻ります。
パネルからの付与・剥奪には、操作するプレイヤー自身が Is Security フラグの付いたロールを保持している必要があります — セキュリティ権限 を参照してください。
ホワイトリスト
ロールは、VRChat の表示名で照合される特定プレイヤーのリストとともに設定できます。ホワイトリストに登録されたプレイヤーは参加した瞬間にロールを受け取り、この方法で付与されたロールは常に 永続的 です — そのプレイヤーがホワイトリストに登録され続けている限り、パネルから取り消すことはできません。
ホワイトリストのソースは 2 種類あり、どちらもまったく同じ照合ロジックを共有します。
- 手動リスト。
SS_SecuritySystemの Unity Inspector に、playerName/ role のペアとして直接入力します。 - URL 取得リスト。
userListUrlに指定した外部のプレーンテキストファイル(Pastebin など)から取得し、playerName, roleの形式でプレイヤーごとに 1 行ずつ記述します。このリストはワールド読み込み時に一度だけ自動的に取得され、ダウンロードするのはオブジェクトのオーナーのみです。ロールは Use URL Whitelist が有効になっている場合のみ URL 取得エントリを受け付けます。手入力のエントリはこのフラグの影響を受けません。
URL の取得が完了した時点ですでにワールドにいたプレイヤー(取得が解決するより前に参加しているインスタンスオーナーを含む)は、取得完了後に自動的にホワイトリストと再照合されます — 再参加してもらう必要はありません。
インスタンスオーナー
任意のロールに For Instance Owner フラグを付けることで、現在のワールドインスタンスを作成したプレイヤーに、ホワイトリストに名前が載っているかどうかに関わらず、自動的かつ永続的に付与されます。
セキュリティキーパッド
プレイヤーが数字のパスワードを入力する、ワールド内の物理的なキーパッドです。入力内容がまだ持っていないロールのパスワードと一致すると、そのロールが付与されます。レート制限や表示を含めたキーパッドの詳しい挙動は Keypad ページで扱っていますが、要点は以下のとおりです。
- この方法で付与された場合、パネルからの手動付与と同様に デフォルトでは一時的 です — ただし Keypad Permanent が有効なロールの場合は、代わりに 永続的 に付与されます。
- ログアウトとしても機能します。 すでに保持している一時的なロールのパスワードを入力すると、再付与ではなく取り消しになります。永続的に保持されているロール(ホワイトリスト、インスタンスオーナー、またはキーパッド経由の永続付与)は、この方法では取り消せません。
- ロールレイヤー も考慮されます。 すでに保持しているロールとレイヤーを共有するロールのパスワードを入力すると、パネルから付与したときと同様に自動的に入れ替わります。
- キーパッドの表示には、現在ログインしている状態のロールが常に表示されます — ログイン中のロール表示 を参照してください。
2 要素認証ロール
Two Factor フラグが付いたロールは、以下の 両方 を必要とします — どちらか片方だけでは不十分です。
- そのロールのホワイトリストに登録されていること(手動・URL 取得のどちらでも可)、かつ
- そのロールの正しいキーパッドパスワードを入力すること。
2 要素認証ロールは、ホワイトリストに登録されているだけでは参加時に自動付与されません — プレイヤーはキーパッドでパスワードを入力する必要があります。同様に、ホワイトリストに登録されていないプレイヤーが 2 要素認証ロールの正しいパスワードを入力しても、何も付与されません。このゲートはホワイトリストによる自動付与とキーパッドにのみ適用されます — インスタンスオーナーへの自動付与やパネルからの手動付与は影響を受けず、2 要素認証ロールに対しても他のロールとまったく同じように機能します。
永続性
Persistent フラグが付いたロールは、インスタンスが続いている間は記憶されます。プレイヤーがそのロールを一時的に(パネルまたはキーパッドから)保持した状態でワールドを離れた場合、同じ ワールドインスタンスに再参加すると自動的に元に戻ります。この記憶はインスタンスが閉じるとリセットされ、永続的なロールには一切適用されません — そちらは参加のたびにどのみち再付与されるためです。
Encryption
URL 取得のホワイトリストは、取得元でプレーンな読み取り可能なテキストとして保存する代わりに、任意で 暗号化 して保存し、あなたが設定した共有キーを使ってワールド側で自動的に復号することもできます。これにより、リンクを見つけた誰かにリモートのプレイヤー/ロールリストを読み取られることを防ぎつつ、ワールド側では通常どおりそれを利用できます。
仕組み
- 暗号化キーを選びます。 これは単に自分で決める単語やフレーズであり、キー生成器や形式の決まりはありません。誰かがこのキーを知っていればあなたのホワイトリストを復号できるため、非公開にしておいてください。
- ホワイトリストをプレーンテキストで作成します。 暗号化しない場合とまったく同じように、
playerName, roleのペアを 1 行につき 1 つずつ記述します。 - 選んだキーを使って、そのテキストを暗号化します。 下記の暗号化ツールを使用します。プレーンな
playerName, roleの行を入力すると、暗号化されたテキストが出力されます。 - 暗号化したテキストをアップロードします。 Pastebin など、あなたの User List URL が指している場所に、プレーンテキスト版を完全に置き換える形でアップロードします — ワールドが取得するホワイトリストは、元の行ではなく暗号化されたテキストになります。
- 同じキーを入力します。
SS_SecuritySystemの Encryption Key フィールドに同じキーを入力し、Encrypt Remote Strings を有効にします。ワールドは暗号化されたテキストを取得すると、そのキーを使ってローカルで復号し、ホワイトリストとして読み込む前に元のplayerName, roleのリストへ戻します。
手順 3 で暗号化に使ったキーと、手順 5 で設定する Encryption Key は 完全に一致 している必要があります — これは証明書ベースのシステムではなく単純な共有キー方式の暗号なので、公開鍵・秘密鍵のペアは存在しません。キーが一致していなくてもきれいに失敗するわけではなく、単に意味不明なデータに復号されてしまい、どのプレイヤーもホワイトリストと一致しなくなります。
- プレーンなプレイヤー名・ロール名にのみ確実に対応しており、任意のテキスト向けではありません。
- 複数行のリスト全体が 1 つのブロックとしてまとめて暗号化されるため、元は複数行あっても、暗号化された結果は常に 1 行の途切れない長い文字列になります — これは仕様どおりの動作です。
暗号処理を自分で書く必要はありません。Unity Editor で CrZVRC → Security System → Encryption Tool を開きます。選んだキーを入力し、プレーンな playerName, role の行を貼り付けて Encrypt をクリックすると、その結果をプレーンテキストの代わりに Pastebin へアップロードできます。同じウィンドウで暗号化されたテキストを Decrypt してプレーンな行に戻し、内容を確認することもできます。