Spécifications cryptographiques de CryptPeer
Spécification cryptographique publique de référence fondée sur un système d'authentification à clé segmentée
Version : 1.2-public
Date : 2026-03-11
Statut : Spécification cryptographique publique de référence
Ce document décrit les éléments publics de l’architecture cryptographique de CryptPeer. Il fixe les primitives publiquement utilisées, les invariants normatifs de haut niveau, la hiérarchie logique des clés applicatives et le rôle d’un système d’authentification à clé segmentée fondé sur le brevet de référence. Les mécanismes internes non publics, paramètres sensibles, détails d’implémentation propriétaires et dispositifs complémentaires confidentiels sont hors périmètre.
Cartouche d'évolution
Le tableau suivant trace l'historique des versions publiques de ce document.
| Version | Date | Auteur(s) | Résumé des évolutions |
|---|---|---|---|
| 1.2-public | 2026-03-11 | Équipe CryptPeer / Freemindtronic | Révision de niveau “référence publique” : clarification normative, explicitation des invariants de sécurité, séparation plus nette des couches applicatives, meilleure définition des usages de KDF et d’AES-256-GCM, tout en restant centrée sur le brevet de clé segmentée et sans divulgation des mécanismes complémentaires non publics. |
Partie I – Objet, périmètre et conventions
1. À propos de ce document
Ce document spécifie les aspects cryptographiques publics de CryptPeer, système de communication sécurisé reposant sur un système d'authentification à clé segmentée et sur une architecture de chiffrement de bout en bout.
Objectifs :
- décrire de manière normative les primitives cryptographiques publiques utilisées ;
- formaliser le rôle du moteur de clé segmentée dans l’architecture applicative ;
- décrire la hiérarchie logique des clés applicatives et leurs séparations d’usage ;
- fournir une base publique de lecture pour développeurs, architectes sécurité et auditeurs.
Le présent document n’expose pas les mécanismes internes non publics du moteur, les paramètres sensibles d’implémentation, les constructions propriétaires complémentaires, ni les dispositifs non nécessaires à la compréhension du modèle public.
2. Périmètre fonctionnel et cryptographique
2.1 Fonctions couvertes
Sont couverts :
- messagerie chiffrée 1:1 et de groupe au sein d'une instance CryptPeer ;
- transferts de fichiers et pièces jointes ;
- enregistrements audio/vidéo capturés localement puis protégés ;
- appels audio/vidéo et partage d'écran ;
- sauvegardes chiffrées multi-supports ;
- chiffrement et déchiffrement autonome de fichiers ;
- exports et imports protégés de données ;
- modes standard, masqué et défense ;
- moteur d'authentification à clé segmentée et son API publique logique ;
- hiérarchie de clés applicatives fondée sur
K_seg.
2.2 Hors périmètre
Ne sont pas couverts, sauf mention explicite :
- mécanismes internes non publics du moteur de clé segmentée ;
- formats internes propriétaires, paramètres sensibles et politiques détaillées d’implémentation ;
- mécanismes propriétaires complémentaires de licence, d’attestation, d’audit ou de protection locale ;
- procédures organisationnelles et mesures physiques ;
- analyses réglementaires détaillées par juridiction.
3. Notations, types et conventions
3.1 Types
- Un octet : valeur dans
{0,…,255}. - Chaîne d'octets :
b ∈ {0,1}^*; on note|b|la longueur en octets. - Chaîne de caractères : encodée en UTF-8 avant tout traitement cryptographique.
- Entier non signé : encodé de manière déterministe lorsqu'il est inclus dans une entrée de KDF.
3.2 Opérations
- Concaténation :
X || Y. - Hachage :
H(x). - PBKDF2 :
PBKDF2_HMAC_SHA256(P, salt, iter, L). - HKDF :
HKDF_SHA256(salt, IKM, info, L). - Encodage d’un entier :
encodeUint64(n)si requis par le contexte.
3.3 Notation des clés
K_pair: clé logique d'appairage ou d’autorisation, gérée par le moteur segmenté ;K_seg: clé racine locale d’application exposée à CryptPeer par le moteur ;K_conv: clé de conversation ;K_file: clé associée au chiffrement de fichiers, d’exports ou de sauvegardes ;K_msg: clé éphémère associée à un message, une session ou une fenêtre d’usage ;K_view: clé utilisée pour un affichage temporairement déchiffré.
Sauf mention explicite, les clés symétriques utilisées pour le chiffrement applicatif sont de longueur 256 bits.
3.4 Conventions normatives
Dans ce document :
- DOIT exprime une exigence normative ;
- NE DOIT PAS exprime une interdiction normative ;
- DEVRAIT exprime une recommandation forte ;
- PEUT exprime une possibilité ou une option d’implémentation.
4. Référentiels et principes de conception
CryptPeer s'appuie publiquement sur :
- AES-256-GCM pour le chiffrement authentifié des contenus applicatifs ;
- SHA-256 et, selon les usages publics documentés, SHA3-256 ;
- PBKDF2-HMAC-SHA-256 et HKDF-SHA-256 pour les dérivations publiques décrites ;
- le système d'authentification à clé segmentée breveté
(WO2018154258A1),
modélisé comme un composant fournissant :
- une API restreinte ;
- des garanties de non-export direct ;
- une exposition éphémère des secrets applicatifs utiles.
La conception respecte les principes :
- robustesse symétrique 256 bits ;
- séparation claire des rôles :
- moteur segmenté,
- client,
- serveur relais ;
- séparation cryptographique des usages par labels et contextes ;
- dérivation locale à la demande ;
- volatilité maximale des secrets applicatifs ;
- minimisation des métadonnées et des traces ;
- absence de divulgation publique des mécanismes internes non nécessaires à la compréhension du modèle.
Partie II – Architecture et doctrine de sécurité
5. Architecture globale de CryptPeer
5.1 Composants
Une instance CryptPeer comprend :
- un serveur relais
S:- auto-hébergé ou exploité sous contrôle ;
- stockant uniquement des contenus et métadonnées déjà protégés ;
- un bundle client web :
- code JS/TS/WASM servi par
S; - exécuté dans le navigateur du terminal ;
- code JS/TS/WASM servi par
- un moteur local de clé segmentée :
- logiciel et/ou matériel ;
- exposant
K_segau client via une interface locale restreinte ;
- un annuaire local structurant les utilisateurs en catégories.
Une instance CryptPeer ne repose pas sur une fédération globale obligatoire.
5.2 Rôles
- Client :
- dérive toutes les clés applicatives à partir de
K_seget de données publiques ; - effectue tout chiffrement et tout déchiffrement ;
- gère l'affichage et les protections locales associées.
- dérive toutes les clés applicatives à partir de
- Moteur de clé segmentée :
- gère
K_pairet ses segments ; - restitue éphémèrement
K_segselon une politique locale.
- gère
- Serveur relais
S:- sert le client web ;
- authentifie et relaie les connexions ;
- stocke et relaie des blocs chiffrés.
- Supports de sauvegarde :
- reçoivent des backups déjà chiffrés.
5.3 Gestion de licence matérielle (EviEngine)
CryptPeer peut intégrer la technologie EviEngine de Freemindtronic pour la gestion des licences sans serveur externe ni base de données centralisée. Ce composant ne fait pas partie du chemin de chiffrement des contenus applicatifs, mais contribue au modèle de souveraineté, d’autonomie opérationnelle et de fonctionnement hors ligne.
Propriétés principales du modèle de licence :
- Licence liée au matériel :
- la licence PEUT être associée à des caractéristiques matérielles de la machine ;
- elle n'est pas conçue comme une identité nominative centralisée.
- Sans serveur ni base de données de licence :
- aucun serveur de licence externe n'est requis pour valider l'usage local ;
- aucune base de données centralisée n'est nécessaire ;
- la vérification de la licence est réalisée localement.
- Fonctionnement hors ligne :
- la validation de licence PEUT fonctionner sans connexion Internet ;
- la continuité de service ne dépend pas d'un tiers distant.
- Minimisation des données :
- aucun compte utilisateur centralisé n'est structurellement requis pour la licence ;
- aucune télémétrie de licence vers un cloud tiers n'est nécessaire dans le modèle souverain.
D'un point de vue cryptographique, la gestion de licence via EviEngine est orthogonale à la sécurité des contenus. Les primitives, la hiérarchie de clés et les protocoles décrits dans les parties suivantes restent analytiquement séparés de cette fonction.
Les détails cryptographiques internes d'EviEngine ne relèvent pas du présent document public.
6. Modes de déploiement
6.1 Mode local-only
En mode local-only :
Sn'est accessible que sur un réseau local ou fermé ;- aucune visibilité directe depuis Internet n'est requise ;
- toutes les communications restent dans la bulle réseau locale.
6.2 Mode avec accès distant
En mode distant :
Sest derrière un routeur, un pare-feu ou un reverse proxy ;- un nom de domaine ou sous-domaine PEUT être exposé ;
- TLS DOIT être utilisé pour sécuriser le transport HTTP(S).
Le contenu applicatif est protégé côté client avant transit et stockage.
6.3 Auto-portabilité
L'instance S PEUT être déployée sur :
- Raspberry Pi 5 ;
- mini-PC fanless ;
- serveurs, NAS, VPS Linux.
Le code serveur et les données protégées PEUVENT être déplacés sous réserve de protéger les secrets d'administration et de respecter le niveau de durcissement requis.
7. Client web universel
7.1 Principe
CryptPeer fournit un client unique :
- implémenté en JS/TS/WASM ;
- exécuté dans un navigateur moderne ;
- déployé de manière homogène sur différents terminaux.
7.2 Conséquences
- une seule base de code cliente à auditer et durcir ;
- mises à jour centralisées via
S; - homogénéité de comportement entre terminaux compatibles.
Les risques spécifiques au navigateur restent pris en compte dans le modèle de menace.
8. Modes de fonctionnement
8.1 Mode CryptPeer (standard)
Fonctionnalités :
- messagerie 1:1 et de groupe ;
- transferts de fichiers et pièces jointes ;
- enregistrements audio/vidéo protégés ;
- appels audio/vidéo et conférences ;
- backups chiffrés.
Propriétés cryptographiques :
- chiffrement de bout en bout fondé sur
K_seg; - dérivations locales séparées par usage ;
- aucune clé de contenu sur le serveur.
8.2 Mode CryptPeer Masqué
Objectif : réduire l'exposition visuelle.
- affichage protégé par défaut selon la configuration ;
- déchiffrement explicite d'une conversation ;
- re-protection automatique de la vue :
- au bout d'un délai ;
- ou sur évènement (changement d'onglet, perte de focus, etc.) ;
- effacement des buffers de clair après usage lorsque possible.
Ce mode PEUT utiliser une clé de vue K_view dérivée de K_seg.
8.3 Mode CryptPeer Defense
Objectif : usages régaliens ou hautement sensibles. En savoir plus →
- instance et paramètres dédiés ;
- réduction maximale de la persistance ;
- politique RAM-only ou no-logs selon configuration ;
- historique réduit voire absent selon les besoins.
9. Multi-serveurs favoris et absence de fédération
9.1 Liste de favoris
Le client maintient localement :
Favorites = { (label_i, url_i) }_i
L'utilisateur choisit à tout instant un seul serveur S auquel se connecter.
9.2 Aucun maillage obligatoire
Il n'y a pas, dans l’architecture de référence :
- de fédération globale imposée ;
- d’annuaire universel imposé ;
- de dépendance systémique à un routage inter-instances.
Conséquences :
- chaque instance
SPEUT rester une bulle indépendante ; - la cartographie globale des communications est réduite.
10. Annuaire, catégories et cloisonnement logique
10.1 Annuaire local
Chaque instance S PEUT maintenir un annuaire :
- ensemble d'utilisateurs ;
- identifiants et informations nécessaires à l'authentification ;
- données protégées selon leur sensibilité.
10.2 Catégories de contacts
L'administrateur PEUT associer chaque utilisateur à une ou plusieurs catégories :
C = { C_1, C_2, … }
Ces catégories servent à structurer les autorisations et le cloisonnement logique.
10.3 Groupes et cloisonnement
Ce cloisonnement limite la propagation latérale d'une compromission de compte et les risques d’exposition inter-périmètres au sein d'une même instance.
11. Doctrine « Zero Trust. Zero Cloud. Zero Trace. »
11.1 Zero Trust
- le serveur
Sest non porteur des secrets de contenu ; Sne détient aucune clé de déchiffrement applicative ;- les dérivations applicatives critiques DOIVENT être réalisées côté client avec
K_seg.
11.2 Zero Cloud
- aucun secret structurant (
K_pair, segments,K_seg, clés de contenus) n'est confié à un service cloud tiers ; - les supports distants ne reçoivent que des données préalablement chiffrées.
11.3 Zero Trace
- dérivation à la demande, effacement rapide des clés ;
- pas de clair persistant côté client au-delà de ce qui est strictement nécessaire au fonctionnement ;
- journaux minimaux côté serveur ;
- réduction maximale des traces persistantes selon le mode choisi.
12. Modèle de menace et hypothèses
12.1 Adversaires pris en compte
- Adversaire serveur :
- contrôle de
S(root, base, code servi) ;
- contrôle de
- Adversaire réseau :
- interception, MITM, observation ;
- Adversaire local :
- malware, vol de terminal, analyse post-mortem ;
- Adversaire visuel :
- capture d'écran, observation directe, caméra ;
12.2 Hypothèses de confiance
- moteur segmenté conforme au modèle public du brevet de référence ;
- navigateurs et OS raisonnablement à jour ;
- adversaire ne disposant pas simultanément et durablement de tous les segments requis.
12.3 Hors périmètre
- attaques matérielles sophistiquées de laboratoire ;
- compromission simultanée et durable de tous les segments sur tous les supports ;
- 0-day critiques permettant l'exfiltration instantanée de toute la mémoire sensible.
Partie III – Primitives cryptographiques et RNG
13. Générateur de nombres aléatoires
13.1 Source d'entropie
Le client DOIT utiliser :
- l'API CSPRNG du système / navigateur (ex :
window.crypto.getRandomValues) ; - ou un équivalent de robustesse comparable.
Le serveur, lorsqu'il génère des valeurs aléatoires non critiques pour les secrets applicatifs, DOIT utiliser une source CSPRNG appropriée.
13.2 Usage
Le RNG est utilisé pour :
- IV/nonce AES-GCM ;
- salts aléatoires ;
- identifiants techniques aléatoires lorsqu'ils ne sont pas dérivés.
14. Fonctions de hachage
CryptPeer utilise publiquement :
- SHA-256 pour :
- hachage d'identifiants techniques ;
- construction de certains salts déterministes publics ;
- SHA3-256 comme option publique de durcissement pour certains usages documentés.
Notation :
H256(x) = SHA-256(x);H3_256(x) = SHA3-256(x).
15. Fonctions de dérivation de clés (KDF)
15.1 Principes généraux
- toute dérivation DOIT être déterministe pour un même jeu d’entrées ;
- les usages distincts DOIVENT être séparés par le champ
infoou un label équivalent ; - une même clé NE DOIT PAS être réutilisée directement pour plusieurs finalités applicatives différentes ;
- les dérivations publiques documentées n’exposent pas les détails internes de la KDF segmentée du moteur.
15.2 PBKDF2-HMAC-SHA-256
Paramètres publics par défaut :
iter = 100000;L = 32octets (256 bits).
Usage :
- dérivations publiques déterministes de base sur identifiants ou contextes non secrets ;
- construction de clés de base servant ensuite d’entrée à des dérivations ancrées sur
K_seg.
15.3 HKDF-SHA-256
Appel :
HKDF_SHA256(salt, IKM, info, L) -> OKM
Usage :
- dérivation de
K_conv,K_file,K_msg,K_viewà partir deK_seget de contextes applicatifs ; - séparation cryptographique des usages par le champ
info.
16. Chiffrement authentifié
16.1 AES-256-GCM
Paramètres publics :
- clé : 256 bits ;
- nonce/IV : 96 bits ;
- tag d'authentification : 128 bits.
L'IV DOIT être :
- soit généré aléatoirement pour chaque chiffrement ;
- soit dérivé de manière à garantir son unicité par clé.
Dans CryptPeer :
- les messages utilisent un IV unique par chiffrement ;
- les fichiers utilisent un IV unique par chiffrement ;
- les formats logiques publics sont décrits en Annexe D.
16.2 Données authentifiées associées
Lorsque des AAD sont utilisées, elles DEVRAIENT inclure des éléments non secrets de contexte, par exemple :
- version du format ;
- identifiant logique de conversation ou de fichier ;
- type de message ou de bloc ;
- mode d’usage applicable.
16.3 Échec de déchiffrement
En cas d’échec d’authentification GCM :
- le contenu DOIT être rejeté ;
- aucun plaintext partiel NE DOIT être exposé ;
- la tentative DOIT être traitée comme une erreur d’intégrité ou de contexte.
Partie IV – Moteur d'authentification à clé segmentée
17. Rôle et positionnement du moteur segmenté
Le moteur de clé segmentée :
- gère
K_pair, clé logique d'appairage ou d’autorisation segmentée ; - n'expose pas directement
K_pairen clair au client ; - restitue à CryptPeer une clé racine locale
K_segvia une API locale restreinte ; - applique des politiques de segmentation (ordre, facteurs, limites de tentatives, contexte).
CryptPeer le considère comme une boîte noire présentant les propriétés de la section 20. Les détails d'implémentation internes relèvent du brevet international WO2018154258A1 de Freemindtronic et de documents techniques internes non publics.
Référence : Pour plus d'informations sur le brevet de référence implémenté dans CryptPeer, consultez la page Brevet Clé Segmentée.
18. Modèle fonctionnel public
18.1 Entités
K_pair: clé logique d'appairage ou d’autorisation ;Segment: unité stockée sur un support, un facteur ou un contexte ;Policy: politique locale définissant les conditions d’obtention deK_seg;K_seg: clé racine locale d’application fournie au client.
18.2 Propriétés publiques
Le moteur présente publiquement les propriétés suivantes :
- la clé logique d’origine est répartie en plusieurs segments ;
- les segments PEUVENT être portés par plusieurs supports ou facteurs ;
- la recomposition utile n’est que temporaire et en mémoire volatile ;
- l’application ne manipule pas directement le secret complet d’origine ;
- une racine locale d’application peut être fournie à un composant autorisé.
19. Interface fonctionnelle publique
Interface minimale exposée au client CryptPeer :
type RootContext = {
mode: "standard" | "masque" | "defense";
serverId: string;
localId: string;
categoryId?: string;
deviceId?: string;
appVersion?: string;
};
interface SegmentedKeyEngine {
getRootKey(policyId: string, context: RootContext): Promise<ArrayBuffer>; // K_seg
clear(): Promise<void>;
}
19.1 getRootKey
- entrée :
policyId: identifiant de la politique de segmentation à utiliser ;context: contexte logique (instance, mode, appareil).
- sortie :
K_seg: chaîne d'octets de longueur au moins 32 octets.
Conditions :
- la recomposition de
K_pair, si nécessaire, est effectuée en mémoire volatile ; K_segn'est maintenue qu'en mémoire, pour une durée minimale.
19.2 clear
Efface :
- toute copie temporaire de
K_seg; - tout matériel sensible temporaire lié à l’usage du moteur.
20. Propriétés de sécurité requises
Le moteur DOIT garantir au minimum :
- Non-export de K_pair et des segments
- aucun appel d'API ne permet de récupérer
K_pairou un segment brut exploitable.
- aucun appel d'API ne permet de récupérer
- Recomposition éphémère
K_pair, si recomposé, etK_segne résident qu'en mémoire volatile ;- effacement actif après usage.
- Politique de segmentation
- respect des
policyId:- nombre et type de segments requis ;
- ordre ;
- limites de tentatives ;
- contextes autorisés.
- respect des
- Liage au contexte d’usage
K_segDOIT dépendre de :K_pair;policyId;context;- d’un libellé d’usage applicatif.
- Résistance aux attaques locales raisonnables
- extraction directe des segments ou de
K_pairrendue difficile ; - protection contre la simple inspection du stockage logiciel.
- extraction directe des segments ou de
- Fail-closed logique
- si la politique n’est pas satisfaite,
K_segNE DOIT PAS être restituée ; - aucun secret partiel exploitable NE DOIT être exposé à l’application.
- si la politique n’est pas satisfaite,
21. Intégration avec les supports matériels
Le moteur PEUT intégrer :
- des HSM NFC ;
- des HSM PGP (PC) ;
- d'autres supports souverains.
CryptPeer n'impose pas un type particulier de support, mais exige que :
- les segments stockés sur ces supports soient non-exportables en clair ;
- l'utilisation du support s'intègre dans la politique de segmentation.
Partie V – Hiérarchie de clés applicatives
22. Vue d'ensemble
K_pair (segmentée, moteur)
↓ KDF_segmented(policyId, context, "CryptPeer-root")
K_seg
↓ PBKDF2/HKDF + contextes publics
K_conv, K_file, K_view
↓ HKDF + index/epoch/session
K_msg
Principes :
- séparation cryptographique des usages ;
- dérivation locale côté client ;
- absence d’exposition serveur des secrets structurants ;
- isolation des contextes conversation, fichier, affichage et session.
23. Clé racine locale d’application K_seg
Formellement :
K_seg = KDF_segmented(
K_pair,
label = "CryptPeer-root",
policyId,
context // encodé de manière déterministe
)
Taille minimale : 256 bits.
K_seg n'est ni portée par le serveur relais ni exposée dans les protocoles réseau.
24. Clés de conversation
Les conversations utilisent des clés dérivées localement à partir de K_seg
et de contextes applicatifs déterministes propres à chaque échange.
Exemple logique :
K_conv = HKDF_SHA256(
salt = K_seg,
IKM = K_base,
info = "CryptPeer/msg/v2",
L = 32
)
Cette séparation garantit qu’un contexte conversationnel n’utilise pas directement la même clé de travail qu’un autre contexte.
25. Clés de fichiers et d’exports
Les fichiers, pièces jointes, exports et sauvegardes utilisent des dérivations distinctes, séparées logiquement des clés de conversation.
K_file = HKDF_SHA256(
salt = K_seg,
IKM = K_file_base,
info = "CryptPeer/file/v2",
L = 32
)
26. Clés éphémères de message ou de session
Des clés éphémères peuvent être dérivées localement pour réduire la portée d’exposition d’un message, d’une session ou d’un affichage temporaire.
K_msg = HKDF_SHA256(
salt = epochOrSessionContext,
IKM = K_conv_seed,
info = "CryptPeer/msg/epoch",
L = 32
)
Cette approche contribue à limiter la fenêtre de compromission utile en cas d’accès local transitoire.
Partie VI – Protocoles applicatifs
27. Chiffrement des messages
Les messages DOIVENT être chiffrés côté client avant transmission :
- dérivation locale de la clé de conversation ;
- dérivation éventuelle d'une clé éphémère
K_msg; - génération d’un IV unique ;
- chiffrement AES-256-GCM du contenu ;
- transmission du message protégé au serveur relais.
Le serveur S stocke uniquement le blob chiffré, sans possibilité de déchiffrement.
28. Conversations de groupe
Pour un groupe :
- une clé de conversation de groupe est dérivée localement ;
- la gestion des participants reste pilotée par les autorisations applicatives ;
- le chiffrement des contenus suit les mêmes principes que la messagerie 1:1 ;
- le serveur relaie le message chiffré à tous les membres autorisés.
Les clés de groupe ne sont jamais partagées en clair : chaque participant dérive localement sa clé de travail.
29. Transfert de fichiers et pièces jointes
Pour un fichier :
- dérivation locale d’une clé
K_file; - génération d’un salt et d’un IV adaptés ;
- chiffrement AES-256-GCM du fichier et, selon la configuration, des métadonnées associées ;
- stockage du blob protégé sur
Sou sur un support de sauvegarde.
Les pièces jointes suivent le même principe de séparation des contextes de dérivation.
30. Sauvegardes chiffrées
La stratégie de sauvegarde chiffrée consiste à :
- multiplier les copies ;
- diversifier les supports ;
- préserver une copie hors site si nécessaire.
Implémentation CryptPeer :
- les backups utilisent une clé dérivée localement fondée sur
K_seg; - les supports reçoivent uniquement des archives déjà chiffrées ;
- la restauration nécessite l’accès légitime à
K_segvia le moteur segmenté.
Aucun secret en clair n'est stocké dans les backups.
31. Appels audio/vidéo et partage d'écran
Pour les communications temps réel :
- l’établissement de session s’appuie sur des échanges applicatifs protégés ;
- des clés de session sont dérivées côté client ;
- les flux média sont chiffrés avant transit ;
- le serveur agit comme relais ou point de coordination sans accès aux secrets de contenu.
Partie VII – Modèle de sécurité et analyse
32. Objectifs de sécurité
CryptPeer vise à garantir :
- Confidentialité de bout en bout :
- les messages et fichiers ne sont jamais en clair sur le serveur ;
- seuls les participants légitimes peuvent déchiffrer le contenu.
- Intégrité :
- détection de toute modification des messages ou fichiers ;
- authentification cryptographique intégrée aux schémas utilisés.
- Authentification locale forte :
- usage d’une racine locale issue d’un système à clé segmentée ;
- réduction de l’exposition directe des secrets structurants.
- Disponibilité souveraine :
- fonctionnement possible en mode local-only ;
- maîtrise locale de l’infrastructure et des sauvegardes.
33. Confidentialité et intégrité
33.1 Confidentialité
La confidentialité est assurée par :
- Chiffrement E2E : toutes les données applicatives sont chiffrées avec AES-256-GCM avant transmission.
- Ancrage sur K_seg : les clés de chiffrement dépendent de
K_seg, non accessible au serveur. - Séparation des usages : conversation, fichier, affichage et session utilisent des contextes de dérivation distincts.
- Réduction des métadonnées exploitables selon la configuration retenue.
33.2 Intégrité
L'intégrité est garantie par :
- Tag d'authentification GCM : chaque message ou fichier inclut un tag vérifiant l’intégrité et l’authenticité du ciphertext.
- Détection des modifications : toute altération du ciphertext ou du tag est détectée lors du déchiffrement.
- Unicité des contextes de chiffrement : l'unicité des IV/nonces et la séparation des dérivations empêchent la réutilisation triviale des contextes cryptographiques.
34. Résilience à la compromission serveur
En cas de compromission totale du serveur S :
- le serveur ne détient que des blobs chiffrés, non déchiffrables sans
K_seg; - il ne porte pas la racine locale d’application ;
- des métadonnées techniques peuvent être exposées, mais pas les secrets de contenu ;
- la restauration sur une nouvelle infrastructure reste possible à partir de sauvegardes protégées.
La compromission de S peut toutefois permettre :
- l’analyse de trafic ;
- l’interception de nouveaux messages protégés ;
- des attaques de disponibilité.
35. Résilience à la compromission locale
En cas de compromission du terminal client :
- Protection par segmentation :
K_pairreste segmentée et non exposée directement ;- l'accès à
K_segnécessite la satisfaction de la politique retenue ; - les segments matériels ne sont pas assimilables à un secret logiciel unique en clair.
- Effacement mémoire :
K_segn'est maintenue en mémoire que temporairement ;- effacement actif après usage ou inactivité.
- Clés éphémères :
- les clés de message ou de session PEUVENT être renouvelées ;
- la portée temporelle d’exposition est ainsi réduite.
- Mode Masqué :
- réduit l’exposition visuelle locale ;
- re-protège rapidement les contenus affichés.
36. Considérations de résilience quantique (symétrique)
L’architecture publique de CryptPeer repose principalement sur des briques symétriques de niveau 256 bits et sur une racine locale non exposée sur le réseau.
Dans cette perspective :
- l’absence d’exposition distante des secrets structurants réduit la valeur d’un archivage réseau seul ;
- les primitives symétriques retenues offrent une marge de sécurité élevée à long terme ;
- la séparation entre le serveur et
K_segdemeure un élément central du modèle.
Cette section n’énonce pas de garantie post-quantique complète ; elle décrit uniquement la robustesse attendue des briques symétriques publiquement utilisées dans ce modèle.
Partie VIII – Cadres réglementaires et souveraineté
37. Protection des données
CryptPeer est conçu selon une logique de minimisation des données : chiffrement de bout en bout, contrôle local des secrets et limitation des dépendances à des services tiers.
Cette approche soutient les principes de protection des données personnelles dans les juridictions applicables, sous réserve des politiques opérationnelles et du cadre de déploiement retenu.
38. NIS2 et maîtrise de l’infrastructure
L’auto-hébergement, la maîtrise locale des secrets et la réduction des dépendances externes renforcent la souveraineté opérationnelle et la résilience de l’infrastructure.
39. Export de cryptographie
Les primitives mentionnées dans cette version publique relèvent de standards internationaux largement connus. Toute analyse réglementaire détaillée dépend du périmètre exact de distribution et des juridictions concernées.
Partie IX – Implémentation, durcissement et journalisation
40. Implémentation côté client web
Le client web est implémenté en JavaScript/TypeScript avec WebAssembly pour les opérations cryptographiques critiques :
- Architecture :
- code JS/TS servi par le serveur
S; - exécution dans le navigateur ;
- WASM pour AES-256-GCM, HKDF et PBKDF2 lorsque pertinent.
- code JS/TS servi par le serveur
- Gestion des clés :
- interface avec le moteur segmenté via API locale ;
- dérivation de toutes les clés applicatives à partir de
K_seg; - stockage mémoire volatile uniquement, effacement actif.
- Sécurité navigateur :
- Content Security Policy stricte ;
- réduction de la surface d’attaque liée aux scripts ;
- contrôle des ressources servies.
- Mises à jour :
- déploiement centralisé via
S; - homogénéité des versions clientes à chaque chargement.
- déploiement centralisé via
41. Implémentation côté serveur relais
Le serveur S agit comme un relais aveugle :
- Fonctions :
- servir le bundle client web ;
- authentifier les connexions ;
- stocker et relayer des blobs chiffrés ;
- gérer l'annuaire et les catégories selon la configuration.
- Stockage :
- base de données pour messages, fichiers et métadonnées protégées ;
- backups réguliers de la base protégée.
- Sécurité :
- durcissement OS ;
- TLS pour le transport HTTP(S) ;
- authentification des connexions client.
Le serveur ne doit jamais détenir de clé de déchiffrement applicative.
42. Durcissement logiciel et matériel
42.1 Durcissement logiciel
- OS :
- chiffrement de disque lorsque pertinent ;
- mises à jour de sécurité régulières ;
- configuration minimale.
- Navigateur :
- version récente et à jour ;
- extensions limitées ;
- isolation des processus lorsque disponible.
- Réseau :
- pare-feu correctement configuré ;
- restriction des accès ;
- VPN ou cloisonnement réseau selon le contexte.
42.2 Durcissement matériel
- Segments matériels :
- HSM NFC, HSM PGP, ou équivalents ;
- protection physique contre l'extraction.
- Terminal :
- contrôle d'accès physique ;
- sécurisation du poste ;
- mesures anti-altération selon le niveau de sensibilité.
43. Journalisation minimale
Principe : minimiser les traces exploitables tout en conservant les logs nécessaires à l'exploitation :
- Logs serveur :
- logs techniques sans données déchiffrées ni secrets ;
- métadonnées minimales ;
- pas de logs de contenu en clair.
- Logs client :
- pas de logs de clés ni de contenu déchiffré ;
- logs d'erreurs techniques uniquement ;
- rotation ou effacement rapide selon la configuration.
- Rétention :
- durée de rétention limitée ;
- effacement automatique après expiration quand applicable.
Annexes
Annexe A – Paramètres cryptographiques publics
| Élément | Valeur par défaut / principe public |
|---|---|
| Algo symétrique | AES-256-GCM |
| Longueur IV | 96 bits |
| Tag GCM | 128 bits |
| Hash principal | SHA-256 |
| Hash optionnel public | SHA3-256 |
| PBKDF2 itérations | 100 000 |
| KDF sorties clés | 256 bits |
| Racine applicative | K_seg fournie localement par le moteur segmenté |
Annexe B – Pseudo-code public des dérivations
B.1 Dérivation de K_seg
function derive_K_seg(K_pair, policyId, context):
// Encodage déterministe du contexte
contextBytes = encodeContext(context)
// KDF segmentée interne au moteur (détails non publics)
K_seg = KDF_segmented(
K_pair,
label = "CryptPeer-root",
policyId = policyId,
context = contextBytes
)
return K_seg
end function
B.2 Dérivation de K_conv
function derive_K_conv(K_base, K_seg):
K_conv = HKDF_SHA256(
salt = K_seg,
IKM = K_base,
info = "CryptPeer/msg/v2",
L = 32
)
return K_conv
end function
B.3 Dérivation de K_file
function derive_K_file(K_file_base, K_seg):
K_file = HKDF_SHA256(
salt = K_seg,
IKM = K_file_base,
info = "CryptPeer/file/v2",
L = 32
)
return K_file
end function
B.4 Dérivation de K_msg
function derive_K_msg(K_conv_seed, epochOrSessionContext):
K_msg = HKDF_SHA256(
salt = epochOrSessionContext,
IKM = K_conv_seed,
info = "CryptPeer/msg/epoch",
L = 32
)
return K_msg
end function
Annexe C – Profils publics de segmentation
Les politiques de segmentation définissent les segments requis pour obtenir K_seg :
C.1 Politique standard
- Segments requis : 2 minimum
- Types :
- 1 segment matériel ou logiciel protégé
- 1 segment cognitif
- Ordre : défini par la politique locale
- Limite de tentatives : définie localement
C.2 Politique renforcée
- Segments requis : 3 minimum
- Types :
- 1 segment matériel
- 1 segment logiciel protégé
- 1 segment cognitif
- Ordre : défini par la politique locale
- Contexte : validation d’instance, de mode ou d’appareil possible
C.3 Politique Defense
- Segments requis : 3+ avec contexte
- Types :
- 1 segment matériel dédié
- 1 segment logiciel protégé
- 1 segment cognitif
- 1 segment contextuel éventuel
- Ordre : strict selon politique locale
- Expiration :
K_segpeut expirer après une durée limitée
Annexe D – Formats logiques de messages et de fichiers
D.1 Format logique de message chiffré
MessageChiffre = {
version: uint8,
conversationId: bytes,
epochId: uint64,
timestamp: uint64,
iv: bytes[12],
ciphertext: bytes,
tag: bytes[16]
}
D.2 Format logique de fichier chiffré
FichierChiffre = {
version: uint8,
fileId: bytes,
salt: bytes[32],
iv: bytes[12],
metadata: bytes,
ciphertext: bytes,
tag: bytes[16]
}
D.3 Encodage
- Bytes : encodés en base64 pour JSON, binaires pour stockage binaire
- Entiers : encodés de manière déterministe
- Chaînes : UTF-8 pour les champs texte
Annexe E – Glossaire
- K_pair
- Clé logique d'appairage ou d’autorisation gérée par le moteur segmenté.
- K_seg
- Clé racine locale d’application dérivée de K_pair et exposée localement au client.
- Clé segmentée
- Clé logique dont l’usage dépend de plusieurs segments ou facteurs répartis.
- Moteur segmenté
- Composant local mettant en œuvre le système d’authentification à clé segmentée.
- PFS locale
- Réduction de la portée d’exposition temporelle par usage de clés éphémères locales.
- Mode local-only
- Mode de déploiement sans dépendance à Internet.
- Mode Masqué
- Mode d'affichage protégé par défaut.
- Mode Defense
- Mode RAM-only ou no-logs pour usages hautement sensibles.
Annexe F – Modèle de licence matérielle (EviEngine)
Cette annexe résume le rôle d'EviEngine dans CryptPeer. EviEngine est utilisé pour associer une licence logicielle à une infrastructure matérielle donnée, sans serveur de licence et sans base de données centralisée. Ce mécanisme permet :
- de contrôler l'usage de CryptPeer sur un parc de machines autorisées ;
- de préserver un modèle de souveraineté et d’autonomie opérationnelle ;
- de conserver la capacité de fonctionner en réseau fermé ou isolé.
EviEngine n'intervient pas dans la génération ou la dérivation des clés cryptographiques utilisées pour le chiffrement des messages, des fichiers, des sauvegardes ou des sessions applicatives. Il est analytiquement séparé de la sécurité E2E décrite dans ce document.