ec4fa433a9
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.
46 lines
1.7 KiB
Markdown
46 lines
1.7 KiB
Markdown
# 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
|
|
|
|
1. Copier `config.example.php` en `config.php`, y mettre un jeton :
|
|
```bash
|
|
php -r "echo bin2hex(random_bytes(32)), PHP_EOL;"
|
|
```
|
|
2. Créer le dossier de données **hors racine web** et y déposer l'instantané
|
|
produit par l'application Windows (`vault-sync.json`).
|
|
3. Servir `sync.php` en 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 `ETag` fort.
|
|
- **304** — si le client renvoie `If-None-Match` avec 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).
|