Gitfed
bastien-mrq/bt-message/ Commits/ fea900c

Add README

Bastien MARQUES 2026-04-15 11:49 commit fea900c696b4e30c12783c6e08f167168a49f49f parent 0f96047089f2512a7d6189641a31451dfa7fa7eb
1 files changed +63 −0
A README.md +63 −0
README.md
diff --git a/README.md b/README.md new file mode 100644 index 0000000..80fe3ee --- /dev/null +++ b/README.md @@ -0,0 +1,63 @@ +# 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.