Documentation SendPass

Tout ce qu'il faut savoir pour déployer, utiliser et comprendre la sécurité de l'outil.

01 — Principe

Comment ça marche ?

SendPass permet de transmettre un mot de passe sans qu'il transite en clair dans un email ou un chat. Le secret et la clé de déchiffrement sont transmis par deux canaux séparés.

Chiffrement
Le mot de passe est chiffré avec la clé + un token aléatoire
Lien généré
Un lien unique et temporaire est créé
Double canal
Lien par email, clé par SMS ou appel
Consultation unique
Le lien est détruit après la première ouverture

02 — Sécurité

Mécanismes de protection

AES-256-CBC

Le mot de passe est chiffré avec une clé de 256 bits et un vecteur d'initialisation aléatoire généré à chaque usage.

PBKDF2 (100 000 tours)

La clé de chiffrement est dérivée de la clé utilisateur et du token de l'URL via PBKDF2-SHA256. Sans les deux, impossible de déchiffrer.

HMAC-SHA256

Un code d'authentification est calculé sur le chiffré. Toute altération du fichier ou mauvaise clé est détectée avant déchiffrement.

Usage unique

Dès qu'un mot de passe est consulté, son entrée est marquée comme vue. Tout rechargement de la page retourne une erreur.

Expiration automatique

Chaque lien a une durée de vie maximale (1h à 24h). Le fichier de stockage est entièrement vidé chaque nuit à minuit.

Bcrypt (coût 12)

La clé secrète est hashée en bcrypt avant stockage. Une attaque sur le fichier ne permet pas de retrouver les clés.

Règle fondamentale : n'envoyez jamais le lien et la clé secrète via le même canal. Si les deux sont interceptés ensemble, le mot de passe est compromis.

03 — Installation

Mise en place

Aucune base de données requise. SendPass fonctionne avec PHP 8.1+ et un serveur web Apache ou Nginx.

Prérequis PHP

  • Extension openssl (chiffrement AES)
  • Extension json (stockage fichier)
  • Droits d'écriture sur le dossier sendpass/data/

1. Configurer config.php

// URL publique de l'application (sans slash final) define('APP_URL', 'https://monsite.fr/sendpass'); // Chemin absolu vers le fichier de données (hors webroot recommandé) define('DATA_FILE', __DIR__ . '/data/passwords.json');

2. Structure des fichiers

sendpass/ ├── config.php ← à configurer ├── index.php ← page de création ├── view.php ← page de consultation ├── docs.php ← cette page ├── data/ ← créé automatiquement, accès web bloqué │ ├── .htaccess │ └── passwords.json ├── assets/ │ ├── style.css │ └── script.js └── includes/ └── functions.php

3. Protection Nginx

Si vous utilisez Nginx, ajoutez cette règle dans votre bloc server (le .htaccess ne fonctionne que sous Apache) :

location ^~ /sendpass/data/ { deny all; return 404; }

04 — Données & rétention

Cycle de vie des données

Les données sont stockées dans un seul fichier JSON local, sans base de données. Le nettoyage est automatique et se déclenche à chaque création de lien :

Il n'existe aucun accès administrateur ou historique des mots de passe partagés. Une fois supprimée, une entrée est irrécupérable.


05 — FAQ

Questions fréquentes

Le serveur peut-il lire les mots de passe ?

Non. Le mot de passe est chiffré avant stockage et la clé de déchiffrement n'est jamais enregistrée — seulement son hash bcrypt. Sans la clé saisie par le destinataire, le chiffré stocké ne peut pas être décodé.

Que se passe-t-il si quelqu'un intercepte le lien ?

Sans la clé secrète, le lien seul est inutile. Le chiffrement AES-256 avec dérivation PBKDF2 rend une attaque par force brute sur la clé extrêmement coûteuse.

Peut-on utiliser SendPass sur plusieurs serveurs / en load balancing ?

Pas sans adaptation. Le stockage est un fichier local ; pour un environnement multi-serveurs, il faudrait pointer DATA_FILE vers un partage réseau commun (NFS, SMB) ou réécrire la couche de stockage.

Combien de partages simultanés peut gérer l'application ?

Pour un usage interne ou une équipe, la charge est négligeable. Le verrou fichier (flock) sérialise les écritures concurrentes : pour un trafic élevé, une base de données serait plus adaptée.

Les logs du serveur web ne conservent-ils pas le token dans l'URL ?

Si, potentiellement. Pour éviter cela, configurez votre serveur pour masquer les query strings dans les logs d'accès, ou passez en POST. Le token seul (sans la clé) ne permet pas de déchiffrer, mais c'est une bonne pratique de le protéger.


Créer un partage