[POC] Privacy Forms

Des formulaires qui respectent la vie privée

a marqué ce sujet comme résolu.

Bonjour les agrumes !

Pour une fois, c’est avec un Proof Of Concept que je viens vous voir aujourd’hui. J’ai en effet commencé un projet, temporairement nommé « Privacy Forms », dont le but est de permettre à quelqu’un de partager un formulaire dont lui seul peut lire les réponses.

Quelque soit la confiance que l’on peut avoir pour le site hébergeant un formulaire, il est théoriquement toujours possible que le contenu des réponses soit lu par des personnes qui ne sont pas sensées pouvoir le lire. Le but de Privacy Forms est justement de corriger cette lacune.

La création du formulaire se passe comme sur n’importe quel site de formulaire ; à un gros détail près : il s’agit d’un POC, il faut donc écrire un schéma JSON, il n’y a pas d’inteface user-friendly pour l’instant. Par exemple, voici ce que donne le schéma suivant.

{
    "title": "Titre",
    "description": "Une description.",
    "fields": [
        {
            "type": "charfield",
            "name": "champ-1",
            "label": "Votre pseudo",
            "required": true,
            "default": ""
        },
        {
            "type": "textarea",
            "name": "champ-2",
            "label": "Comment avez-vous connu ce site ?",
            "required": false,
            "default": ""
        },
        {
            "type": "markdown",
            "name": "champ-3",
            "content": "This will be a markdown **text**."
        },
        {
            "type": "radiotable",
            "name": "champ-4",
            "label": "Indiquez ce que vous pensez des affirmations suivantes.",
            "required": true,
            "columns": ["D'accord", "Ni d'accord ni pas d'accord", "Pas d'accord"],
            "rows": ["La réponse est 42", "Netscape est un navigateur moderne", "Zeste de Savoir, c'est la classe (tu peux pas zeste)"]
        },
        {
            "type": "radio",
            "name": "champ-5",
            "label": "Vous êtes plutôt...",
            "required": true,
            "rows": ["Clémentine", "Âne", "Autre"]
        },
        {
            "type": "checkbox",
            "name": "champ-6",
            "label": "Ce site est un POC",
            "required": false,
            "rows": ["Oui", "Bien sur", "Évidemment"]
        }
    ]
}
Privacy Forms - POC
Privacy Forms - POC

Une fois le schéma renseigné, une étape se rajoute : l’auteur du formulaire doit renseigner une clé publique GPG. C’est là qu’est le point central du système. Quand quelqu’un remplira le formulaire et cliquera sur "Envoyer", les réponses renseignées seront sérialisées en JSON, puis le JSON résultant sera chiffré avec la clé publique de l’auteur du formulaire avant d’être envoyé. Ainsi, tout ce que le serveur stockera sera un bloc de texte chiffré et la date à laquelle il a été reçu.

Lorsque l’auteur voudra relever les réponses à un formulaire, il lui suffira de télécharger l’ensemble des blocs chiffrés, puis de les déchiffrer avec un script dédié (qui, évidemment, tournera entièrement en local) afin d’obtenir un format facilement exploitable par un logiciel de data-mining (CSV par exemple).

Que penseriez-vous d’un projet comme celui-ci ? J’y vois un intérêt potentiel pour les recherches en sciences humaines et sociales, mais serait-il vraiment utilisé en pratique (le nombre de personnes utilisant GPG est très restreint, et faire une interface claire ne nécessitant pas de connaitre GPG risque de s’avérer compliqué) ?

Bien sur, si quelqu’un veut les sources, n’hésitez pas à demander, je peux les zipper et les partager.

Merci d’avance pour vos avis ! :)

+5 -0

Coucou!

Je trouve l’idée vraiment très heureuse. La difficulté réside j’imagine dans le fait de rendre ça facile d’accès; peut-être une extension de navigateur, à terme ?

recherches en sciences humaines et sociales

Dans quel cadre? Pour les sondages?

Quelque soit la confiance que l’on peut avoir pour le site hébergeant un formulaire, il est théoriquement toujours possible que le contenu des réponses soit lu par des personnes qui ne sont pas sensées pouvoir le lire. Le but de Privacy Forms est justement de corriger cette lacune.

rezemika

Les personnes qui peuvent lire les réponses sont celles qui administrent le site, et qui peuvent en modifier le code. Il faut que le chiffrement du formulaire de réponse soit fait côté client et que le client puisse vérifier la clef publique du sondage. Je ne suis pas vraiment convaincu de l’efficacité en cas de malveillance.

Néanmoins, en considérant que le site ne prévoie pas à l’avance de faire du MITM pour intercepter les informations, ça évite que les administrateurs soient tentés de consulter les réponses après coup. Mais est-ce là le but de ce dev ?

Merci pour vos retours ! :)

Hello, est-ce que ça ne serait pas intéressant de proposer ça à des moteurs de formulaires existant déjà ?

Phigger

En effet, ce serait l’idéal, mais ça demanderait de réécrire pas mal de choses. La gestion de réponses devrait être entièrement revue, ce qui risque d’être compliqué…

recherches en sciences humaines et sociales

Dans quel cadre? Pour les sondages?

dab

Oui, c’est à ça que je pensais. En socio notamment, on peut être amenés à faire des enquêtes par questionnaires sur des sujets qui peuvent être un peu sensibles, mais ça peut surement aussi être utile dans d’autres cadres.

C’est du js/php ?

qwerty

Il y a du JS oui, mais pas de PHP. Côté serveur, c’est géré avec Python et Django. :)

Les personnes qui peuvent lire les réponses sont celles qui administrent le site, et qui peuvent en modifier le code. Il faut que le chiffrement du formulaire de réponse soit fait côté client et que le client puisse vérifier la clef publique du sondage. Je ne suis pas vraiment convaincu de l’efficacité en cas de malveillance.

C’est déjà ce qui est fait en fait. J’aurais surement dû être plus précis dans la description. Quand un client demande un formulaire, il obtient une page contenant le-dit formulaire ainsi qu’un champ caché contenant la clé publique de son auteur. Au moment où il clique sur "Envoyer", un script JS récupère toutes les valeurs entrées dans le formulaire et les sérialise en JSON. Ça donne quelque chose comme ceci : [{"nom-champ-1": "valeur-champ-1"}, {"pseudo": "rezemika"}, {"checkbox-field": [0, 2, 3]}]. Ensuite, ce JSON est chiffré avec la lib OpenPGPJS et c’est ce bloc de données chiffrées qui est envoyé au serveur.

Néanmoins, en considérant que le site ne prévoie pas à l’avance de faire du MITM pour intercepter les informations, ça évite que les administrateurs soient tentés de consulter les réponses après coup. Mais est-ce là le but de ce dev ?

Jacen

Il y a de ça. Si le script JS est libre et non-obfusqué, il devient possible de s’assurer que la seule partie corruptible n’est pas corrompue pour savoir si le site est fiable ou non, il n’y a même plus besoin de faire confiance à l’hébergeur des données.

On peut utiliser le système de zerobin : une clé dans une ancre, si on connaît pas le lien, on peut pas le lire.

qwerty

Hum, tu verrais ça comment dans le cadre des formulaires ?

+0 -0

Hum, tu verrais ça comment dans le cadre des formulaires ?

Un lien privé et un lien public ? Comme le framapic par exemple ?

qwerty

Oui je vois, mais comment cela répondrait à la problématique de la confiance envers l’hébergeur pour le stockage des réponses ?

+0 -0

C’est chiffré sur le serveur on ne peut déchiffrer qu’avec le lien, coté client

qwerty

Ah ok, donc au moment de l’envoi d’une réponse, le serveur enverrait le lien avec l’ancre permettant de lire les résultats à l’auteur du sondage ?

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte