Documentation HealthGuard Version Alpha
Une plateforme révolutionnaire de santé numérique garantissant une confidentialité absolue grâce à la blockchain et au chiffrement de bout en bout.
Vue d'ensemble
HealthGuard est une application décentralisée (dApp) révolutionnaire qui permet aux patients et aux professionnels de santé de gérer, partager et consulter des dossiers médicaux en toute sécurité.
Confidentialité absolue
Même le créateur ne peut pas voir vos documents
Totalement décentralisé
Aucun serveur central ne stocke vos données
Chiffrement E2E
Fichiers chiffrés avant de quitter votre navigateur
Basé sur blockchain
Immuabilité et traçabilité garanties
Propriété des données
Vous êtes le propriétaire absolu
Sans frais
Account Abstraction avec transactions sponsorisées
Pourquoi HealthGuard ?
❌ Le problème actuel
- • Serveurs centralisés que vous ne contrôlez pas
- • Bases de données cibles privilégiées pour les pirates
- • Administrateurs ont accès à vos dossiers
- • Millions de dossiers compromis chaque année
- • Aucun contrôle sur qui accède à vos données
✅ La solution HealthGuard
- • Zéro connaissance : personne ne peut voir vos docs
- • Chiffrement côté client dans votre navigateur
- • Clés dérivées de votre signature de portefeuille
- • Stockage décentralisé sur IPFS
- • Contrôle total et audit transparent
Architecture technique
HealthGuard repose sur une architecture décentralisée combinant frontend React, smart contracts Ethereum et stockage IPFS.
Diagramme d'architecture complet
┌─────────────────┐
│ NAVIGATEUR │
│ (Frontend) │
│ │
│ ┌───────────┐ │ ┌─────────────────────────────────────┐
│ │ Next.js │ │ │ SMART CONTRACTS │
│ │ React 18 │ │ │ (Ethereum Sepolia) │
│ │TypeScript │ │ │ │
│ └─────┬─────┘ │ │ ┌────────────────────────────────┐ │
│ │ │ │ │ CategoryKeyRegistryV1 │ │
│ ┌─────▼─────┐ │ │ │ - initializeAllCategoryKeys() │ │
│ │ Web Crypto│ │ │ │ - getCategoryKey() │ │
│ │ API │◄─┼──────┼─▶│ - rotateAllCategoryKeys() │ │
│ │ AES-256 │ │ │ └────────────────────────────────┘ │
│ └─────┬─────┘ │ │ │
│ │ │ │ ┌────────────────────────────────┐ │
│ ┌─────▼─────┐ │ │ │ EncryptionKeyRegistryV2 │ │
│ │ TweetNaCl │ │ │ │ - setPatientEncryptionPubKey() │ │
│ │ X25519 │◄─┼──────┼─▶│ - getPatientEncryptionPubKey() │ │
│ │ XSalsa20 │ │ │ └────────────────────────────────┘ │
│ └─────┬─────┘ │ │ │
│ │ │ │ ┌────────────────────────────────┐ │
│ ┌─────▼─────┐ │ │ │ MedicalDocumentNFTV1 (ERC-721) │ │
│ │ viem + │ │ │ │ - mintDocument() │ │
│ │ wagmi │◄─┼──────┼─▶│ - storeEncryptedKey() │ │
│ │(Blockchain│ │ │ │ - getEncryptedKey() │ │
│ │ Connector)│ │ │ │ - getDocumentMetadata() │ │
│ └─────┬─────┘ │ │ └────────────────────────────────┘ │
│ │ │ │ │
│ ┌─────▼─────┐ │ │ ┌────────────────────────────────┐ │
│ │ Account │ │ │ │ HealthDataAccessManagerV4 │ │
│ │Abstraction│◄─┼──────┼─▶│ - grantTemporaryAccess() │ │
│ │ (Alchemy) │ │ │ │ - revokeAccess() │ │
│ │ Gasless │ │ │ │ - emergencyAccess() │ │
│ └───────────┘ │ │ └────────────────────────────────┘ │
│ │ └─────────────────────────────────────┘
└────────┬────────┘
│
│ HTTPS (chiffré)
▼
┌─────────────────────────────────────┐
│ API ROUTES (Next.js) │
│ POST /api/ipfs-upload │
└────────┬────────────────────────────┘
│
▼
┌─────────────────────────────────────┐
│ IPFS (Pinata) │
│ - Stockage décentralisé │
│ - Content Addressing (CID) │
│ - Fichiers CHIFFRÉS uniquement │
└─────────────────────────────────────┘Flux d'upload d'un document médical
📁 Fichier original : ordonnance.pdf (250 KB)
↓
↓ [DANS LE NAVIGATEUR DU MÉDECIN]
↓
1. Lecture du fichier en mémoire (ArrayBuffer)
2. Calcul du hash SHA-256 → "d4f2a9b8c3e1..."
3. Génération Clé de Document aléatoire (32 octets)
4. Génération IV aléatoire (12 octets pour AES-GCM)
5. Chiffrement AES-256-GCM
→ Fichier chiffré (250 KB + 16 octets auth tag)
↓
↓ [UPLOAD VERS IPFS]
↓
🌐 Requête HTTPS vers /api/ipfs-upload
↓
🔗 Connexion à Pinata (fournisseur IPFS)
↓
📦 Fichier stocké sur IPFS
- CID : QmXyZ123abc...
- Distribution : Répliqué sur plusieurs nœuds
↓
↓ [ENREGISTREMENT BLOCKCHAIN]
↓
⛓️ Smart Contract MedicalDocumentNFTV1
- mintDocument()
- Métadonnées : {
"documentType": 0,
"ipfsCID": "QmXyZ123abc...",
"wrappedKey": "A9f2K3m...",
"fileHash": "d4f2a9b8c3e1...",
"creator": "0x123...médecin",
"owner": "0x456...patient"
}
↓
✅ NFT minté avec tokenId #42Flux de consultation d'un document
👤 Patient ouvre l'application HealthGuard
↓
1. Connexion avec portefeuille (email/social/passkey)
↓
2. Signature "HEALTHGUARD_MASTER_KEY_V1"
→ Génération Clé Maître en RAM
↓
3. Signature "HEALTHGUARD_X25519_KEYPAIR_V1"
→ Génération paire de clés X25519 en RAM
↓
↓ [LECTURE DEPUIS LA BLOCKCHAIN]
↓
⛓️ Requête au smart contract
- tokensOfOwner(patientAddress)
- getDocumentMetadata(42)
- getEncryptedKey(42, patientAddress)
↓
↓ [DANS LE NAVIGATEUR DU PATIENT]
↓
📋 Affichage de la liste des documents
✅ ordonnance.pdf - Créé par Dr. Martin
↓
↓ [PATIENT CLIQUE SUR LE DOCUMENT]
↓
🔓 Déchiffrement de l'enveloppe X25519
1. Clé Privée X25519 + ephemPublicKey
2. Déchiffrement XSalsa20-Poly1305
3. → Clé de Document récupérée
↓
🌐 Téléchargement depuis IPFS
https://ipfs.io/ipfs/QmXyZ123abc...
↓
🔓 Déchiffrement AES-256-GCM
→ Fichier PDF original (250 KB)
↓
🔍 Vérification d'intégrité (SHA-256)
↓
📄 Affichage du PDF dans le navigateur
✅ Patient peut lire son ordonnanceDiagramme de séquence : Partage par QR Code
Patient Smart Contract Médecin │ │ │ │ grantTemporaryAccess() │ │ │─────────────────────────────▶│ │ │ │ │ │ AccessGranted event │ │ │◀─────────────────────────────│ │ │ │ │ │ Génère QR Code │ │ │ (adresse + durée + niveau) │ │ │ │ │ │ │ Scan QR Code │ │ │◀───────────────────────│ │ │ │ │ │ checkAccess() │ │ │◀───────────────────────│ │ │ │ │ │ ✅ Access valid │ │ │───────────────────────▶│ │ │ │ │ │ getDocuments() │ │ │◀───────────────────────│ │ │ │ │ │ Documents list │ │ │───────────────────────▶│ │ │ │ │ revokeAccess() │ │ │─────────────────────────────▶│ │ │ │ │ │ │ ❌ Access revoked │ │ │───────────────────────▶│
Flux de chiffrement hiérarchique complet
📱 Signature du portefeuille
↓
↓ HKDF-SHA256
↓
🔐 Clé Maître (AES-256)
│ [Existe uniquement en RAM]
│
├──→ Déchiffre Clé Catégorie 0 (Ordonnances) ←── Blockchain
├──→ Déchiffre Clé Catégorie 1 (Comptes-rendus)
├──→ Déchiffre Clé Catégorie 2 (Biologie)
├──→ Déchiffre Clé Catégorie 3 (Imagerie)
├──→ Déchiffre Clé Catégorie 4 (Certificats)
└──→ Déchiffre Clé Catégorie 5 (Autres)
↓
🗝️ Clé de Catégorie (AES-256)
│
├──→ Désenveloppe Clé Document 1 ←── NFT Metadata
├──→ Désenveloppe Clé Document 2
└──→ Désenveloppe Clé Document 3
↓
📄 Clé de Document (AES-256)
│
└──→ Déchiffre fichier médical ←── IPFS
↓
✅ Fichier PDF lisibleArchitecture de sécurité
Principe fondamental : Architecture "Zero-Knowledge"
HealthGuard est conçu selon un principe simple mais révolutionnaire : aucune clé de chiffrement n'est jamais stockée nulle part.
┌─────────────────────────────────────────────────┐ │ VOUS SEUL POUVEZ DÉCHIFFRER │ │ │ │ Portefeuille → Blockchain → IPFS │ │ (Signature) (Métadonnées) (Fichiers │ │ chiffrées) chiffrés) │ │ │ │ Aucune clé stockée ! │ │ Les clés sont dérivées à chaque session │ └─────────────────────────────────────────────────┘
Comment cela fonctionne ?
- 1Vous vous connectez avec votre portefeuille (email, Google, passkey)
- 2Votre portefeuille signe un message : "HEALTHGUARD_MASTER_KEY_V1"
- 3Cette signature est transformée en clé via HKDF-SHA256
- 4La clé existe uniquement en mémoire pendant la session
- 5Vous fermez l'onglet ? La clé disparaît
- 6Vous vous reconnectez ? La même signature reproduit la même clé
Système de chiffrement hiérarchique
HealthGuard utilise un système de chiffrement à 3 niveaux pour maximiser la sécurité et la flexibilité.
Clé Maître (Master Key)
- • Algorithme : AES-256-GCM
- • Dérivation : HKDF-SHA256 depuis signature de portefeuille
- • Stockage : JAMAIS stockée (uniquement en RAM)
- • Utilisation : Chiffrer/déchiffrer les Clés de Catégorie
Clés de Catégorie
Pour organiser vos documents, HealthGuard utilise 6 catégories médicales :
Clés de Document
Chaque fichier médical que vous uploadez reçoit sa propre clé de chiffrement unique. La clé est générée aléatoirement, utilisée pour chiffrer le fichier, puis "enveloppée" avec la Clé de Catégorie correspondante.
Transit et stockage des données
Points critiques de sécurité dans le transit
| Étape | Qui peut voir ? |
|---|---|
| Navigateur médecin | ✅ Médecin uniquement |
| Réseau IPFS | ❌ Personne (chiffré) |
| Blockchain | ❌ Métadonnées chiffrées |
| Navigateur patient | ✅ Patient uniquement |
| Créateur HealthGuard | ❌ NE PEUT RIEN VOIR |
Architecture Zero-Trust
- ❌ Pas besoin de faire confiance au créateur (moi)
- ❌ Pas besoin de faire confiance aux validateurs blockchain
- ❌ Pas besoin de faire confiance aux nœuds IPFS
- ✅ Vous faites confiance uniquement aux mathématiques
Conformité RGPD
HealthGuard est conçu nativement pour respecter le Règlement Général sur la Protection des Données (RGPD) de l'Union Européenne.
Privacy by Design
Chiffrement par défaut, pas optionnel
Minimisation des données
Seules les métadonnées minimales stockées
Droit à l'effacement
emergencyClearKeys() + burn NFT
Droit de portabilité
Export des documents depuis IPFS
Intégrité
AES-256-GCM + SHA-256 hash
Audit trail
Blockchain immuable
Fonctionnalités principales
Pour les patients
Upload de documents
Chiffrement automatique avant upload
Gestion du dossier
Vue d'ensemble, filtrage, recherche
Partage par QR Code
Durée configurable, révocation instantanée
Accès d'urgence
Mode urgence vital 24h
Pour les professionnels
Enregistrement pro
NFT d'identité professionnelle vérifiée
Scan QR Code
Accès instantané aux documents autorisés
Création pour patients
Auto-partage cryptographique X25519
Gestion des accès
Historique et transparence totale
🔗 Fonctionnalités blockchain
Smart Contracts : CategoryKeyRegistryV1, EncryptionKeyRegistryV2, MedicalDocumentNFTV1, HealthDataAccessManagerV4
Transactions sans frais : Account Abstraction (ERC-4337) avec gas sponsorisé
NFTs médicaux : Patient NFT, Professional NFT, Document NFT
© 2025 HealthGuard - Tous droits réservés.
Cette documentation est la propriété intellectuelle de HealthGuard. Toute reproduction, distribution ou utilisation non autorisée est strictement interdite.