Comment j'expliquerais Solid à un libriste

Table des matières

1 Le problème

Solid, c'est un ensemble un peu déroutant de technologies web. Il y a beaucoup de promesses sur le site d'inrupt https://solid.inrupt.com/how-it-works, et on a vraiment l'impression que cela va faciliter la collecte de données personnelles par des entreprises tout en les protégeant pour les utilisateurs. Comme le projet doit bien se vendre auprès des entreprises, des utilisateurs qui cherchent à faire respecter leur vie privée, des autres utilisateurs qui n'en ont rien à faire, et des gouvernements (https://contractfortheweb.org/fr/), il est assez difficile d'y voir clair.

Dans ce petit billet, je vais essayer de vous montrer comment on pourrait implémenter une application libre et décentralisée, et quelles sont les différences avec le web actuel. Je vais prendre l'exemple de Mastodon, une application de réseau social libre, et montrer comment cela serait implémenté sur solid.

2 Le data pod

Le data pod est un serveur qui stocke les données des utilisateurs. C'est un serveur générique : il peut stocker tout et n'importe quoi.

Sally, par exemple, crée une note dans le vocabulaire ActivityStreams. Je reprends l'exemple 15 de la spécification : https://www.w3.org/TR/activitystreams-vocabulary/#dfn-create.

{
    "@context": "https://www.w3.org/ns/activitystreams",
    "@id": "#mynote",
    "summary": "Sally created a note",
    "type": "Create",
    "actor": {
        "type": "Person",
        "name": "Sally"
    },
    "object": {
        "type": "Note",
        "name": "A Simple Note",
        "content": "This is a simple note"
    }
}

On l'enregistre dans un fichier json-ld, et on le dépose sur https://pod.example.com/pouet/pouet.json.

La façon dont on met en ligne ce document, la façon dont on scanne les répertoires et les fichiers, et la façon dont on récupère les documents sont décrites dans la norme Linked Data Platform. Il y a un "primer" en ligne : https://www.w3.org/TR/ldp-primer/. Le matraquage de termes du premier chapitre peut être résumé de la façon suivante :

  • il y a des fichiers (soit des ressources sémantiques, soit des documents : il y a des subtilités dans les différences pour certains traitements) ;
  • il y a des dossiers. Les dossiers sont typés : par exemple, le dossier "pouet" du pod peut être typé comme un dossier de pouets. Si on se connecte à ce pod, on sait donc qu'il y a des pouets dans ce dossier.

Le Linked Data Platform permet de lister les dossiers, télécharger un fichier, mettre à jour un fichier, créer, ou supprimer des dossiers et des fichiers.

3 Des données privées dans le data pod

Jusqu'à présent, tout ce que fait Sally est public. N'importe qui peut venir rajouter des pouets ou en supprimer. Pour laisser plus de contrôle à Sally, on introduit le Web Access Control. La définition de cette technologie est partagée entre Solid (https://github.com/solid/web-access-control-spec) et un wiki du W3C (https://www.w3.org/wiki/WebAccessControl). Il s'agit de rattacher une ressource sémantique à chaque dossier et chaque fichier, pour savoir qui a le droit de le lire, de le modifier, ou d'en connaître ou changer les permissions. Pour vérifier l'identité du client, on lui demande de signer un jeton d'accès avec un certificat dont il affirme être le possesseur, selon le protocole WebID (https://dvcs.w3.org/hg/WebID/raw-file/tip/spec/identity-respec.html).

Ainsi, Sally peut indiquer que pouet.json ne contient que des pouets destinés à Alice. Donc, si Alice se connecte au pod de Sally et récupère tous ses pouets, elle pourra lire pouet.json, alors que Google non.

4 Une application ?

Quand je dis qu'Alice va se connecter sur le pod de Sally, il peut s'agir d'un simple lien hypertexte qui pointe vers un document confidentiel, et que l'on peut visionner dans un navigateur web. Mais bien sûr, les ressources intéressantes sont sémantiques, et Alice n'a pas forcément envie de lire du json-ld 1. Alice a donc développé une application, my-timeline, qui se connecte aux pods de sa toile de confiance pour requêter tous les pouets. Pour que les pods de ses ami.e.s la reconnaisse, l'application my-timeline a généré un certificat et en a publié la clé publique sur le profil d'Alice. Pour rester à jour, elle écoute les notifications avec https://www.w3.org/TR/ldn/ 2.

5 Mais d'où vient la confusion ?

Malheureusement, le W3C préfèrerait qu'Alice développe une application web, utilisant Angular https://solid.inrupt.com/docs/writing-solid-apps-with-angular. On peut comprendre pourquoi : la partie d'authentification est un peu complexe à mettre en place. Elle mettrait son application sur my-timeline.com, mais dans ce cas elle maîtriserait le code JavaScript de l'application et pourrait exfiltrer les pouets privés de Sally ! Donc, Sally n'acceptera de communiquer ses pouets à Alice que si Sally fait confiance à Alice, et à my-timeline.com.

Cependant, Sally peut en tirer profit elle aussi ! my-timeline.com implémente un système de recommandation d'après les contenus des pouets, mais que le site promet de ne pas stocker les pouets et de les dé-anonymiser (il faut qu'il y ait une régulation très stricte de l'industrie ; pour l'instant on se contentera de dire que comme Alice développe my-timeline.com, Sally le croît). Ainsi, Sally peut stocker au moins deux types de pouets :

  • des pouets destinés uniquement à Sally ;
  • des pouets destinés uniquement à my-timeline.com.

Si Sally n'est pas satisfaite du système de recommandation de my-timeline.com, elle peut tout arrêter et partager ses données avec un service différent.

6 Conclusion : qu'est-ce que ça change par rapport au web actuel ?

Il faut séparer deux types de web. On va les appeler le web "Gentil" et le web "Méchant".

Le web "Gentil", c'est celui de Framasoft. Les données sont stockées là où elles sont utilisées, elles sont protégées et personne n'en fait n'importe quoi.

Le web Gentil change en plusieurs points :

  • le service n'a pas à stocker de données personnelles. C'est beaucoup plus facile à mettre en place, et beaucoup plus facile à maintenir, puisqu'il n'y a plus de base de données ;
  • la portabilité des données n'est plus une question qui se pose : on peut fermer Framagit du jour au lendemain sans perdre les merge request, les issues et tout ça 😜 ;
  • beaucoup de sites web peuvent être implémentés directement par une application libre qui se connecte aux pods des ami.e.s, même si le w3c n'aime pas ça.

Le web "Méchant", c'est celui de Facebook. Les données partagées doivent être semi-publiques, et bon courage pour les récupérer ou les partager avec my-timeline.com.

Le web Méchant change aussi :

  • le consentement pour le traitement des données a une définition plus précise : Sally demande explicitement à son pod de communiquer certaines données à facebook.com ;
  • la portabilité des données ne nécessite plus la coopération du service : Sally peut à tout moment décider de partager ces données avec my-timeline.com, que Facebook soit d'accord ou pas. On imagine le désastre financier pour Facebook si les utilisateurs acceptaient de partager directement leurs données personnelles sans qu'il puisse imposer son droit de péage…

Bien sûr, le web Méchant peut toujours essayer d'attaquer Sally. Voici trois idées :

  1. Exfiltrer toutes les données dès que le consentement est donné ;
  2. Chiffrer les données stockées sur le pod de Sally ;
  3. Refuser de traiter des données non signées par le site Méchant.

Pour le point 1, ce n'est pas nécessairement à l'avantage du web Méchant : si Sally modifie ses données, les données exfiltrées perdent petit à petit de la cohérence à mesure que Sally les rectifie de son côté, et ça peut bloquer des applications de raisonnement sémantique.

Pour le reste, on peut inspecter les données dans son pod et vérifier que les données sont stockées dans un vocabulaire reconnu et ouvert (comme dans "format ouvert").

7 Discussion

Ce texte est hébergé comme projet Gitlab :

Voir le site du projet

On peut faire des Issues et des Merge requests. Sinon, on peut toujours discuter par Mastodon : @vk@mamot.fr.

Notes de bas de page:

1
il paraît que c'est lisible par les humains…
2
Je n'ai pas encore étudié cette partie.

Auteur: Vivien Kraus

Created: 2020-02-23 dim. 19:53

Validate