counted

Vérifier Counted

Le chiffrement de bout en bout n'a de valeur que si le code qui tourne dans votre navigateur est bien celui que nous disons servir. Cette page est là pour que vous n'ayez pas à nous croire sur parole.

Ce qui est publié

Chaque version de Counted est construite une seule fois, dans un environnement figé, et le résultat est empreint : le serveur, le module WebAssembly, son code JavaScript et chaque fichier de l'application, en SHA-256. La liste est servie par la version qui tourne :

https://counted.fr/SHA256SUMS.txt

Chaque ligne donne l'empreinte d'un fichier et son chemin sur counted.fr : assets/web_bg-….wasm, assets/web-….js, les polices et les feuilles de style. La même liste figure dans les notes de chaque version, hors du serveur qui la sert.

Vérifier ce que vous recevez

Depuis un terminal, téléchargez la liste et chaque fichier qu'elle nomme, puis comparez :

curl -sO https://counted.fr/SHA256SUMS.txt
for f in $(awk '$2 != "server" {print $2}' SHA256SUMS.txt); do
  curl -s --create-dirs -o "$f" "https://counted.fr/$f"
done
sha256sum -c --ignore-missing SHA256SUMS.txt

Chaque ligne doit se terminer par OK. Le fichier server est l'exécutable du serveur ; il n'est pas servi, son empreinte est là pour la comparaison avec une compilation.

Le reconstruire vous-même

La construction est reproductible : images de base et compilateur figés par empreinte, mêmes chemins, mêmes options. Le code source du client est public sur github.com/counted-labs/counted, un tag par version, sous licence AGPL-3.0. Trois commandes suffisent pour reconstruire ce que ce site sert et comparer :

git clone --branch vX.Y.Z https://github.com/counted-labs/counted.git && cd counted
docker buildx build --platform linux/amd64 -f Dockerfile.client --target sums --output type=local,dest=out .
curl -s https://counted.fr/SHA256SUMS.txt | grep -v '  server$' | diff - out/SHA256SUMS.txt

Un diff vide signifie que chaque fichier reçu par votre navigateur est, octet pour octet, ce que ces sources produisent. La ligne server est le binaire natif : son code n'est pas publié, elle est exclue de la comparaison, et il ne voit jamais vos données en clair — tout est chiffré sur votre appareil avant l'envoi. Chaque version sur GitHub porte aussi son SHA256SUMS.txt, une copie indépendante de ce serveur. Nous faisons la même reconstruction nous-mêmes, sans cache, sur une autre machine.

Ce que cela prouve

  • Le code que votre navigateur exécute est celui dont l'empreinte est publiée.
  • Deux personnes qui vérifient au même moment reçoivent le même code.
  • Une version reconstruite depuis ses sources donne les mêmes fichiers — et donc que rien n'a été ajouté entre le code et ce qui est servi.

Ce que cela ne prouve pas

  • Que le code est correct : une empreinte atteste l'identité d'un fichier, pas sa qualité.
  • Que le navigateur refusera un fichier différent : la vérification est manuelle. Lier le navigateur à l'empreinte (SRI) et signer les versions (Sigstore) sont les étapes suivantes.
  • Les applications Android et iOS, signées par les magasins ; elles ne sont pas couvertes ici.

Une empreinte qui ne correspond pas ? Écrivez-nous avec la ligne concernée et la date.