Aller au contenu
cura

Une idée : prouver la réponse, garder le dossier.

Trois pièces : votre coffre, une preuve et un contrat de consentement.

Les trois pièces

Sur votre appareil
Le coffre
La preuve
preuve · 256 octets
Sur la chaîne
Le contrat de consentement
admissible · nullificateur
Au labo
Un décompte de participants admissibles, puis seulement les champs consentis
champs consentis, chiffrés pour la clé du labo

Le coffre

Chiffré sur votre appareil avec une clé tirée de votre portefeuille. Cura l’héberge sans le lire.

La preuve

Critères en entrée publique, vos valeurs en entrée privée. Sortie : un bit et un nullificateur.

Le contrat de consentement

Consigne qui lit quels champs jusqu’à quand, verse les récompenses et applique la révocation.

Une étude, un dossier, un bit

Ce que voit le circuit. La colonne du milieu ne quitte jamais l’appareil.

Critère (entrée publique)Circuit
Âge entre 40 et 70 ans52respecté
Diagnostic : diabète de type 2Oui, depuis 2019respecté
HbA1c entre 6,5 et 9,0 %7,1 %respecté
Tension systolique ≥ 130138 mmHgrespecté

Sorties publiques

admissible = 1

nullificateur = hash(clé du coffre, id de l’étude)

Un critère non respecté ne produit aucune preuve, et rien n’est envoyé.

La vie d’un consentement

  1. Accordé

    Signé avec la preuve. Le labo reçoit une clé pour les champs nommés.

  2. Actif

    Les récompenses s’accumulent depuis le séquestre. Chaque lecture est consignée.

  3. Restreint

    Décochez un champ : la clé du labo l’exclut au bloc suivant.

  4. Révoqué ou expiré

    L’accès et les récompenses prennent fin. Les agrégats demeurent.

Ce qui garde l’échange honnête

Nullificateurs

Bloquent une deuxième inscription sans savoir qui vous êtes. Deux études ne peuvent pas vous relier.

Taille minimale de cohorte

Effectifs arrondis à la dizaine et masqués sous le seuil du conseil.

Piste d’audit

Chaque preuve, consentement, lecture et paiement est consigné avec son bloc.

Le conseil

Les contributeurs votent les règles de façon anonyme : une personne, un vote.

Fidèle aux principes, sans prétendre au certificat

Minimisation
L’admissibilité tient en un bit ; seuls les champs nommés sont partagés.
Consentement précis
Un bon par étude, avec la liste des champs et une date de fin.
Retrait
La révocation tient en une signature et s’applique sur la chaîne.
Responsabilité
Une piste d’audit en ajout seul, lisible par toutes les parties.

Cette démo n’est certifiée ni HIPAA, ni RGPD, ni Loi 25, et n’est pas un avis juridique.

L’interface des contrats, et ce que la démo simule

La couche simulée de src/lib/demo reproduit les appels d’un déploiement réel.

Afficher l’interface du contrat
interface ICuraConsent {
  /// Verify an eligibility proof and record a consent slip.
  function enrol(
    bytes32 studyId,
    bytes calldata proof,     // 256 bytes, Groth16
    bytes32 nullifier,        // hash(vaultKey, studyId)
    uint16  fieldMask,        // fields the slip covers
    uint64  expiresAt
  ) external returns (bytes32 consentId);

  function narrow(bytes32 consentId, uint16 fieldMask) external;
  function revoke(bytes32 consentId) external;
  function claim(bytes32[] calldata consentIds) external;

  event Enrolled(bytes32 indexed studyId, bytes32 consentId, bytes32 nullifier);
  event Revoked(bytes32 indexed consentId, uint64 atBlock);
}

Module de la démo → équivalent réel

  • prover.ts

    Circuit compilé en WASM, preuve dans un Web Worker

  • chain.ts

    writeContract + waitForTransactionReceipt de wagmi

  • store.ts

    Événements des contrats indexés par un subgraph

  • population.ts

    Effectifs de cohorte agrégés et bruités

Maintenant, regardez-le fonctionner.

Essayer la démo