From f994e9cf55bf2b819813ea1e93b4fc872613c686 Mon Sep 17 00:00:00 2001 From: NicolasCantu Date: Wed, 14 Feb 2024 16:01:15 +0100 Subject: [PATCH] simplification --- doc/Auth-Specs.md | 67 +++++++++++++++++++++++++++-------------------- 1 file changed, 39 insertions(+), 28 deletions(-) diff --git a/doc/Auth-Specs.md b/doc/Auth-Specs.md index 8e11a3f..9770a7f 100644 --- a/doc/Auth-Specs.md +++ b/doc/Auth-Specs.md @@ -170,45 +170,56 @@ Dans l'ordre on réalise donc les opérations suivantes pour chaque membres : 2. Création de `Message` du `PRDKeyBackup` à destination du membre. 3. Envoi de la transaction SP du `Message` du `PRDKeyBackup` à destination du membre. 4. Envoi du `Message` du `PRDKeyBackup` à destination du membre. +5. Atttente de la réception des `PRDResponse` en réponse aux `PRDKeyBackup` (confirmations). +6. Recomposition de la clé pour confirmation depuis les shards reçus dans les `PRDResponse`. +6.1. Déchiffrement par le mot de passe de `Part1Enc` depuis le cache. +6.2. Déchiffrement par secret partagé de chaque shard reçu dans `id_shard_info_enc_by_shared_secret` des `PRDResponse` de chaque member du role `Member`du process. +6.3. Recomposition de `Part2Enc` et déchiffrement par le mot de passe +6.4. Concaténation de `Part1` et `Part2` ##### Étape d'`update` et envoi de l'objet `ItemMember` pour `Onboarding` -Pour être `onboard` dans un process, c'est-à-dire avoir un rôle, il faut s'ajouter dans la liste des membres du process. +Pour être `onboard` dans un process, c'est-à-dire avoir un rôle, il faut : -Cela signifie envoyer un `PRDUpdate` avec une nouvelle version du PCD de la liste des membres, contenant notre objet `ItemMember` complet. Ce PRD devra recevoir des membres du rôle `Member` du process les `PRDResponse` correspondant aux critères de validation du `process`. +1. s'ajouter (objet `Member`) dans la liste des membres et +2. s'ajouter son adresse SP dans les adresses d'un des rôles du process. -C'est à ce moment-là que l'on transmet toutes les clés privées dans l'objet `ItemMember`, en tant que donnée privée (chiffrée par la clé de dépense du signet) dans un PCD (et les `PRDUpdate` correspondant). +###### Mise à jour de la liste des membres + +Pour mettre à jour la liste des membres il faut envoyer un `PRDUpdate` avec une nouvelle version du PCD de la liste des membres, contenant l'objet `ItemMember` complet aux membres du role `member`. Ce PRD devra recevoir des membres du rôle `Member` du process les `PRDResponse` correspondant aux critères de validation du `process`. + +C'est à ce moment-là que l'on transmet toutes les clés privées dans l'objet `ItemMember`, en tant que `metadadata` privée (chiffrée par la clé de dépense du signet) dans un PCD (et les `PRDUpdate` correspondant). Les adresses SP correspondantes sont aussi transmises en tant que données publiques, ainsi que l'adresse SP de la clé de dépense du login du signet. -Avant de choisir un process pour continuer l'update de la nouvelle identité : +L'`ItemMember` est décrit dans la spécification [Specs-Datamodel.md](Specs-Datamodel.md). -1. Scan `Nakamoto` des transactions, récupération dans les transactions SP sur Adresse `id_SP` de login du signet, lecture du `RequestHash` de l`output 3` correspondant aux `PRDResponse` à recevoir ou déjà reçus. -2. Réception des `PRDResponse` et contrôle de la valeur des signatures (`hash_sig_value`), attente du `validation_timeout` du rôle `Member` du `process` et validation ou non des `PRDKeyBackup`. -3. Attente et réception des `pcd_reference_hash` des `PRDResponse` reçus avec le PCD des membres du processus (liste de `itemMember`). -4. Recomposition de la clé selon : -4.1. Déchiffrement par le mot de passe de `Part1Enc` depuis le cache. -4.2. Déchiffrement par secret partagé de chaque shard reçu dans `id_shard_info_enc_by_shared_secret` des `PRDResponse` de chaque member du role `Member`du process. -4.3 Recomposition de `Part2Enc` et déchiffrement par le mot de passe -4.4 Concaténation de `Part1` et `Part2` +1. Création d'un `ItemMember` correspondant à l'utilisateur. +2. Création d'une nouvelle version du PCD avec l'ajout de l'`ItemMember` créé. +3. Création de `PRDKeyHello` à destination du membre. +4. Création de `Message` du `PRDKeyHello` à destination du membre. +5. Envoi de la transaction SP du `Message` du `PRDKeyHello` à destination du membre. +6. Envoi du `Message` du `PRDKeyHello` à destination du membre. +7. Réception des `PRDResponse` en réponse aux `PRDKeyHello` et mise à jour des listes depuis les `PCD` correspondants. +8. Attente de la validation (`PRDResponse`) du `PRDUpdate`. -Demande d'update de la liste des membres (PCD) d'un process (exemple avec 2 membres): +###### Mise à jour de la liste des process -1. Création et envoi des `PRDKeyHello`. -1.1. Création de `PRDKeyHello` à destination de membre 1 de la liste des membres (adresse SP) du rôle `Member` du `Process`. -1.2. Création de `PRDKeyHello` à destination de membre 2 de la liste des membres (adresse SP) du rôle `Member` du `Process`. -1.3. Création de `Message` du `PRDKeyHello` à destination de membre 1. -1.4. Création de `Message` du `PRDKeyHello` à destination de membre 2. -1.5. Envoi de la transaction SP du `Message` du `PRDKeyHello` à destination de membre 1. -1.6. Envoi de la transaction SP du `Message` du `PRDKeyHello` à destination de membre 2. -1.7. Envoi du `Message` du `PRDKeyHello` à destination de membre 1. -1.11. Envoi du `Message` du `PRDKeyHello` à destination de membre 2. -2. Réception des `PRDResponse` en réponse aux `PRDKeyHello` et mise à jour des listes depuis les `PCD` correspondants. -3. Création d'un `ItemMember` correspondant à l'utilisateur avec les clés chiffrées (hors clés de révocation) dans la partie data des métadonnées privées et les adresses SP dans les données publiques. -4. Création d'une nouvelle version du PCD avec l'ajout de l'`ItemMember` créé. -5. Parcours des membres du rôle `Member` et envoi des `PRDUpdate`. -6. Attente de la validation (`PRDResponse`) du `PRDUpdate`. -7. Redirection vers la page du process sur le relai. +Pour mettre à jour la liste des process il faut envoyer un `PRDUpdate` avec une nouvelle version du PCD de la liste des process, contenant l'objet `ItemProcess` complet aux membres du role `process`. Ce PRD devra recevoir des membres du rôle `Process` du process les `PRDResponse` correspondant aux critères de validation du `process`. + +L'`ItemProcess` est décrit dans la spécification [Specs-Datamodel.md](Specs-Datamodel.md). + +Demande d'update de la liste des membres (PCD) d'un process vers chaque membre du rôle `Member` du process.: + +1. Création d'un `ItemProcess` correspondant à l'utilisateur. +2. Création d'une nouvelle version du PCD avec l'ajout de l'`ItemProcess` créé. +3. Création de `PRDKeyHello` à destination du membre. +4. Création de `Message` du `PRDKeyHello` à destination du membre. +5. Envoi de la transaction SP du `Message` du `PRDKeyHello` à destination du membre. +6. Envoi du `Message` du `PRDKeyHello` à destination du membre. +7. Réception des `PRDResponse` en réponse aux `PRDKeyHello` et mise à jour des listes depuis les `PCD` correspondants. +8. Attente de la validation (`PRDResponse`) du `PRDUpdate`. +9. Redirection vers la page du process sur le relai. ##### Clés de révocation (`revoke`)