> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 安全的遊戲網狀架構通訊

> 適用於 GDK 遊戲的對等和用戶端/伺服器安全通訊指引。

<Note>
  這些最佳做法僅作為範例參考。請自行獨立評估您的實作。
</Note>

最佳做法取決於連線類型 (對等或用戶端/伺服器)。

## 對等

使用 **PlayFab Party**。它會以透明方式處理對等通訊的加密和驗證，強烈建議用於 GDK 遊戲中的所有對等流量。它可在多個平台上使用，並支援跨網路。

請參閱 [PlayFab Party](/zh-TW/build/console-features/networking/game-mesh/playfab-party-intro-networking)。

## 用戶端/伺服器

使用 [**MsQuic**](/zh-TW/build/console-features/networking/game-mesh/msquic-intro-networking)。QUIC 提供內建的安全性與加密功能。除了 Windows 和 Linux 用戶端/伺服器組建外，也提供此程式庫的 GDK 版本。MsQuic 會加密連線，並透過標準 TLS 憑證驗證伺服器；但仍請使用 **XSTS 權杖驗證**，向伺服器驗證用戶端。

### 自訂用戶端/伺服器

如果必須自行實作，請使用 **DTLS**，搭配伺服器 TLS 憑證驗證與用戶端 XSTS 權杖驗證。

透過 GDK Bcrypt API 實作 DTLS 相當複雜，而且容易產生通訊協定錯誤。建議優先使用 [**OpenSSL**](https://openssl.org)：它持續維護、跨平台，且經過廣泛審查。請在遊戲發行時隨附最新公開提供的 OpenSSL 次要版本，並在發行後針對影響您所用功能的安全性揭露進行更新。

OpenSSL 衍生版本或非開放原始碼程式庫並未受到同等程度的維護/審查，請避免使用。

**最低 OpenSSL DTLS 設定：** 加密選項 `HIGH` (僅限「高」加密套件)。為了達到最佳安全性，請限制為同時包含以下**所有**項目的加密套件：

* AES256
* GCM
* SHA256 或更高

標準 OpenSSL 加密清單仍包含可被攻擊的弱加密套件。AES256-GCM 在 XBOX 和新式 CPU 上具有硬體加速。

### 伺服器驗證

透過 DTLS，使用以 GDK 和平台認可之 CA 為根的 SSL 憑證來驗證伺服器。請參閱 [Microsoft 信任的根參與者](https://learn.microsoft.com/security/trusted-root/participants-list)。

在各伺服器之間使用**萬用字元憑證**，例如以 `*.servers.mytitle.com` 涵蓋 `na-1230.servers.mytitle.com` 之類的名稱。這樣可為動態配置的執行個體預先安裝憑證。

MsQuic 使用與 HTTPS Web 要求相同的驗證路徑，並公開用於根伺服器憑證的設定 API。請參閱 [MsQuic 中的伺服器驗證](/zh-TW/build/console-features/networking/game-mesh/msquic-intro-networking)。

### 用戶端驗證

用戶端也應透過 DTLS，使用以 CA 為根的憑證進行驗證。

<Warning>
  請勿在遊戲套件中隨附用戶端憑證。它無法繫結至特定使用者或用戶端執行個體，因此無法安全地進行驗證。
</Warning>

請改為在執行階段安全地發行用戶端憑證，並透過經 XSTS 驗證的遊戲服務來驗證這些憑證。兩種要求類型就已足夠：

**1. 發行用戶端憑證**

使用 XSTS 權杖資訊發行由遊戲用戶端 CA (`clients.mytitle.com`) 簽署的新分葉憑證。將到期時間與 XSTS 權杖相符 (通常為 4 小時)。憑證名稱包含**安全的隨機 nonce** (例如 `l8n4ulxga3.clients.mytitle.com`)，絕對不要包含 PII / XUID / consoleID (nonce 在 DTLS 交握中是可見的)。

服務會在其內部資料庫中儲存：憑證名稱、雜湊、到期時間、關聯的玩家 XUID、裝置類型。請移除已過期的項目。

```http theme={null}
GET https://clientauth.mytitle.com/user([XUID])/create HTTP/1.1
Authorization: XBL3.0 x=[XSTS token information]
```

成功回應：

```json theme={null}
{ "Certificate": [
  { "Client ID Nonce": "l8n4ulxga3",
    "Expiration Time": "2021-07-04 12:00:00 UTC",
    "Certificate": "[base64 private certificate data]" }
]}
```

用戶端會追蹤到期時間，並在所有 DTLS 連線中使用該憑證；在到期時或到期前進行更新。

**2. 驗證用戶端憑證**

僅限伺服器的端點 (無法公開存取)。接受成對的憑證與預期 XUID，並根據內部資料庫傳回有效或無效。已過期的項目為無效。裝置類型會進一步限制有效性 (封鎖跨裝置通訊)。

```http theme={null}
POST https://clientauth.mytitle.com/server/validate HTTP/1.1
```

要求本文：

```json theme={null}
{ "Certificate Request": [
  { "Certificate": "[base64 public certificate data]",
    "Expected Client ID": "[expected XUID]" }
]}
```

回應：

```json theme={null}
{ "Certificate Response": [ { "Result": "valid" } ] }
```

伺服器只有在有效時才會繼續。請在伺服器上快取已驗證的憑證，直到到期為止。

為了提高效率，請將驗證整合到配對 / 伺服器配置流程中：配置服務可以為新工作階段傳回預期的憑證 nonce 或雜湊，以及預期的 XUID。

請參閱 [MsQuic 中的用戶端驗證](/zh-TW/build/console-features/networking/game-mesh/msquic-intro-networking)。

此流程也適用於對等連線，但需要非常小心，以防止重複憑證或身分探測攻擊。為了簡單起見，建議使用 **PlayFab Party** 進行安全的對等通訊。

## 訊息序號

將序號包含在加密的承載中，讓攻擊者無法觀察或修改序號來丟棄、複製或重新排序封包。序號不應可預測：

* 以**安全的隨機起始值**初始化，並單調遞增。
* 不要使用 `rand()` 或雜湊函式，它們在密碼編譯上並不安全。
* 使用 `BCryptGenRandom` 產生種子。

MsQuic 會自動加密整個資料承載，包括自訂序號。

## 用戶端/伺服器服務品質 (QoS)

QoS UDP 探查會選取最佳的資料中心/伺服器。它們通常與使用者身分無關，而且可能在登入前執行，因此無法進行完整的驗證和加密。緩解方式：

* **絕對不要**在 QoS 承載中包含使用者、用戶端或伺服器資料。將探查視為可公開存取，請將承載隨機化或歸零。
* **不要剖析承載資料。** 攻擊者會修改承載以觸發剖析器錯誤。只根據封包標頭資訊做出回應。
* 測試並強化 QoS 剖析實作，盡可能保持簡單。並對其進行模糊測試。

請在**專用的 QoS 伺服器**上處理 QoS，而不是遊戲進行伺服器，以隔離影響 (包括 DDoS)。

## 相關 API 文件

* [PlayFab Party](/zh-TW/services/playfab/multiplayer/networking)：內建 DTLS 的語音 + 資料平面
* [網路 API 參考](/zh-TW/reference/networking/gc-reference-networking-toc)：Winsock 介面與安全裝置位址
* [XNetworking API 參考](/zh-TW/reference/networking/xnetworking/xnetworking_members)：憑證驗證與連線提示
* [XSAPI 多人遊戲參考](/zh-TW/reference/live/xsapi-c/multiplayer_c/multiplayer_c_members)：建立網狀架構的 MPSD 工作階段
* [XSAPI Multiplayer Manager 參考](/zh-TW/reference/live/xsapi-c/multiplayer_manager_c/multiplayer_manager_c_members)：較高層級的協調流程

## 另請參閱

* [PlayFab Party (GDK 概念)](/zh-TW/build/console-features/networking/game-mesh/playfab-party-intro-networking)
* [MsQuic (GDK 概念)](/zh-TW/build/console-features/networking/game-mesh/msquic-intro-networking)
* [Winsock (GDK 概念)](/zh-TW/build/console-features/networking/game-mesh/winsock-intro-networking)
* [遊戲網狀架構概觀](/zh-TW/build/console-features/networking/game-mesh/game-mesh-toc)
* [OpenSSL](https://openssl.org)
* [通訊安全性概觀](/zh-TW/build/game-principles/security/communication-security-overview)


## Related topics

- [Beta 版與 XBOX Game Preview 遊戲產品的需求](/zh-TW/publishing/certification/cert-beta-game-preview.md)
- [XR-015 管理玩家通訊](/zh-TW/publishing/certification/xr/xr-015.md)
- [XBOX 主機遊戲的認證測試 XBOX 需求](/zh-TW/publishing/certification/console-cert-tested-requirements.md)
- [NDA 主題目錄 - Microsoft Learn 線上連結](/zh-TW/nda/nda-topic-directory.md)
- [XBOX 遊戲的 XBOX 需求](/zh-TW/publishing/certification/xbox-requirements.md)
