L’informatique en nuage (mouais), l’infonuagique (beurk), bref le cloud computing a le vent en poupe tout le monde le sait, on en entend parler partout. Un des premiers usages grand public qui en a été fait a été de permettre un stockage sécurisé (car déporté) de ses données personnelles et même de les synchroniser entre différents appareils.
Ce constat étant posé, certaines personnes n’oublient pas de rappeler que le cloud computing veut surtout dire que vos données sont sur les systèmes de quelqu’un d’autre à qui vous déléguez leur sécurité. Que ce soit via des failles de sécurité ou du social engineering, cette sécurité n’est jamais garantie (comme bien souvent dans l’informatique, soyons clair, et ces sociétés sont plutôt douées sur le sujet, mais il y aura toujours des failles). Je ne parle même pas des « interceptions légales » ou autres commissions rogatoires obligeants ces opérateurs à donner accès aux fichiers des utilisateurs – sans même avoir le droit de notifier ces derniers que ça a été le cas.
Le mieux reste encore que les fichiers restent sur des équipements que vous possédez. Il serait fâcheux que le FBI ait accès aux photos de Mamie à la plage l’année dernière ou à votre mot de passe Youporn. Bien sûr, dans ce cas d’usage, la responsabilité de la qualité du stockage et de la redondance vous revient. Ne faites pas n’importe quoi. Le backup correct, c’est compliqué.
Ce (long) préambule terminé, quelle solution apporter à l’utilisateur soucieux de garder le contrôle de ses données si chères à son cœur tout en ne compromettant pas leur sécurité ? Une des solutions semble être SyncThing.
SyncThing est un logiciel de synchronisation point-à-point (peer-to-peer) libre, gratuit, écrit en Go et disponible sous tous les systèmes possibles et imaginables : Windows, Linux, MacOS, iOS, Android, Solaris, BSD et même Darwin. Il y a des versions x86, x86_64 bien sûr, et même ARM (votre Raspberry sera content de l’apprendre). Cela permet de synchroniser des fichiers entre différents systèmes sur un réseau local ou à travers Internet. L’intégrité et la sécurité des données ont été prises en compte dès le début de la conception du logiciel.
Lorsque vous installez SyncThing, un identifiant (Id) est attribué à l’équipement (device – c’est ainsi que SyncThing désigne les appareils sur lequel il tourne). Il suffit de rajouter ce système sur un autre poste SyncThing (votre mobile par exemple ou le PC de votre Maman qui voudrait vraiment avoir les photos des vacances à l’île d’Oléron) par le biais de son Id. Le premier ordinateur va recevoir une notification de demande de partage. Acceptez là, choisissez quel(s) répertoire(s) vous voulez utiliser, et la synchronisation commence.
L’identifiant est extrêmement important car il sert à la fois à authentifier, autoriser et trouver (voir plus bas au sujet des serveurs d’annonce) un équipement. Lors du premier démarrage du logiciel, une paire de clefs publiques/privées est générée (c’est du 3072 bit, c’est-à-dire super fort comme niveau de chiffrement). Notez que vous pouvez utiliser vos propres clefs publiques et privées.
L’identifiant de l’équipement est simplement un hash (SHA-256) puis un encodage Base32 des données contenues dans le certificat (la clef publique). Les détails se trouvent ici.
(Pour les nerds qui liraient cet article, je souhaiterais rajouter que cette application tourne parfaitement en user space sous Linux, pas besoin de l’installer ailleurs que dans la home de votre utilisateur ou de lui donner des droits particuliers. Il suffit d’ouvrir le port 22000/TCP sur le pare-feu.)
Comment les fichiers sont échangés ? Si les deux systèmes ne sont pas sur le même réseau, alors ils vont s’échanger les données par le biais d’un serveur de relai (relay server) disponible sur Internet. Par défaut SyncThing utilise des serveurs fournis par une communauté et leur usage est gratuit. Notez que ces serveurs ne voient pas le nom des fichiers où leur contenu car les échanges se font via des requêtes sécurisées par TLS et chiffrées en AES-256 et Courbes Elliptiques (ce qui empêche tout déchiffrement futur même si les clefs sont compromises ultérieurement). La connexion entre les pairs et le relai est en texte clair, mais une fois que le relais a mis ces pairs en relation ils établissent le tunnel TLS entre eux et le serveur n’a pas accès aux clefs. Les détails de cette implémentation est disponible sur la documentation du protocole de relai.
Comment est-ce que les systèmes se font connaitre ? Il existe un autre type de serveur, les serveurs d’annonce (announce servers). Lorsqu’un client SyncThing est démarré, il va « s’enregistrer » sur ces serveurs en disant « voici mon Id et mon adresse IP publique ». Dans le même temps le service/daemon balance des broadcast sur son réseau local pour s’annoncer aux autres clients éventuellement dans le coin. Notez qu’il est possible de désactiver la connexion aux serveurs d’annonce pour tout garder en local.
Vous êtes paranoïaque et vous ne faites pas confiance à des serveurs tiers même si le chiffrement est a priori incassable ? Pas de problème car SyncThing vous fournit aussi les binaires des serveurs de relai et d’annonce. Libre à vous de faire votre petit réseau SyncThing rien qu’à vous.
Tant que l’on est à parler serveur, un usage évident que l’on peut faire c’est se louer un serveur dédié ou une machine virtuelle chez un hébergeur quelconque. Ça revient à faire du cloud, on est d’accord, mais au moins on a la main totale sur le système (y compris la possibilité de chiffrer les disques). Il suffit de rajouter un client SyncThing sur ce serveur pour qu’il puisse « centraliser » les données (comme les serveurs Dropbox ou OneDrive le font) tout en ayant l’avantage d’être déporté de chez vous – si votre maison brûle et vos ordis avec, vous avez toujours un backup dans un centre de donnée quelque part.
Notez cependant que les fournisseurs de services de sauvegarde dans le cloud ont des réseaux extrêmement bien conçus qui garantissent un haut niveau de redondance - vos données sont copiées à travers le monde entier dans différents centre de données ultra-optimisés pour le stockage - et servis par des Content Delivery Networks garantissant des temps de réponse faibles et des vitesses de téléchargement élevées. Bien qu’il soit tout à fait possible pour n’importe qui un peu technique de reproduire ce genre de qualité de stockage (votre machine virtuelle peut tout à fait monter un lecteur sur un stockage type Amazon S3 ou Azure Blob Storage), cela prend bien entendu beaucoup plus de temps (et revient probablement plus cher) que les solutions “clefs en main” que proposent ces fournisseurs. Mais ça peut être un beau projet.
Rajoutons, et ça c’est un paragraphe spécial pour Cafeine, que SyncThing ne gère “que” la synchronisation des fichiers (de façon poussée - ça gère le versionning et les corbeilles de chaque OS par exemple) mais il n’y a pas d’interface web pour accéder à ses données comme le propose un Dropbox, un OneDrive ou un Box.com (encore ceux-là). Si vous souhaitez en faire cet usage, ou encore partager un fichier d’un clic droit en le mettant dans votre répertoire “Public”, ce n’est pas possible (à moins de bidouiller). De même, comme je l’expliquais ci-dessus, il vous faudrait paramétrer vous-même votre propre serveur si vous souhaitez avoir un serveur dans un centre de données.
J’espère vous avoir convaincu des différents avantages de SyncThing et que cet article vous donnera envie si ce n’est de mettre Dropbox par la fenêtre, au moins de jeter un œil à ce bien beau projet !