**Motivations:** - Partie connectée du skeleton accessible seulement si pairing satisfait + relais OK, avec page type skeleton (avatar, notifications). - Éviter « Aucun service disponible » : contrat présent en dur dans la page, transmis à l’iframe ; navigation évidente ou automatique vers login. - Sécuriser postMessage (origine UserWallet uniquement) ; déployer data sur le proxy et certificat data.certificator.4nkweb.com. - Vulgariser cryptographie (ECDH, AES-GCM, Schnorr, workflow, collecte signatures) ; documenter correctifs et architecture. **Root causes:** - Section connectée affichée sans vérifier pairing/relay ; possibilité de forger pairing-relay-status depuis la console. - Iframe masquée ou /login chargé avant réception du contrat → graphe vide, redirection vers /services. - Pas de contrôle d’origine sur les messages reçus ; pas de projet website-data ni config Nginx/certificat pour data. **Correctifs:** - Vérification msg.origin === USERWALLET_ORIGIN dans handleMessage (skeleton). - Si session mais pas pairingRelayStatus : afficher iframe pour réception du statut, message « Vérification du statut… ». - Contrat envoyé dès load iframe (init iframe.src = USERWALLET_ORIGIN) ; au clic « Se connecter », envoi contract + navigate-login (service, membre). - UserWallet : écoute navigate-login → navigation /login?service=&membre= ; LoginScreen avec service+membre en URL ne redirige plus vers /services, dispatch E_SELECT_SERVICE / E_SELECT_MEMBER. **Evolutions:** - Message pairing-relay-status (iframe → parent) ; canShowConnectedSection exige login + pairing OK + relay OK ; page connectée avec header avatar + icône notifications. - Skeleton : getLoginContext, sendNavigateLoginToIframe, onIframeLoad, loginRequested/iframeLoaded ; contrat envoyé avec serviceUuid, membreUuid. - UserWallet : PairingRelayStatusMessage, envoi depuis HomeScreen/LoginScreen ; type navigate-login, handleNavigateLogin dans useChannel. - Page cryptographie.html (workflow, algorithmes, collecte signatures) ; liens nav, build. - website-data (Vite, channel, config), start/service/install ; configure-nginx-proxy + Certbot pour data.certificator.4nkweb.com. - fixKnowledge (postmessage-origin, section-connectee-non-affichee) ; features (partie-connectee-pairing-relay, userwallet-iframe-key-isolation). **Pages affectées:** - website-skeleton (index, main, config, serviceContract, cryptographie, technique, membre, contrat, vite.config, README). - userwallet (HomeScreen, LoginScreen, useChannel, iframeChannel, relay, crypto, iframe, Pairing*, RelaySettings, WordInputGrid, syncUpdateGraph, specs/synthese). - website-data (nouveau), configure-nginx-proxy, docs DOMAINS_AND_PORTS README, features, fixKnowledge, userwallet features/docs.
243 lines
13 KiB
HTML
243 lines
13 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="fr">
|
||
<head>
|
||
<meta charset="UTF-8" />
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||
<title>Le contrat – 4NK un nouveau web</title>
|
||
<style>
|
||
* { box-sizing: border-box; }
|
||
body {
|
||
font-family: system-ui, -apple-system, sans-serif;
|
||
max-width: 900px;
|
||
margin: 0 auto;
|
||
padding: 1rem;
|
||
line-height: 1.6;
|
||
color: #333;
|
||
}
|
||
h1 { font-size: 1.5rem; margin-bottom: 1rem; color: #222; }
|
||
h2 { font-size: 1.2rem; margin-top: 1.5rem; margin-bottom: 0.5rem; color: #333; }
|
||
h3 { font-size: 1rem; margin-top: 1rem; margin-bottom: 0.35rem; font-weight: 600; }
|
||
h4 { font-size: 0.95rem; margin-top: 0.75rem; margin-bottom: 0.25rem; font-weight: 600; color: #555; }
|
||
p { margin: 0.75rem 0; }
|
||
ul { margin: 0.5rem 0; padding-left: 1.5rem; }
|
||
li { margin: 0.4rem 0; }
|
||
a { color: #007bff; }
|
||
a:hover { text-decoration: underline; }
|
||
.highlight { background: #e8f4fd; padding: 1rem; border-radius: 8px; border-left: 4px solid #007bff; margin: 1rem 0; }
|
||
.commitment { background: #d4edda; padding: 1rem; border-radius: 8px; border-left: 4px solid #28a745; margin: 1rem 0; }
|
||
.your-part { background: #fff3cd; padding: 1rem; border-radius: 8px; border-left: 4px solid #ffc107; margin: 1rem 0; }
|
||
details { margin: 1rem 0; }
|
||
summary { cursor: pointer; font-weight: 600; color: #555; }
|
||
.meta { font-family: ui-monospace, monospace; font-size: 0.85rem; color: #666; background: #f5f5f5; padding: 0.2em 0.4em; border-radius: 4px; word-break: break-all; }
|
||
.member-list { list-style: none; padding-left: 0; }
|
||
.member-list > li { background: #f8f9fa; padding: 0.75rem 1rem; border-radius: 8px; border: 1px solid #e0e0e0; margin: 0.5rem 0; }
|
||
.member-list > li > em { color: #666; font-size: 0.9rem; }
|
||
.pair-list { list-style: none; margin-top: 0.5rem; padding-left: 1rem; border-left: 3px solid #007bff; }
|
||
.pair-list > li { background: #fff; padding: 0.5rem 0.75rem; border-radius: 6px; margin: 0.4rem 0; border: 1px solid #e8e8e8; }
|
||
.roles-intro { margin-bottom: 1rem; }
|
||
.role-block { background: #f8f9fa; border: 1px solid #e0e0e0; border-radius: 8px; padding: 0.75rem 1rem; margin: 0.5rem 0; }
|
||
.role-block h4 { margin-top: 0; }
|
||
.role-block .usage, .role-block .validation { font-size: 0.9rem; color: #555; margin: 0.25rem 0; }
|
||
.role-block .usage strong, .role-block .validation strong { color: #333; }
|
||
@media (max-width: 768px) {
|
||
body { padding: 0.75rem; }
|
||
h1 { font-size: 1.25rem; }
|
||
}
|
||
</style>
|
||
</head>
|
||
<body>
|
||
<h1>Le contrat</h1>
|
||
<p><a href="index.html">← Retour à l'accueil</a> · <a href="membre.html">Qui êtes-vous ?</a> · <a href="technique.html">Réseau P2P</a> · <a href="cryptographie.html">Cryptographie</a></p>
|
||
|
||
<div class="highlight">
|
||
<strong>En résumé :</strong> Ce contrat définit les règles de confiance entre vous et le service.
|
||
Il précise <strong>qui peut faire quoi</strong> et <strong>comment prouver son identité</strong>.
|
||
Tout est vérifiable et transparent.
|
||
</div>
|
||
|
||
<h2>Qu'est-ce que ce contrat ?</h2>
|
||
<p>
|
||
Ce n'est pas un contrat papier, mais un <strong>accord numérique</strong> qui établit les règles du jeu.
|
||
Il définit :
|
||
</p>
|
||
<ul>
|
||
<li><strong>Le service</strong> : Website Skeleton (ce site de démonstration).</li>
|
||
<li><strong>Les actions possibles</strong> : se connecter (login).</li>
|
||
<li><strong>Les validateurs</strong> : qui a le droit de vérifier les connexions.</li>
|
||
</ul>
|
||
|
||
<h2>Ce que le service s'engage à faire</h2>
|
||
<div class="commitment">
|
||
<ul>
|
||
<li>✓ <strong>Ne jamais stocker vos clés privées</strong> — elles restent sur votre appareil.</li>
|
||
<li>✓ <strong>Vérifier votre identité de façon transparente</strong> — via une preuve cryptographique que vous fournissez.</li>
|
||
<li>✓ <strong>Respecter les règles du contrat</strong> — publiquement vérifiables.</li>
|
||
<li>✓ <strong>Utiliser une clé de service déclarée</strong> — jamais exposée, mais vérifiable.</li>
|
||
</ul>
|
||
</div>
|
||
|
||
<h2>Ce que vous vous engagez à faire</h2>
|
||
<div class="your-part">
|
||
<ul>
|
||
<li>✓ <strong>Protéger votre appareil</strong> — c'est votre coffre-fort numérique.</li>
|
||
<li>✓ <strong>Fournir une preuve valide</strong> — en signant avec vos clés lors de la connexion.</li>
|
||
<li>✓ <strong>Être responsable de vos clés</strong> — si vous les perdez, personne ne peut les récupérer.</li>
|
||
</ul>
|
||
</div>
|
||
|
||
<h2>Les parties prenantes</h2>
|
||
|
||
<h3>Le service (Website Skeleton)</h3>
|
||
<p>
|
||
C'est le site que vous utilisez. Il possède sa propre identité (un « validateur ») qui permet
|
||
de vérifier que les connexions sont légitimes.
|
||
</p>
|
||
|
||
<h3>Vous (le membre connecté)</h3>
|
||
<p>
|
||
Vous êtes l'utilisateur qui souhaite accéder au service. Votre identité est prouvée par
|
||
la signature de votre appareil (<a href="membre.html">en savoir plus</a>).
|
||
</p>
|
||
|
||
<h2>Comment fonctionne la validation ?</h2>
|
||
<ol>
|
||
<li>Vous demandez à vous connecter.</li>
|
||
<li>Votre appareil crée une <strong>preuve</strong> (login-proof) signée avec vos clés.</li>
|
||
<li>Le service vérifie cette preuve grâce aux règles définies dans ce contrat.</li>
|
||
<li>Si la preuve est valide, vous êtes connecté. Sinon, l'accès est refusé.</li>
|
||
</ol>
|
||
<p>
|
||
Ce système est <strong>plus sûr</strong> qu'un mot de passe classique car il n'y a rien à voler côté serveur.
|
||
</p>
|
||
|
||
<h2>Pourquoi c'est plus sûr ?</h2>
|
||
<ul>
|
||
<li><strong>Pas de base de mots de passe</strong> à pirater.</li>
|
||
<li><strong>Vos clés ne transitent jamais</strong> sur le réseau.</li>
|
||
<li><strong>Chaque connexion est unique</strong> (signature à usage unique).</li>
|
||
<li><strong>Vérifiable par tous</strong> — les règles du contrat sont publiques.</li>
|
||
</ul>
|
||
|
||
<h2>Infrastructure, gouvernance et preuves</h2>
|
||
<p>
|
||
L'<strong>infrastructure</strong> (relais, stockage des messages et des signatures) est <strong>décentralisée et neutre</strong> :
|
||
elle ne dépend pas d'un acteur unique.
|
||
</p>
|
||
<p>
|
||
Les <strong>membres</strong> ont une <strong>liberté de gouvernance</strong>. Certains peuvent choisir une organisation
|
||
<strong>centralisée</strong> lorsque c'est préférable (équipe, processus, conformité). D'autres restent décentralisés.
|
||
</p>
|
||
<p>
|
||
L'important est d'avoir les <strong>preuves de la bonne exécution du contrat entre les parties</strong> :
|
||
signatures, nonces, règles publiques. Ces preuves restent vérifiables quelle que soit l'organisation
|
||
(décentralisée ou centralisée) des membres.
|
||
</p>
|
||
|
||
<details>
|
||
<summary>Détails techniques du contrat</summary>
|
||
<h3>Identifiants</h3>
|
||
<ul>
|
||
<li>Contrat UUID : <span class="meta">f9b9b336-4282-4c1c-b70b-e5197aeae3fa</span></li>
|
||
<li>Service UUID : <span class="meta">32b9095a-562d-4239-ae45-2d7ffb1a40de</span></li>
|
||
<li>Action login UUID : <span class="meta">0ac7de59-9e81-4bdc-bd19-c07750fad48e</span></li>
|
||
<li>Validateur (membre) : <span class="meta">0e865301-362f-4951-bfbc-531b7bddf820</span></li>
|
||
</ul>
|
||
<h3>Rôles par défaut (types de Champ)</h3>
|
||
<p class="roles-intro">
|
||
Les <strong>11 rôles</strong> ci‑dessous existent par défaut. Chacun peut être <strong>vide</strong> (aucun membre)
|
||
ou <strong>plein</strong> (membres et pairs définis). Tous sont <strong>connus des participants</strong> ;
|
||
les conditions d'usage et de validation s'appliquent dès qu'un rôle est rempli.
|
||
</p>
|
||
|
||
<div class="role-block">
|
||
<h4>1. Partage avec les institutions</h4>
|
||
<p class="usage"><strong>Usage :</strong> Partager des données avec des institutions.</p>
|
||
<p class="validation"><strong>Validation :</strong> Conformité aux validateurs du champ ; signatures requises selon <code>membres_du_role</code>.</p>
|
||
</div>
|
||
<div class="role-block">
|
||
<h4>2. Messages au RSSI</h4>
|
||
<p class="usage"><strong>Usage :</strong> Messages au RSSI de la société responsable du service.</p>
|
||
<p class="validation"><strong>Validation :</strong> Signatures des membres du rôle conformes aux <code>signatures_obligatoires</code>.</p>
|
||
</div>
|
||
<div class="role-block">
|
||
<h4>3. Messages au Correspondant CNIL</h4>
|
||
<p class="usage"><strong>Usage :</strong> Messages au Correspondant CNIL de la société responsable du service.</p>
|
||
<p class="validation"><strong>Validation :</strong> Signatures des membres du rôle ; attributs CNIL requis si applicables.</p>
|
||
</div>
|
||
<div class="role-block">
|
||
<h4>4. Messages au Responsable cybersécurité</h4>
|
||
<p class="usage"><strong>Usage :</strong> Messages au Responsable cybersécurité de la société responsable du service.</p>
|
||
<p class="validation"><strong>Validation :</strong> Signatures conformes aux validateurs du champ.</p>
|
||
</div>
|
||
<div class="role-block">
|
||
<h4>5. Messages de support infogérant</h4>
|
||
<p class="usage"><strong>Usage :</strong> Support infogérant du service (peut inclure un membre du miner pour la gestion des clés API).</p>
|
||
<p class="validation"><strong>Validation :</strong> Signatures des membres du rôle ; <code>membre_miner_uuid</code> optionnel dans <code>datajson</code> si applicable.</p>
|
||
</div>
|
||
<div class="role-block">
|
||
<h4>6. Messages de support administrateur système</h4>
|
||
<p class="usage"><strong>Usage :</strong> Support administrateur système du service.</p>
|
||
<p class="validation"><strong>Validation :</strong> Signatures conformes aux validateurs du champ.</p>
|
||
</div>
|
||
<div class="role-block">
|
||
<h4>7. Messages de support niveau 1</h4>
|
||
<p class="usage"><strong>Usage :</strong> Support niveau 1 du service.</p>
|
||
<p class="validation"><strong>Validation :</strong> Signatures conformes aux validateurs du champ.</p>
|
||
</div>
|
||
<div class="role-block">
|
||
<h4>8. Messages de support niveau 2</h4>
|
||
<p class="usage"><strong>Usage :</strong> Support niveau 2 du service.</p>
|
||
<p class="validation"><strong>Validation :</strong> Signatures conformes aux validateurs du champ.</p>
|
||
</div>
|
||
<div class="role-block">
|
||
<h4>9. Messages de support niveau 3</h4>
|
||
<p class="usage"><strong>Usage :</strong> Support niveau 3 du service.</p>
|
||
<p class="validation"><strong>Validation :</strong> Signatures conformes aux validateurs du champ.</p>
|
||
</div>
|
||
<div class="role-block">
|
||
<h4>10. Validation (contrat)</h4>
|
||
<p class="usage"><strong>Usage :</strong> Valider le contrat ; définir qui peut signer pour le contrat (<code>contrat.validateurs.membres_du_role</code>).</p>
|
||
<p class="validation"><strong>Validation :</strong> Au moins une signature valide par membre du rôle ; clés publiques autorisées dans <code>signatures_obligatoires</code>.</p>
|
||
</div>
|
||
<div class="role-block">
|
||
<h4>11. Validation du login</h4>
|
||
<p class="usage"><strong>Usage :</strong> Valider le login ; définir qui peut signer pour l'action login (<code>action.validateurs_action.membres_du_role</code>).</p>
|
||
<p class="validation"><strong>Validation :</strong> Preuve de login (hash, nonce) signée par les pairs des membres du rôle ; nonce unique ; clés autorisées.</p>
|
||
</div>
|
||
|
||
<h3>Membres par rôles (ce contrat)</h3>
|
||
<p>Ce contrat skeleton remplit uniquement les rôles <strong>Validation (contrat)</strong> et <strong>Validation du login</strong>. Les autres rôles sont vides mais connus.</p>
|
||
|
||
<h4>Validation (contrat)</h4>
|
||
<ul class="member-list">
|
||
<li>
|
||
<strong>Membre</strong> : <span class="meta">0e865301-362f-4951-bfbc-531b7bddf820</span>
|
||
<br><em>Signatures obligatoires : 1</em>
|
||
<ul class="pair-list">
|
||
<li>
|
||
<strong>Pair 1</strong> : <span class="meta">f2779304-0d9b-4139-9aee-8d3347819d98</span>
|
||
<br>Clé publique : <span class="meta">0244f299538f4a091d93561dcee0c77de3e0d8bb917c9378405653c57f7800f174</span>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
|
||
<h4>Validation du login</h4>
|
||
<ul class="member-list">
|
||
<li>
|
||
<strong>Membre</strong> : <span class="meta">0e865301-362f-4951-bfbc-531b7bddf820</span>
|
||
<br><em>Signatures obligatoires : 1</em>
|
||
<ul class="pair-list">
|
||
<li>
|
||
<strong>Pair 1</strong> : <span class="meta">f2779304-0d9b-4139-9aee-8d3347819d98</span>
|
||
<br>Clé publique : <span class="meta">0244f299538f4a091d93561dcee0c77de3e0d8bb917c9378405653c57f7800f174</span>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</details>
|
||
|
||
<p><a href="index.html">← Retour à l'accueil</a> · <a href="membre.html">Qui êtes-vous ?</a> · <a href="technique.html">Réseau P2P</a> · <a href="cryptographie.html">Cryptographie</a></p>
|
||
</body>
|
||
</html>
|