Alternative to WebDAV, and the base for an Android client. The server never decrypts: it stores and serves opaque bytes, so a compromise yields ciphertext plus size and mtime. GET only for now, with a strong ETag and If-None-Match; PUT answers 405 explicitly so a client fails loudly rather than believing it wrote. A bad token answers 404 like a missing snapshot, so an unauthenticated caller learns nothing. HTTPS is required - the bearer token rides a header on every call.
1.7 KiB
Endpoint de synchronisation PHP (lecture seule)
Alternative au WebDAV pour distribuer l'instantané chiffré du coffre. Le serveur ne déchiffre rien : il sert des octets opaques.
Installation
- Copier
config.example.phpenconfig.php, y mettre un jeton :php -r "echo bin2hex(random_bytes(32)), PHP_EOL;" - Créer le dossier de données hors racine web et y déposer l'instantané
produit par l'application Windows (
vault-sync.json). - Servir
sync.phpen HTTPS. Sans TLS, l'endpoint refuse la requête : le jeton circule dans un en-tête à chaque appel.
Utilisation
GET /sync.php
Authorization: Bearer <jeton>
- 200 — le conteneur chiffré, avec un
ETagfort. - 304 — si le client renvoie
If-None-Matchavec l'ETag qu'il détient. - 404 — pas encore d'instantané, ou jeton invalide. Les deux répondent pareil : un appelant non authentifié n'apprend pas si quelque chose existe ici.
- 405 — toute autre méthode. L'écriture viendra avec le client bidirectionnel.
Ce que le serveur voit
Le conteneur est chiffré côté client (PBKDF2-SHA256 600 k + AES-GCM) avec le mot de passe de sync, qui n'est jamais transmis. Un serveur compromis livre donc du chiffré, plus ces métadonnées : la taille du fichier, sa date de modification, et la fréquence des synchronisations.
Le jeton authentifie l'appareil, pas le coffre. Le voler donne accès au chiffré, pas au contenu.
Étape suivante
L'écriture demandera PUT avec If-Match: <etag> — c'est ce qui empêche deux
appareils de s'écraser mutuellement. Le client Windows sait déjà le faire : il
capture l'ETag à la lecture et rejoue le cycle complet sur un 412
(runSyncNow, borné à 3 tentatives).