Inspiré par Freenet et par le revirement récent de Pastebin, /me vient de créer un POC (Proof-of-concept) d'un pastebin opensource où le serveur n'a pas connaissance de ce qu'il stock.
(attention, c'est du super-alpha, mochissime et pas complètement blindé, mais ça marche)
- Les données sont compressées (deflate) et chiffrées en AES 256 bits côté client (avec du javascript) avec une clé aléatoire.
- Le serveur ne reçoit que des données chiffrées, sans la clé.
- Le client obtient une URL pointant sur le serveur, avec la clé dans l'ancre (#...) (donc qui n'est jamais transmise au serveur).
Le serveur ne connaissant pas la clé, il ne sait absolument pas ce qu'il stock. Et les clés n'apparaîtront donc jamais non plus dans les logs du serveur web.
Exemple d'URL générée:
http://monserveur.com/zero/?x25zxh928z#G0e6ydrsJ1zsaMk5RN4j7fLupFkS9jEQJiAMz3GyQe4=
(Oui ça fait des URLs un peu longues)
x25zxh928z est l'identifiant des données
G0e6ydrsJ1zsaMk5RN4j7fLupFkS9jEQJiAMz3GyQe4= est la clé de déchiffrement.
Quand on affiche une telle page, le navigateur va récupérer les données chiffrées du serveur, et un bout de javascript déchiffre les données avec cette clé.
Pourquoi tout ça ?
Pas pour protéger le client (après tout le serveur pourrait très bien servir un javascript qui fait semblant de chiffrer les données). Non le but ici est de protéger légalement le *serveur*: Le propriétaire peut se dédouaner de la modération des documents postés puisqu'il n'en possède pas la clé et ne peut en connaître le contenu. Pour sa défense il peut dire qu'il fournit des services respectant la vie privée de ses utilisateurs (après tout, il y a déjà des services qui font du chiffrement côté client, comme Mozilla Sync).
C'est pas énorme, ça ne fait que 140 lignes, mais il faudra que j'enrobe un peu (CSS, RainTPL, limiteur de trafic ou captcha, limiteur de stockage...). Je publierai sans doute les sources un de ces jours.
EDIT: Page sur le wiki:
http://sebsauvage.net/wiki/doku.php?id=php:zerobin
EDIT: Le système est live:
http://sebsauvage.net/links/index.php?DRS3Lw