Update (txSp for all Prd)
This commit is contained in:
parent
20e71e680e
commit
e711ce21de
5
.gitignore
vendored
5
.gitignore
vendored
@ -12,11 +12,6 @@ Cargo.lock
|
||||
|
||||
# MSVC Windows builds of rustc generate these, which store debugging information
|
||||
*.pdb
|
||||
doc/.$PRDPRDConfirm.drawio.bkp
|
||||
doc/.$PRDUpdate.drawio.bkp
|
||||
doc/.$PRDResponse.drawio.bkp
|
||||
doc/.$PRDUpdate.drawio.bkp
|
||||
doc/.$PRDKeyBackup.drawio.bkp
|
||||
doc/diagrams/.$WalletCreate.drawio.bkp
|
||||
doc/diagrams/.$WalletRecover.drawio.bkp
|
||||
doc/diagrams/.$Messages.drawio.bkp
|
||||
|
@ -10,9 +10,10 @@
|
||||
* 5.2. [Création et envoi](#Crationetenvoi-1)
|
||||
* 5.3. [Réception](#Rception-1)
|
||||
* 6. [Fonction des RequestPrd](#FonctiondesRequestPrd)
|
||||
* 6.1. [Fonctionnalités optionnelles](#Fonctionnalitsoptionnelles)
|
||||
* 6.2. [Création et envoi](#Crationetenvoi-1)
|
||||
* 6.3. [Réception](#Rception-1)
|
||||
* 6.1. [Schéma des flux](#Schmadesflux-1)
|
||||
* 6.2. [Fonctionnalités optionnelles](#Fonctionnalitsoptionnelles)
|
||||
* 6.3. [Création et envoi](#Crationetenvoi-1)
|
||||
* 6.4. [Réception](#Rception-1)
|
||||
* 7. [RequestPrdList - Demande de Listes ( RequestPcd)](#RequestPrdList-DemandedeListesRequestPcd)
|
||||
* 7.1. [Schéma des flux](#Schmadesflux-1)
|
||||
* 7.2. [Création : Datas spécifiques](#Cration:Datasspcifiques)
|
||||
@ -98,8 +99,6 @@ Les `Item` ainsi échangés via les `RequestPcd` sont vérifiés par les `Reques
|
||||
|
||||
### 5.1. <a name='Schmadesflux'></a>Schéma des flux
|
||||
|
||||
Pour simplifier les RequestPrdConfirm n'ont pas été représentés dans le schéma.
|
||||
|
||||

|
||||
|
||||
### 5.2. <a name='Crationetenvoi-1'></a>Création et envoi
|
||||
@ -151,7 +150,13 @@ Les clés de chiffrement des attributs confidentiels par rôles des `Item` des `
|
||||
|
||||
Les `RequestPrd` sont de plusieurs types tels que `RequestPrdList`, `RequestPrdMessage`, `RequestPrdUpdate`, etc.: Variations de `RequestPrd` pour différentes actions, telles que l'envoi de messages, la mise à jour des informations contractuelles, ou la confirmation de transactions.
|
||||
|
||||
### 6.1. <a name='Fonctionnalitsoptionnelles'></a>Fonctionnalités optionnelles
|
||||
### 6.1. <a name='Schmadesflux-1'></a>Schéma des flux
|
||||
|
||||
Pour simplifier les RequestPrdConfirm n'ont pas été représentés dans le schéma.
|
||||
|
||||

|
||||
|
||||
### 6.2. <a name='Fonctionnalitsoptionnelles'></a>Fonctionnalités optionnelles
|
||||
|
||||
L'attribut `sig_value` permet de donner une valeur aux signatures. Les valeurs des signatures sont définies par rôles dans les `ItemProcess` avec des valeurs valant pour `OK` ou `KO` pour `none` pour les validations des `RequestPrd`.
|
||||
|
||||
@ -176,7 +181,7 @@ Les adresses et les roles sont précisés en cas d'utilisateurs ayant plusieurs
|
||||
|
||||
Tous les échanges sont complétés de l'empreinte du device de l'emetteur envoyée de façon confidentielle via `device_footprint_enc_by_shared_secret`.
|
||||
|
||||
### 6.2. <a name='Crationetenvoi-1'></a>Création et envoi
|
||||
### 6.3. <a name='Crationetenvoi-1'></a>Création et envoi
|
||||
|
||||
La création d'un `RequestPrd` suit plusieurs étapes :
|
||||
|
||||
@ -193,7 +198,7 @@ La création d'un `RequestPrd` suit plusieurs étapes :
|
||||
|
||||
Voir [Silent-Payment-Specs.md](Silent-Payment-Specs.md).
|
||||
|
||||
### 6.3. <a name='Rception-1'></a>Réception
|
||||
### 6.4. <a name='Rception-1'></a>Réception
|
||||
|
||||
La réception d'un `RequestPcd` suit plusieurs étapes :
|
||||
|
||||
@ -203,9 +208,9 @@ La réception d'un `RequestPcd` suit plusieurs étapes :
|
||||
4. Recherche des `RequestPrd` en relation via `request_prd_reference_hash` et `request_prd_origin_hash` et attente si nécessaire et traitement de ceux ci.
|
||||
5. Vérification de la conformité des `RequestPrd` en relation.
|
||||
6. Recherche de l'`Item` associé via `item_reference_hash` et attente si nécessaire et traitement de celui ci.
|
||||
7. (Sauf `RequestPRDKeyBackup` et `RequestPrdKeyHello`) Déchiffrage des attributs confidentiels notés `<attribut>_enc_by_shared_secret` depuis la `KeyConfidential` de la`transaction SP` correspondante via hash du `RequestPrd` dans l'output `2` de la transaction.
|
||||
7. Déchiffrage des attributs confidentiels notés `<attribut>_enc_by_shared_secret` depuis la `KeyConfidential` de la`transaction SP` correspondante via hash du `RequestPrd` dans l'output `2` de la transaction.
|
||||
8. Mise à jour du cache pour les traitement des RequestPrd.
|
||||
9. Voir `RequestPrdConfirm` création et envoi (sauf pour les `RequestPrdConfirm` et les `RequestPrdKeyBackup` et les `RequestPrdKeyHello` et les `RequestPrdMessage` ayant un `raw_transaction_list` non vide).
|
||||
9. Voir `RequestPrdConfirm` création et envoi.
|
||||
10. Validation des conditions définies dans le `ItemProcess` pour ce d'`Item` avec le `Role` correspondant dans le `ItemProcess` et dans ce rôles les conditions pour ce type de `RequestPrd` (dans l'attribut `request_prd_type`) telles que définies dans [Specs-Process-Roles-Specs.md](Specs-Process-Roles-Specs.md).
|
||||
11. Traitements spécifiques au type de RequestPrd.
|
||||
|
||||
|
@ -36,7 +36,7 @@ La`transaction SP` a aussi une fonction d'horodate et de preuve de publication d
|
||||
|
||||
Les `RequestPrdConfirm` qui sont des accusés automatiques de réception des `RequestPrd` sont aussi associés à une transaction Silent Payment SP, ce qui permet d'ajouter les preuves de réception des demandes et des validations (ou non).
|
||||
|
||||
Il y a une `transactions SP` pour tous les types de `RequestPrd` sauf pour les `RequestPrdKeyBackup` et les `RequestPrdKeyHello` et les `RequestPrdKeyMessage` ayant l'attribut `raw_transaction_list` non vide.
|
||||
Il y a une `transactions SP` pour tous les types de `RequestPrd`.
|
||||
|
||||
## 5. <a name='Structuredesoutputs'></a> Structure des outputs
|
||||
|
||||
|
@ -7,26 +7,26 @@
|
||||
* 6. [Confidentialité des `RequestPcd` et RequestPrd](#ConfidentialitdesRequestPcdetRequestPrd)
|
||||
* 7. [Confidentialité des messages sur les relais](#Confidentialitdesmessagessurlesrelais)
|
||||
* 8. [Clé de chiffrement robuste](#Cldechiffrementrobuste)
|
||||
* 8.1. [Résistance aux attaques cryptanalytiques](#Rsistanceauxattaquescryptanalytiques)
|
||||
* 8.2. [Diffusion et confusion](#Diffusionetconfusion)
|
||||
* 8.3. [Non-linéarité](#Non-linarit)
|
||||
* 8.1. [Résistance aux attaques cryptanalytiques](#Rsistanceauxattaquescryptanalytiques)
|
||||
* 8.2. [Diffusion et confusion](#Diffusionetconfusion)
|
||||
* 8.3. [Non-linéarité](#Non-linarit)
|
||||
* 9. [Fonctions de hashage](#Fonctionsdehashage)
|
||||
* 10. [Exigences génériques](#Exigencesgnriques)
|
||||
* 10.1. [Pas de secret de la conception](#Pasdesecretdelaconception)
|
||||
* 10.2. [Validé par la communauté scientifique](#Validparlacommunautscientifique)
|
||||
* 10.3. [Implémentation correcte](#Implmentationcorrecte)
|
||||
* 10.4. [Détermination](#Dtermination)
|
||||
* 10.5. [Rapidité de calcul](#Rapiditdecalcul)
|
||||
* 10.6. [Diffusion (ou effet avalanche)](#Diffusionoueffetavalanche)
|
||||
* 10.7. [Résistance aux collisions](#Rsistanceauxcollisions)
|
||||
* 10.7.1. [Résistance aux collisions faibles](#Rsistanceauxcollisionsfaibles)
|
||||
* 10.7.2. [Résistance aux collisions fortes](#Rsistanceauxcollisionsfortes)
|
||||
* 10.8. [Résistance à la pre_id](#Rsistancelapr-image)
|
||||
* 10.8.1. [Résistance à la pre_id](#Rsistancelapr-image-1)
|
||||
* 10.8.2. [Résistance à la seconde pre_id](#Rsistancelasecondepr-image)
|
||||
* 10.9. [Compression](#Compression)
|
||||
* 10.10. [Non réversibilité](#Nonrversibilit)
|
||||
* 10.11. [Absence de toute structure prévisible](#Absencedetoutestructureprvisible)
|
||||
* 10.1. [Pas de secret de la conception](#Pasdesecretdelaconception)
|
||||
* 10.2. [Validé par la communauté scientifique](#Validparlacommunautscientifique)
|
||||
* 10.3. [Implémentation correcte](#Implmentationcorrecte)
|
||||
* 10.4. [Détermination](#Dtermination)
|
||||
* 10.5. [Rapidité de calcul](#Rapiditdecalcul)
|
||||
* 10.6. [Diffusion (ou effet avalanche)](#Diffusionoueffetavalanche)
|
||||
* 10.7. [Résistance aux collisions](#Rsistanceauxcollisions)
|
||||
* 10.7.1. [Résistance aux collisions faibles](#Rsistanceauxcollisionsfaibles)
|
||||
* 10.7.2. [Résistance aux collisions fortes](#Rsistanceauxcollisionsfortes)
|
||||
* 10.8. [Résistance à la pre_id](#Rsistancelapre_id)
|
||||
* 10.8.1. [Résistance à la pre_id](#Rsistancelapre_id-1)
|
||||
* 10.8.2. [Résistance à la seconde pre_id](#Rsistancelasecondepre_id)
|
||||
* 10.9. [Compression](#Compression)
|
||||
* 10.10. [Non réversibilité](#Nonrversibilit)
|
||||
* 10.11. [Absence de toute structure prévisible](#Absencedetoutestructureprvisible)
|
||||
* 11. [Gestion sécurisée des clés](#Gestionscurisedescls)
|
||||
* 12. [Performance](#Performance)
|
||||
* 13. [Disponibilité](#Disponibilit)
|
||||
@ -40,11 +40,11 @@
|
||||
/vscode-markdown-toc-config -->
|
||||
<!-- /vscode-markdown-toc --># Exigences de sécurité et de confidentialité
|
||||
|
||||
## 1. <a name='Documentsderfrence'></a>Documents de référence
|
||||
## 1. <a name='Documentsderfrence'></a>Documents de référence
|
||||
|
||||
Voir [_Doc_references.md](_Doc_references.md).
|
||||
|
||||
## 2. <a name='Dtailsdeconception'></a>Détails de conception
|
||||
## 2. <a name='Dtailsdeconception'></a>Détails de conception
|
||||
|
||||
Tous les chiffrements symétriques sont opérés avec l'algorithme AES-GCM 256 bits.
|
||||
|
||||
@ -52,23 +52,23 @@ Tous les hash sont opérés avec l'algorithme SHA256.
|
||||
|
||||
La librairie Rust `Nakamoto`, permet de scanner les blocs (et bientôt la mempool) côté client et de détecter des transactions Bitcoin correspondant aux clés publiques des clés cryptographiques privées du HD Wallet Bitcoin contenant les clés Bitcoin de mainnet et de signet.
|
||||
|
||||
## 3. <a name='Motdepasse'></a>Mot de passe
|
||||
## 3. <a name='Motdepasse'></a>Mot de passe
|
||||
|
||||
Utilisation du mot de passe strictement en mémoire.
|
||||
|
||||
Mot de passe fort (18 caractères minimum avec minuscules, majuscules, lettre, nombres, et caractères spéciaux) ou mnémonique de 12 mots à noter ou certificat (ou équivalent) stocké de façon sécurisée.
|
||||
|
||||
## 4. <a name='Cache'></a>Cache
|
||||
## 4. <a name='Cache'></a>Cache
|
||||
|
||||
Stockage sécurisé du cache par un chiffrement par le mot de passe.
|
||||
|
||||
## 5. <a name='Chiffrementdescommunications'></a>Chiffrement des communications
|
||||
## 5. <a name='Chiffrementdescommunications'></a>Chiffrement des communications
|
||||
|
||||
Le chiffrement du transport des données se fait par TLS entre les clients et le noeuds entrants pour palier aux restrictions sur les flux non TLS par les navigateurs et les applications mobiles.
|
||||
|
||||
Néanmoins tous les messages chiffrent les `RequestPcd` et `RequestPrd` avec une clé de chiffrement conforme aux exigences suivantes et échangée dans le Diffie-Hellman de la transaction SP, en parallèle donc des flux `RequestPcd` et `RequestPrd`.Ces clés ne sont accessibles donc qu'avec la clé privée du destinataire ou de l'émetteur, qui ne sont jamais partagées.
|
||||
|
||||
## 6. <a name='ConfidentialitdesRequestPcdetRequestPrd'></a>Confidentialité des `RequestPcd` et RequestPrd
|
||||
## 6. <a name='ConfidentialitdesRequestPcdetRequestPrd'></a>Confidentialité des `RequestPcd` et RequestPrd
|
||||
|
||||
Le stockage chiffré de cache est un chiffrement symétrique conformément aux exigences suivantes.
|
||||
|
||||
@ -82,99 +82,99 @@ Le chiffrement des `RequestPcd` est un chiffrement symétrique conformément aux
|
||||
|
||||
* **Données privées**: un chiffrement symétrique conformément aux exigences suivantes depuis le chiffrement par la clé de spend de login (`recover`) du signet (voir Login - Specs).
|
||||
|
||||
## 7. <a name='Confidentialitdesmessagessurlesrelais'></a>Confidentialité des messages sur les relais
|
||||
## 7. <a name='Confidentialitdesmessagessurlesrelais'></a>Confidentialité des messages sur les relais
|
||||
|
||||
Les `RequestPcd` et les `RequestPrd` sont envoyés aux relais dans des enveloppes appelées `Message`.
|
||||
|
||||
Ces enveloppent communique les `RequestPcd` et les `RequestPrd` de façon chiffrée par la `ProcessKey`. Ainsi les messages sont rendus fongibles sur le réseau de relais.
|
||||
|
||||
Tous les `RequestPrd` (sauf les `RequestPrdKeyBackup` et les `RequestPrdKeyHello`), sont confirmés par un et chiffrent les clés transamises par une `KeyConfiditial`.
|
||||
Tous les `RequestPrd` sont confirmés par un et chiffrent les clés transamises par une `KeyConfiditial`.
|
||||
|
||||
Les relais peuvent déchiffrer les enveloppes avec la `ProcessKey`, le contenu étant chiffré en plus en fonction des niveaux de confidentialité. L'objectif du chiffrage des enveloppe est de donner, un temps, un coût et une complexité aux analyses systématiques des flux.
|
||||
|
||||
## 8. <a name='Cldechiffrementrobuste'></a>Clé de chiffrement robuste
|
||||
## 8. <a name='Cldechiffrementrobuste'></a>Clé de chiffrement robuste
|
||||
|
||||
La force d'un algorithme de chiffrement symétrique repose largement sur la complexité de sa clé. Une clé plus longue offre généralement une meilleure sécurité. Les tailles de clé typiques pour un chiffrement fort sont de 128 bits, 192 bits, ou 256 bits. Pour l'AES-GCM, les clés de 256 bits sont à ce stade réputées "quantum-resistant" et sont donc à privilégier, elles satisfont aussi les contraintes suivantes.
|
||||
|
||||
### 8.1. <a name='Rsistanceauxattaquescryptanalytiques'></a>Résistance aux attaques cryptanalytiques
|
||||
### 8.1. <a name='Rsistanceauxattaquescryptanalytiques'></a>Résistance aux attaques cryptanalytiques
|
||||
|
||||
Un algorithme fort doit résister à diverses attaques, y compris les attaques par force brute (où un attaquant essaie toutes les clés possibles), les attaques par texte clair connu, les attaques par texte clair choisi, les attaques par texte chiffré choisi, et plus encore. L'AES-GCM les clés de 256 bits n'est pas par design robuste à ces attaques, mais avec une clé suffisamment longue (de longueur quantique) le temps nécessaire est estimé comme équivalent à une résistance.
|
||||
|
||||
### 8.2. <a name='Diffusionetconfusion'></a>Diffusion et confusion
|
||||
### 8.2. <a name='Diffusionetconfusion'></a>Diffusion et confusion
|
||||
|
||||
Ces deux principes, introduits par Claude Shannon, sont essentiels à la sécurité d'un algorithme. La diffusion vise à disperser l'influence d'un seul caractère du texte clair sur de nombreux caractères du texte chiffré, tandis que la confusion vise à complexifier la relation entre la clé de chiffrement et le texte chiffré.
|
||||
|
||||
### 8.3. <a name='Non-linarit'></a>Non-linéarité
|
||||
### 8.3. <a name='Non-linarit'></a>Non-linéarité
|
||||
|
||||
L'algorithme doit incorporer des éléments non linéaires pour contrer les attaques linéaires et différentielles. Cela rend la prédiction du comportement de l'algorithme plus difficile pour un attaquant.
|
||||
|
||||
## 9. <a name='Fonctionsdehashage'></a>Fonctions de hashage
|
||||
## 9. <a name='Fonctionsdehashage'></a>Fonctions de hashage
|
||||
|
||||
Les fonctions de hachage jouent un rôle crucial dans de nombreux domaines de la cryptographie et de la sécurité informatique, notamment dans la vérification de l'intégrité des données, l'authentification, la signature numérique, et la génération de jetons sécurisés. Pour être efficaces et sécurisées, ces fonctions doivent répondre à plusieurs exigences essentielles :
|
||||
|
||||
## 10. <a name='Exigencesgnriques'></a>Exigences génériques
|
||||
## 10. <a name='Exigencesgnriques'></a>Exigences génériques
|
||||
|
||||
### 10.1. <a name='Pasdesecretdelaconception'></a>Pas de secret de la conception
|
||||
### 10.1. <a name='Pasdesecretdelaconception'></a>Pas de secret de la conception
|
||||
|
||||
La sécurité d'un bon système cryptographique ne doit pas reposer sur le secret de son algorithme (principe de Kerckhoffs) et doit être basée sur des principes cryptographiques éprouvés.
|
||||
|
||||
### 10.2. <a name='Validparlacommunautscientifique'></a>Validé par la communauté scientifique
|
||||
### 10.2. <a name='Validparlacommunautscientifique'></a>Validé par la communauté scientifique
|
||||
|
||||
Un algorithme est considéré comme plus fort s'il a été soumis à l'examen et à l'analyse de la communauté cryptographique internationale, qui cherche des vulnérabilités potentielles.
|
||||
|
||||
### 10.3. <a name='Implmentationcorrecte'></a>Implémentation correcte
|
||||
### 10.3. <a name='Implmentationcorrecte'></a>Implémentation correcte
|
||||
|
||||
Une implémentation fautive d'un algorithme de chiffrement fort peut introduire des vulnérabilités. Il est crucial que l'implémentation soit vérifiée pour être sécurisée. La librairie utilisée doit avoir été l'objet d'un audit ([librairie aes-gcm de rust a été auditée](https://research.nccgroup.com/2020/02/26/public-report-rustcrypto-aes-gcm-and-chacha20poly1305-implementation-review/)).
|
||||
|
||||
### 10.4. <a name='Dtermination'></a>Détermination
|
||||
### 10.4. <a name='Dtermination'></a>Détermination
|
||||
|
||||
Pour toute entrée donnée, la fonction de hachage doit toujours produire la même sortie.
|
||||
|
||||
### 10.5. <a name='Rapiditdecalcul'></a>Rapidité de calcul
|
||||
### 10.5. <a name='Rapiditdecalcul'></a>Rapidité de calcul
|
||||
|
||||
La fonction doit être capable de générer le hachage rapidement, même pour de grandes quantités de données.
|
||||
|
||||
### 10.6. <a name='Diffusionoueffetavalanche'></a>Diffusion (ou effet avalanche)
|
||||
### 10.6. <a name='Diffusionoueffetavalanche'></a>Diffusion (ou effet avalanche)
|
||||
|
||||
Un changement minime dans l'entrée (même un seul bit) doit entraîner un changement significatif et imprévisible dans la sortie. Cela garantit qu'il est difficile de prédire comment la sortie changera en fonction des modifications apportées à l'entrée.
|
||||
|
||||
### 10.7. <a name='Rsistanceauxcollisions'></a>Résistance aux collisions
|
||||
### 10.7. <a name='Rsistanceauxcollisions'></a>Résistance aux collisions
|
||||
|
||||
Il doit être pratiquement impossible de trouver deux entrées distinctes qui produisent la même sortie. Cela se décline en deux sous-catégories :
|
||||
|
||||
#### 10.7.1. <a name='Rsistanceauxcollisionsfaibles'></a>Résistance aux collisions faibles
|
||||
#### 10.7.1. <a name='Rsistanceauxcollisionsfaibles'></a>Résistance aux collisions faibles
|
||||
|
||||
Il est difficile de trouver une seconde entrée qui a le même hachage qu'une entrée spécifiée.
|
||||
|
||||
#### 10.7.2. <a name='Rsistanceauxcollisionsfortes'></a>Résistance aux collisions fortes
|
||||
#### 10.7.2. <a name='Rsistanceauxcollisionsfortes'></a>Résistance aux collisions fortes
|
||||
|
||||
Il est difficile de trouver deux entrées distinctes qui produisent le même hachage.
|
||||
|
||||
### 10.8. <a name='Rsistancelapr-image'></a>Résistance à la pre_id
|
||||
### 10.8. <a name='Rsistancelapre_id'></a>Résistance à la pre_id
|
||||
|
||||
Pour une sortie de hachage donnée, il doit être difficile de trouver une entrée qui correspond à cette sortie. Cela se décline également en deux sous-catégories :
|
||||
|
||||
#### 10.8.1. <a name='Rsistancelapr-image-1'></a>Résistance à la pre_id
|
||||
#### 10.8.1. <a name='Rsistancelapre_id-1'></a>Résistance à la pre_id
|
||||
|
||||
Il est difficile de trouver une entrée qui hache vers une sortie de hachage spécifiée.
|
||||
|
||||
#### 10.8.2. <a name='Rsistancelasecondepr-image'></a>Résistance à la seconde pre_id
|
||||
#### 10.8.2. <a name='Rsistancelasecondepre_id'></a>Résistance à la seconde pre_id
|
||||
|
||||
Étant donné une entrée, il est difficile de trouver une autre entrée qui produit le même hachage.
|
||||
|
||||
### 10.9. <a name='Compression'></a>Compression
|
||||
### 10.9. <a name='Compression'></a>Compression
|
||||
|
||||
La fonction de hachage doit pouvoir prendre une entrée de taille arbitraire et produire une sortie de taille fixe.
|
||||
|
||||
### 10.10. <a name='Nonrversibilit'></a>Non réversibilité
|
||||
### 10.10. <a name='Nonrversibilit'></a>Non réversibilité
|
||||
|
||||
Il doit être infaisable de retrouver l'entrée à partir de la sortie du hachage. Cela signifie que la fonction est à sens unique.
|
||||
|
||||
### 10.11. <a name='Absencedetoutestructureprvisible'></a>Absence de toute structure prévisible
|
||||
### 10.11. <a name='Absencedetoutestructureprvisible'></a>Absence de toute structure prévisible
|
||||
|
||||
La fonction de hachage ne doit pas produire des sorties qui montrent des patterns ou des structures prévisibles, quelles que soient les entrées.
|
||||
|
||||
## 11. <a name='Gestionscurisedescls'></a>Gestion sécurisée des clés
|
||||
## 11. <a name='Gestionscurisedescls'></a>Gestion sécurisée des clés
|
||||
|
||||
La manière dont les clés sont générées, stockées, distribuées, révoquées, et détruites est tout aussi importante que l'algorithme de chiffrement lui-même.
|
||||
|
||||
@ -184,24 +184,24 @@ Les parties sont pour la moitié stockées dans le contexte utilisateur (chiffr
|
||||
|
||||
L'utilisateur seul peut détruire une clé de révocation (`revoke`) ou supprimer l'image de login qui contient la première partie de la clé de login, indispensable pour recomposer sa clé.
|
||||
|
||||
## 12. <a name='Performance'></a>Performance
|
||||
## 12. <a name='Performance'></a>Performance
|
||||
|
||||
Le temps de réponse doit être rapide pour les opérations de login. Ce temps sera estimé de façon empirique au fur et à mesure des implémentations.
|
||||
|
||||
## 13. <a name='Disponibilit'></a>Disponibilité
|
||||
## 13. <a name='Disponibilit'></a>Disponibilité
|
||||
|
||||
La haute disponibilité et la reprise après sinistre sont permises par la redondance des `relais` sans système central ou critique et robustes à la défaillance d'une partie des participants. C'est idem pour la redondance au sein des `membres` des gestionnaires des membres dans les `processus`, qui ont tous des actions égales et robustes à la défaillance d'une partie des participants.
|
||||
|
||||
En cas de perte, vol, corruption, ou expiration des clés, l'utilisateur peut de son initiative et en toute autonomie révoquer une identité et en générer une nouvelle.
|
||||
|
||||
## 14. <a name='volutivit'></a>Évolutivité
|
||||
## 14. <a name='volutivit'></a>Évolutivité
|
||||
|
||||
La capacité à gérer une augmentation du nombre d'`utilisateurs` est un équilibre arbitré par les parties prenantes, en fonction du besoin de `relais` et de `membres`. Les parties prenantes ont les moyens d'enrôler par eux-mêmes les relais et les membres par `rôles` et par `ItemProcess` .
|
||||
|
||||
## 15. <a name='AutresMesuresdescurit'></a>Autres Mesures de sécurité
|
||||
## 15. <a name='AutresMesuresdescurit'></a>Autres Mesures de sécurité
|
||||
|
||||
Les mécanismes de défense contre les vulnérabilités courantes doivent être implémentés (CSRF, XSS).
|
||||
|
||||
À noter, que les seules bases de données sont dans l'IndexedDB des navigateurs et applications mobiles, côté utilisateur et écrasées des données confirmées reçues du réseau et toutes vérifiables. Tous les autres composants et utilisateurs ont un stockage en mémoire, non persisté (mais restauré à leur propre récupération de leur identité).
|
||||
|
||||
## 16. <a name='Todo'></a>Todo
|
||||
## 16. <a name='Todo'></a>Todo
|
||||
|
@ -1,295 +0,0 @@
|
||||
<mxfile host="Electron" modified="2024-02-21T12:10:46.222Z" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/23.1.5 Chrome/120.0.6099.109 Electron/28.1.0 Safari/537.36" etag="HrZZ3Lo8jTvOJ2GRapGZ" version="23.1.5" type="device">
|
||||
<diagram name="Page-1" id="2YBvvXClWsGukQMizWep">
|
||||
<mxGraphModel dx="1434" dy="1970" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="MqokN8DVP6Cu9g1BAX3J-285" value="" style="strokeWidth=2;html=1;shape=mxgraph.flowchart.annotation_1;align=left;pointerEvents=1;fontColor=#000000;rotation=-180;" parent="1" vertex="1">
|
||||
<mxGeometry x="1355" y="175" width="150" height="105" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="MqokN8DVP6Cu9g1BAX3J-259" value="TxFaucet" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=horizontal;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;" parent="1" edge="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="986" y="163" as="sourcePoint" />
|
||||
<Array as="points">
|
||||
<mxPoint x="901" y="163" />
|
||||
</Array>
|
||||
<mxPoint x="816" y="163" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="MqokN8DVP6Cu9g1BAX3J-258" value="TxFaucet" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=horizontal;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=3;fontColor=#000000;" parent="1" edge="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="844" y="223" as="sourcePoint" />
|
||||
<Array as="points">
|
||||
<mxPoint x="929" y="223" />
|
||||
</Array>
|
||||
<mxPoint x="1014" y="223" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="MqokN8DVP6Cu9g1BAX3J-208" value="Message" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=3;fontColor=#000000;" parent="1" edge="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="995" y="205" as="sourcePoint" />
|
||||
<Array as="points">
|
||||
<mxPoint x="1080" y="205" />
|
||||
</Array>
|
||||
<mxPoint x="1165" y="205" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="MqokN8DVP6Cu9g1BAX3J-5" value="call" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=horizontal;curved=0;rounded=0;fontColor=#000000;" parent="1" edge="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="275" y="145" as="sourcePoint" />
|
||||
<Array as="points">
|
||||
<mxPoint x="360" y="145" />
|
||||
</Array>
|
||||
<mxPoint x="445" y="145" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="MqokN8DVP6Cu9g1BAX3J-12" value="Message" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=3;fontColor=#000000;" parent="1" edge="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="455" y="205" as="sourcePoint" />
|
||||
<Array as="points">
|
||||
<mxPoint x="540" y="205" />
|
||||
</Array>
|
||||
<mxPoint x="625" y="205" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="MqokN8DVP6Cu9g1BAX3J-18" value="MessageConnect" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=horizontal;curved=0;rounded=0;fontColor=#000000;" parent="1" edge="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="635" y="143" as="sourcePoint" />
|
||||
<Array as="points">
|
||||
<mxPoint x="720" y="143" />
|
||||
</Array>
|
||||
<mxPoint x="800" y="143" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="MqokN8DVP6Cu9g1BAX3J-23" value=":WS" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=0;dropTarget=0;collapsible=0;recursiveResize=0;outlineConnect=0;portConstraint=eastwest;newEdgeStyle={"edgeStyle":"elbowEdgeStyle","elbow":"vertical","curved":0,"rounded":0};fontColor=#000000;" parent="1" vertex="1">
|
||||
<mxGeometry x="1120" y="40" width="100" height="320" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="MqokN8DVP6Cu9g1BAX3J-24" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={"edgeStyle":"elbowEdgeStyle","elbow":"vertical","curved":0,"rounded":0};fontColor=#000000;" parent="MqokN8DVP6Cu9g1BAX3J-23" vertex="1">
|
||||
<mxGeometry x="45" y="101" width="10" height="170" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="MqokN8DVP6Cu9g1BAX3J-31" value=":Wasm" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=0;dropTarget=0;collapsible=0;recursiveResize=0;outlineConnect=0;portConstraint=eastwest;newEdgeStyle={"edgeStyle":"elbowEdgeStyle","elbow":"vertical","curved":0,"rounded":0};fontColor=#000000;" parent="1" vertex="1">
|
||||
<mxGeometry x="1300" y="40" width="100" height="320" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="MqokN8DVP6Cu9g1BAX3J-32" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={"edgeStyle":"elbowEdgeStyle","elbow":"vertical","curved":0,"rounded":0};fontColor=#000000;" parent="MqokN8DVP6Cu9g1BAX3J-31" vertex="1">
|
||||
<mxGeometry x="45" y="101" width="10" height="170" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="MqokN8DVP6Cu9g1BAX3J-37" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={"edgeStyle":"elbowEdgeStyle","elbow":"vertical","curved":0,"rounded":0};fontColor=#000000;" parent="1" vertex="1">
|
||||
<mxGeometry x="1345" y="141" width="10" height="170" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="MqokN8DVP6Cu9g1BAX3J-52" value="USER A" style="rounded=0;whiteSpace=wrap;html=1;fontStyle=1;fontColor=#000000;" parent="1" vertex="1">
|
||||
<mxGeometry x="40" y="-41" width="640" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="MqokN8DVP6Cu9g1BAX3J-53" value="RELAYs PCD/PRD" style="rounded=0;whiteSpace=wrap;html=1;fontStyle=1;fontColor=#000000;" parent="1" vertex="1">
|
||||
<mxGeometry x="760" y="-40" width="280" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="MqokN8DVP6Cu9g1BAX3J-54" value="USER B" style="rounded=0;whiteSpace=wrap;html=1;fontStyle=1;fontColor=#000000;" parent="1" vertex="1">
|
||||
<mxGeometry x="1119" y="-40" width="641" height="39" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="MqokN8DVP6Cu9g1BAX3J-193" value="" style="strokeWidth=2;html=1;shape=mxgraph.flowchart.annotation_1;align=left;pointerEvents=1;fontColor=#000000;" parent="1" vertex="1">
|
||||
<mxGeometry x="310" y="188" width="135" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="MqokN8DVP6Cu9g1BAX3J-194" value="RequestPcd" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;strokeWidth=3;fontColor=#000000;fontStyle=1" parent="1" vertex="1">
|
||||
<mxGeometry x="351.5" y="193" width="60" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="MqokN8DVP6Cu9g1BAX3J-195" value="MessageConnect" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=horizontal;curved=0;rounded=0;fontColor=#000000;" parent="1" edge="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="456" y="145" as="sourcePoint" />
|
||||
<Array as="points">
|
||||
<mxPoint x="541" y="145" />
|
||||
</Array>
|
||||
<mxPoint x="626" y="145" as="targetPoint" />
|
||||
<mxPoint as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="MqokN8DVP6Cu9g1BAX3J-196" value="TxFaucet" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=horizontal;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;" parent="1" edge="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="636" y="163" as="sourcePoint" />
|
||||
<Array as="points">
|
||||
<mxPoint x="721" y="163" />
|
||||
</Array>
|
||||
<mxPoint x="806" y="163" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="MqokN8DVP6Cu9g1BAX3J-198" value="TxFaucet" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=horizontal;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;" parent="1" edge="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="455" y="164" as="sourcePoint" />
|
||||
<Array as="points">
|
||||
<mxPoint x="540" y="164" />
|
||||
</Array>
|
||||
<mxPoint x="625" y="164" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="MqokN8DVP6Cu9g1BAX3J-203" value="Message" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=3;fontColor=#000000;" parent="1" edge="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="636" y="206" as="sourcePoint" />
|
||||
<Array as="points">
|
||||
<mxPoint x="721" y="206" />
|
||||
</Array>
|
||||
<mxPoint x="806" y="206" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="MqokN8DVP6Cu9g1BAX3J-204" value="Message" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=3;fontColor=#000000;" parent="1" edge="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="816" y="206" as="sourcePoint" />
|
||||
<Array as="points">
|
||||
<mxPoint x="901" y="206" />
|
||||
</Array>
|
||||
<mxPoint x="986" y="206" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="MqokN8DVP6Cu9g1BAX3J-212" value="RequestPcdConfrm" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontColor=#000000;fontStyle=1" parent="1" vertex="1">
|
||||
<mxGeometry x="1380" y="189.5" width="70" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="MqokN8DVP6Cu9g1BAX3J-215" value="Message" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=3;fontColor=#000000;" parent="1" edge="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="1176" y="205" as="sourcePoint" />
|
||||
<Array as="points">
|
||||
<mxPoint x="1261" y="205" />
|
||||
</Array>
|
||||
<mxPoint x="1346" y="205" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="MqokN8DVP6Cu9g1BAX3J-223" value="TxFaucet" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=horizontal;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=3;fontColor=#000000;" parent="1" edge="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="634" y="223" as="sourcePoint" />
|
||||
<Array as="points">
|
||||
<mxPoint x="719" y="223" />
|
||||
</Array>
|
||||
<mxPoint x="804" y="223" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="MqokN8DVP6Cu9g1BAX3J-224" value="TxFaucet" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=horizontal;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=3;fontColor=#000000;" parent="1" edge="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="453" y="224" as="sourcePoint" />
|
||||
<Array as="points">
|
||||
<mxPoint x="538" y="224" />
|
||||
</Array>
|
||||
<mxPoint x="623" y="224" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="MqokN8DVP6Cu9g1BAX3J-40" value=":JS" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=0;dropTarget=0;collapsible=0;recursiveResize=0;outlineConnect=0;portConstraint=eastwest;newEdgeStyle={"edgeStyle":"elbowEdgeStyle","elbow":"vertical","curved":0,"rounded":0};fontColor=#000000;" parent="1" vertex="1">
|
||||
<mxGeometry x="1480" y="40" width="100" height="320" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="MqokN8DVP6Cu9g1BAX3J-41" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={"edgeStyle":"elbowEdgeStyle","elbow":"vertical","curved":0,"rounded":0};fontColor=#000000;" parent="MqokN8DVP6Cu9g1BAX3J-40" vertex="1">
|
||||
<mxGeometry x="45" y="67.37" width="10" height="192.63" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="MqokN8DVP6Cu9g1BAX3J-46" value=":Page" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=0;dropTarget=0;collapsible=0;recursiveResize=0;outlineConnect=0;portConstraint=eastwest;newEdgeStyle={"edgeStyle":"elbowEdgeStyle","elbow":"vertical","curved":0,"rounded":0};fontColor=#000000;" parent="1" vertex="1">
|
||||
<mxGeometry x="1660" y="40" width="100" height="520" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="MqokN8DVP6Cu9g1BAX3J-47" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={"edgeStyle":"elbowEdgeStyle","elbow":"vertical","curved":0,"rounded":0};fontColor=#000000;" parent="MqokN8DVP6Cu9g1BAX3J-46" vertex="1">
|
||||
<mxGeometry x="45" y="100" width="10" height="340" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="UaradclDddL_qDXI0ZBg-1" value="Waiting for RequestPrdResponses" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontColor=#000000;" vertex="1" parent="1">
|
||||
<mxGeometry x="1360" y="238" width="60" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="UaradclDddL_qDXI0ZBg-2" value="" style="group" vertex="1" connectable="0" parent="1">
|
||||
<mxGeometry x="760" y="42.54" width="595" height="317.46" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="MqokN8DVP6Cu9g1BAX3J-29" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={"edgeStyle":"elbowEdgeStyle","elbow":"vertical","curved":0,"rounded":0};fontColor=#000000;" parent="UaradclDddL_qDXI0ZBg-2" vertex="1">
|
||||
<mxGeometry x="405" y="60.40658088235295" width="10" height="207.9740073529412" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="MqokN8DVP6Cu9g1BAX3J-38" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={"edgeStyle":"elbowEdgeStyle","elbow":"vertical","curved":0,"rounded":0};fontColor=#000000;" parent="UaradclDddL_qDXI0ZBg-2" vertex="1">
|
||||
<mxGeometry x="585" y="60.40658088235295" width="10" height="207.9740073529412" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="MqokN8DVP6Cu9g1BAX3J-219" value="" style="group;fontColor=#000000;" parent="UaradclDddL_qDXI0ZBg-2" vertex="1" connectable="0">
|
||||
<mxGeometry x="180" width="130" height="317.46" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="MqokN8DVP6Cu9g1BAX3J-116" value=":WS" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=0;dropTarget=0;collapsible=0;recursiveResize=0;outlineConnect=0;portConstraint=eastwest;newEdgeStyle={"edgeStyle":"elbowEdgeStyle","elbow":"vertical","curved":0,"rounded":0};fontColor=#000000;" parent="MqokN8DVP6Cu9g1BAX3J-219" vertex="1">
|
||||
<mxGeometry width="100" height="288.5999999999999" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="MqokN8DVP6Cu9g1BAX3J-135" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={"edgeStyle":"elbowEdgeStyle","elbow":"vertical","curved":0,"rounded":0};fontColor=#000000;" parent="MqokN8DVP6Cu9g1BAX3J-219" vertex="1">
|
||||
<mxGeometry x="45" y="61.349264705882355" width="10" height="190.1827205882353" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="MqokN8DVP6Cu9g1BAX3J-169" value=":WS" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=0;dropTarget=0;collapsible=0;recursiveResize=0;outlineConnect=0;portConstraint=eastwest;newEdgeStyle={"edgeStyle":"elbowEdgeStyle","elbow":"vertical","curved":0,"rounded":0};fontColor=#000000;" parent="MqokN8DVP6Cu9g1BAX3J-219" vertex="1">
|
||||
<mxGeometry x="10" y="9.62" width="100" height="288.5999999999999" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="MqokN8DVP6Cu9g1BAX3J-170" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={"edgeStyle":"elbowEdgeStyle","elbow":"vertical","curved":0,"rounded":0};fontColor=#000000;" parent="MqokN8DVP6Cu9g1BAX3J-169" vertex="1">
|
||||
<mxGeometry x="45" y="55.21433823529412" width="10" height="190.1827205882353" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="MqokN8DVP6Cu9g1BAX3J-171" value=":WS" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=0;dropTarget=0;collapsible=0;recursiveResize=0;outlineConnect=0;portConstraint=eastwest;newEdgeStyle={"edgeStyle":"elbowEdgeStyle","elbow":"vertical","curved":0,"rounded":0};fontColor=#000000;" parent="MqokN8DVP6Cu9g1BAX3J-219" vertex="1">
|
||||
<mxGeometry x="20" y="19.24" width="100" height="288.5999999999999" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="MqokN8DVP6Cu9g1BAX3J-172" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={"edgeStyle":"elbowEdgeStyle","elbow":"vertical","curved":0,"rounded":0};fontColor=#000000;" parent="MqokN8DVP6Cu9g1BAX3J-171" vertex="1">
|
||||
<mxGeometry x="45" y="49.07941176470588" width="10" height="196.31764705882352" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="MqokN8DVP6Cu9g1BAX3J-173" value=":WS" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=0;dropTarget=0;collapsible=0;recursiveResize=0;outlineConnect=0;portConstraint=eastwest;newEdgeStyle={"edgeStyle":"elbowEdgeStyle","elbow":"vertical","curved":0,"rounded":0};fontColor=#000000;" parent="MqokN8DVP6Cu9g1BAX3J-219" vertex="1">
|
||||
<mxGeometry x="30" y="28.859999999999992" width="100" height="288.5999999999999" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="MqokN8DVP6Cu9g1BAX3J-174" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={"edgeStyle":"elbowEdgeStyle","elbow":"vertical","curved":0,"rounded":0};fontColor=#000000;" parent="MqokN8DVP6Cu9g1BAX3J-173" vertex="1">
|
||||
<mxGeometry x="45" y="49.07941176470588" width="10" height="191.42197573529413" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="MqokN8DVP6Cu9g1BAX3J-220" value="" style="group;fontColor=#000000;" parent="UaradclDddL_qDXI0ZBg-2" vertex="1" connectable="0">
|
||||
<mxGeometry width="130" height="317.46" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="MqokN8DVP6Cu9g1BAX3J-16" value=":WS" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=0;dropTarget=0;collapsible=0;recursiveResize=0;outlineConnect=0;portConstraint=eastwest;newEdgeStyle={"edgeStyle":"elbowEdgeStyle","elbow":"vertical","curved":0,"rounded":0};fontColor=#000000;" parent="MqokN8DVP6Cu9g1BAX3J-220" vertex="1">
|
||||
<mxGeometry width="100" height="288.5999999999999" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="MqokN8DVP6Cu9g1BAX3J-115" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={"edgeStyle":"elbowEdgeStyle","elbow":"vertical","curved":0,"rounded":0};fontColor=#000000;" parent="MqokN8DVP6Cu9g1BAX3J-220" vertex="1">
|
||||
<mxGeometry x="45" y="61.349264705882355" width="10" height="190.1827205882353" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="MqokN8DVP6Cu9g1BAX3J-159" value=":WS" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=0;dropTarget=0;collapsible=0;recursiveResize=0;outlineConnect=0;portConstraint=eastwest;newEdgeStyle={"edgeStyle":"elbowEdgeStyle","elbow":"vertical","curved":0,"rounded":0};fontColor=#000000;" parent="MqokN8DVP6Cu9g1BAX3J-220" vertex="1">
|
||||
<mxGeometry x="10" y="9.62" width="100" height="288.5999999999999" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="MqokN8DVP6Cu9g1BAX3J-160" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={"edgeStyle":"elbowEdgeStyle","elbow":"vertical","curved":0,"rounded":0};fontColor=#000000;" parent="MqokN8DVP6Cu9g1BAX3J-159" vertex="1">
|
||||
<mxGeometry x="45" y="55.21433823529412" width="10" height="196.31764705882352" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="MqokN8DVP6Cu9g1BAX3J-161" value=":WS" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=0;dropTarget=0;collapsible=0;recursiveResize=0;outlineConnect=0;portConstraint=eastwest;newEdgeStyle={"edgeStyle":"elbowEdgeStyle","elbow":"vertical","curved":0,"rounded":0};fontColor=#000000;" parent="MqokN8DVP6Cu9g1BAX3J-220" vertex="1">
|
||||
<mxGeometry x="20" y="19.24" width="100" height="288.5999999999999" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="MqokN8DVP6Cu9g1BAX3J-162" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={"edgeStyle":"elbowEdgeStyle","elbow":"vertical","curved":0,"rounded":0};fontColor=#000000;" parent="MqokN8DVP6Cu9g1BAX3J-161" vertex="1">
|
||||
<mxGeometry x="45" y="49.07941176470588" width="10" height="196.31764705882352" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="MqokN8DVP6Cu9g1BAX3J-163" value=":WS" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=0;dropTarget=0;collapsible=0;recursiveResize=0;outlineConnect=0;portConstraint=eastwest;newEdgeStyle={"edgeStyle":"elbowEdgeStyle","elbow":"vertical","curved":0,"rounded":0};fontColor=#000000;" parent="MqokN8DVP6Cu9g1BAX3J-220" vertex="1">
|
||||
<mxGeometry x="30" y="28.859999999999996" width="100" height="288.5999999999999" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="MqokN8DVP6Cu9g1BAX3J-164" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={"edgeStyle":"elbowEdgeStyle","elbow":"vertical","curved":0,"rounded":0};fontColor=#000000;" parent="MqokN8DVP6Cu9g1BAX3J-163" vertex="1">
|
||||
<mxGeometry x="45" y="42.94448529411765" width="10" height="197.55690220588235" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="UaradclDddL_qDXI0ZBg-3" value="" style="group" vertex="1" connectable="0" parent="1">
|
||||
<mxGeometry x="40" y="40" width="640" height="320" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="aM9ryv3xv72pqoxQDRHE-5" value=":JS" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=0;dropTarget=0;collapsible=0;recursiveResize=0;outlineConnect=0;portConstraint=eastwest;newEdgeStyle={"edgeStyle":"elbowEdgeStyle","elbow":"vertical","curved":0,"rounded":0};fontColor=#000000;" parent="UaradclDddL_qDXI0ZBg-3" vertex="1">
|
||||
<mxGeometry x="180" width="100" height="320" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="aM9ryv3xv72pqoxQDRHE-6" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={"edgeStyle":"elbowEdgeStyle","elbow":"vertical","curved":0,"rounded":0};fontColor=#000000;" parent="aM9ryv3xv72pqoxQDRHE-5" vertex="1">
|
||||
<mxGeometry x="45" y="49.23076923076923" width="10" height="246.15384615384616" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="MqokN8DVP6Cu9g1BAX3J-3" value=":Wasm" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=0;dropTarget=0;collapsible=0;recursiveResize=0;outlineConnect=0;portConstraint=eastwest;newEdgeStyle={"edgeStyle":"elbowEdgeStyle","elbow":"vertical","curved":0,"rounded":0};fontColor=#000000;" parent="UaradclDddL_qDXI0ZBg-3" vertex="1">
|
||||
<mxGeometry x="360" y="2.119205298013246" width="100" height="317.88079470198676" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="MqokN8DVP6Cu9g1BAX3J-4" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={"edgeStyle":"elbowEdgeStyle","elbow":"vertical","curved":0,"rounded":0};fontColor=#000000;" parent="MqokN8DVP6Cu9g1BAX3J-3" vertex="1">
|
||||
<mxGeometry x="45" y="47.38461538461539" width="10" height="248" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="MqokN8DVP6Cu9g1BAX3J-10" value=":WS" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=0;dropTarget=0;collapsible=0;recursiveResize=0;outlineConnect=0;portConstraint=eastwest;newEdgeStyle={"edgeStyle":"elbowEdgeStyle","elbow":"vertical","curved":0,"rounded":0};fontColor=#000000;" parent="UaradclDddL_qDXI0ZBg-3" vertex="1">
|
||||
<mxGeometry x="540" y="2.119205298013246" width="100" height="317.88079470198676" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="MqokN8DVP6Cu9g1BAX3J-11" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={"edgeStyle":"elbowEdgeStyle","elbow":"vertical","curved":0,"rounded":0};fontColor=#000000;" parent="MqokN8DVP6Cu9g1BAX3J-10" vertex="1">
|
||||
<mxGeometry x="45" y="47.38461538461539" width="10" height="248" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="MqokN8DVP6Cu9g1BAX3J-249" value="" style="group;fontColor=#000000;" parent="UaradclDddL_qDXI0ZBg-3" vertex="1" connectable="0">
|
||||
<mxGeometry width="235" height="317.88079470198676" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="aM9ryv3xv72pqoxQDRHE-1" value=":Page" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=0;dropTarget=0;collapsible=0;recursiveResize=0;outlineConnect=0;portConstraint=eastwest;newEdgeStyle={"edgeStyle":"elbowEdgeStyle","elbow":"vertical","curved":0,"rounded":0};fontColor=#000000;" parent="MqokN8DVP6Cu9g1BAX3J-249" vertex="1">
|
||||
<mxGeometry width="100" height="317.88079470198676" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="aM9ryv3xv72pqoxQDRHE-2" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={"edgeStyle":"elbowEdgeStyle","elbow":"vertical","curved":0,"rounded":0};fontColor=#000000;" parent="aM9ryv3xv72pqoxQDRHE-1" vertex="1">
|
||||
<mxGeometry x="45" y="49.23076923076923" width="10" height="246.15384615384616" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="aM9ryv3xv72pqoxQDRHE-3" value="dispatch" style="html=1;verticalAlign=bottom;startArrow=oval;endArrow=block;startSize=8;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fontColor=#000000;" parent="aM9ryv3xv72pqoxQDRHE-1" edge="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="-15" y="63.19307182883341" as="sourcePoint" />
|
||||
<mxPoint x="45" y="63.07692307692308" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="aM9ryv3xv72pqoxQDRHE-7" value="button" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fontColor=#000000;" parent="UaradclDddL_qDXI0ZBg-3" source="aM9ryv3xv72pqoxQDRHE-2" target="aM9ryv3xv72pqoxQDRHE-6" edge="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="195" y="92.92307692307693" as="sourcePoint" />
|
||||
<Array as="points">
|
||||
<mxPoint x="180" y="86.76923076923077" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
Loading…
x
Reference in New Issue
Block a user