bastien-mrq/bt-message / README.md
README.md
Code Preview
# btmessage
Messagerie chiffrée peer-to-peer sans serveur, fonctionnant via Bluetooth et Wi-Fi Direct.
## Principe
btmessage crée un réseau maillé (mesh) local entre les appareils à proximité grâce à **MultipeerConnectivity** (Bluetooth LE + Wi-Fi AWDL). Les messages transitent de proche en proche sans passer par aucun serveur — si deux appareils ne sont pas directement connectés, le message est relayé automatiquement par les appareils intermédiaires.
Chaque message est chiffré de bout en bout avant d'être envoyé. Personne d'autre que le destinataire ne peut le lire, même les appareils qui le relaient.
## Chiffrement
### Messages directs (DM)
Chiffrement hybride post-quantique :
1. **XWingMLKEM768X25519** (CryptoKit natif iOS 26) — KEM hybride combinant ML-KEM-768 (résistant aux ordinateurs quantiques) et X25519 (courbe elliptique classique). Génère un secret partagé via encapsulation/décapsulation.
2. **HKDF-SHA256** — dérive une clé AES-256 à partir du secret partagé (info : `btmessage-v1`).
3. **AES-256-GCM** — chiffrement authentifié du message (nonce 12 octets + tag 16 octets).
### Groupes
Chiffrement symétrique partagé :
1. Le créateur génère une clé AES-256 aléatoire pour le groupe.
2. Cette clé est distribuée à chaque membre, chiffrée individuellement avec sa clé XWing.
3. Les messages de groupe sont chiffrés avec cette clé partagée (AES-256-GCM).
## Fonctionnalités
- Messagerie directe (DM) chiffrée bout-en-bout PQC
- Groupes de discussion avec clé symétrique partagée
- Réseau maillé automatique — pas de configuration, pas de serveur
- Identité persistante via Keychain (UUID + clé privée XWing)
- Routage par inondation avec TTL et cache de déduplication
## Stack technique
| Composant | Technologie |
|-----------|-------------|
| Transport | MultipeerConnectivity (Bluetooth LE + Wi-Fi AWDL) |
| KEM | `XWingMLKEM768X25519` (CryptoKit, iOS 26) |
| Dérivation de clé | HKDF-SHA256 |
| Chiffrement | AES-256-GCM |
| UI | SwiftUI |
| Stockage clés | Keychain + UserDefaults |
## Prérequis
- Xcode 16+
- iOS 26.0 minimum (simulator ou device iOS 26 beta)
- Bluetooth et Wi-Fi activés sur les appareils
## Interopérabilité
Le protocole wire (enveloppes JSON, algorithmes de chiffrement, routage) est documenté dans [`PROTOCOL.md`](./PROTOCOL.md) pour permettre l'implémentation d'un client Android ou autre plateforme.
## Licence
Ce projet est distribué sous la **Bastien-mrq License v1.0.0**.
→ [https://github.com/bastien-mrq/bastien-mrq-license](https://github.com/bastien-mrq/bastien-mrq-license)
Usage personnel, professionnel et commercial autorisé. Modification et redistribution autorisées. La revente du logiciel tel quel et le plagiat d'auteur sont interdits. L'avis de copyright doit être conservé dans toute copie ou distribution.