diff --git a/NETCODE-RND.md b/NETCODE-RND.md index c66d58a..c4c41a8 100644 --- a/NETCODE-RND.md +++ b/NETCODE-RND.md @@ -88,3 +88,22 @@ On a amené un serveur dédié gameplay The Cycle plus loin qu'aucun projet publ (le projet communautaire deiteris/Prospect n'émule que les services en ligne, pas le netcode de jeu). Le mur restant — DTLS-PSK dont la clé est derrière un packer anti-triche — est un chantier crypto + RE dynamique d'un autre ordre de grandeur. + +## MAJ (2026-07-16) — mur DTLS franchi (côté serveur) + +- **PSK récupérée** : la clé 32 octets a été obtenue au runtime (dump du `.text` + déchiffré du client via `/proc//mem` sous Proton — BattlEye n'a pas de driver + kernel sous Linux). Stockée dans **Vault** (`secret/the-cycle`, clé + `GAMESERVER_DTLS_PSKS`, format `user_id:hex32`), **jamais dans le repo**. +- **Serveur DTLS-PSK implémenté** (BouncyCastle) : + - `DtlsPskStore` (env `PROSPECT_DTLS_PSKS`), `DtlsPacketTransport` (pont bloquant→paquet), + `ProspectPskTlsServer` (DTLS 1.2, identité=user_id), `DTLSHandlerComponent` (pipeline). + - `UWorld` sur `NMT_Hello` chiffré : PSK connue → `NMT_EncryptionAck` + handshake. + - Compile (0 erreur). **Non validé en live.** +- **Reste (itération live obligatoire, invalidable hors client)** : + 1. ordre exact du pipeline `[DTLS, Stateless]` et routage des records de handshake + (émis via `LowLevelSend` — doivent porter le framing stateless attendu) ; + 2. framing DTLS-sur-PacketHandler d'UE (record layer, cookie DTLS éventuel) ; + 3. bascule handshake→données applicatives. + Méthode : lancer `Prospect.Server.Game` avec la PSK, diriger le client dessus, itérer + sur les logs serveur.