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.

EthereumIPFSAES-256Zero-Knowledge

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 #42

Flux 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 ordonnance

Diagramme 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 lisible

Architecture 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 ?

  1. 1Vous vous connectez avec votre portefeuille (email, Google, passkey)
  2. 2Votre portefeuille signe un message : "HEALTHGUARD_MASTER_KEY_V1"
  3. 3Cette signature est transformée en clé via HKDF-SHA256
  4. 4La clé existe uniquement en mémoire pendant la session
  5. 5Vous fermez l'onglet ? La clé disparaît
  6. 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é.

Niveau 1

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
Niveau 2

Clés de Catégorie

Pour organiser vos documents, HealthGuard utilise 6 catégories médicales :

0️⃣ Ordonnances
1️⃣ Comptes-rendus
2️⃣ Résultats biologiques
3️⃣ Imagerie médicale
4️⃣ Certificats
5️⃣ Autres
Niveau 3

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.

Partage de documents : X25519

Le défi du partage sécurisé

Comment un patient peut-il déchiffrer un document créé par un médecin qui utilise ses propres clés de chiffrement ?

Solution : Chiffrement asymétrique X25519 ✅

👨‍⚕️ Médecin                    👤 Patient
    │                              │
    │  Clé Publique X25519 ──────→ │
    │                              │
    │  Chiffre la Clé Document     │
    │  avec Clé Publique patient   │
    │                              │
    │  Enveloppe chiffrée ───────→ │
    │                              │
    │                              │ Clé Privée X25519
    │                              │ (dérivée de signature)
    │                              │
    │                              │ Déchiffre l'enveloppe
    │                              │ → Récupère Clé Document
    │                              ✅

Sécurité du système X25519

Clés éphémères

Chaque partage utilise une nouvelle paire temporaire

Clé privée jamais stockée

Impossible de voler ce qui n'existe pas

XSalsa20-Poly1305

Authentification intégrée

Forward Secrecy

Compromission d'une clé ≠ tous les échanges

Transit et stockage des données

Points critiques de sécurité dans le transit

ÉtapeQui 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.