Transfert optique Decimen : Envoyer des fichiers par la lumière avec des codes QR à codage fontaine

Découvrez Decimen Optical Transfer, un outil open source qui diffuse des fichiers entre appareils à l'aide de codes QR animés et du codage fontaine, atteignant jusqu'à 130 Ko/s sans connexion réseau.

Dans un monde où le transfert de fichiers signifie généralement téléchargement vers le cloud, appairage Bluetooth ou câbles USB, il y a quelque chose de presque magique à envoyer des données par la lumière. Decimen Optical Transfer (decimen.app) fait exactement cela : il transforme votre écran en émetteur et votre caméra en récepteur, diffusant des fichiers sous forme d'une séquence infinie de codes QR animés. Pas de réseau, pas d'appairage, pas d'installation d'application—juste deux appareils face à face.

Pourquoi le transfert optique ?

Les méthodes traditionnelles de transfert de fichiers reposent sur un chemin réseau entre les appareils. Mais que faire si vous êtes dans un lieu sécurisé, un endroit isolé, ou si vous voulez simplement éviter les tracas de la configuration d'une connexion ? Le transfert optique utilise l'interface la plus universelle qui soit : l'écran et la caméra. Chaque smartphone en possède, et ils fonctionnent sur toutes les plateformes sans pilotes ni autorisations autres que l'accès à la caméra.

L'idée clé est qu'un lien écran-caméra n'a pas de canal de retour. L'émetteur ne peut pas savoir si une image a été reçue correctement. C'est là que le codage fontaine brille.

La magie des codes fontaine

Les codes fontaine, en particulier les codes Luby Transform (LT), sont une classe de codes d'effacement qui génèrent un flux infini de symboles encodés à partir d'un fichier source. Le récepteur n'a besoin de collecter qu'un certain nombre de symboles distincts—environ 1,15 fois la taille du fichier original—pour reconstruire l'intégralité du fichier, quel que soit le nombre de symboles perdus.

Dans le contexte du transfert optique, cela signifie que l'émetteur peut diffuser des images en continu, et le récepteur peut perdre des images (à cause du flou de mouvement, de l'éblouissement ou du désalignement de la caméra) sans aucun impact sur l'exactitude. Les images perdues coûtent du temps, jamais de l'exactitude. C'est une amélioration massive par rapport au découpage séquentiel, où une seule image perdue nécessiterait un mécanisme de retransmission—impossible sans canal de retour.

Comment fonctionne Decimen

Le projet est construit avec TypeScript et utilise node-qrcode pour l'encodage et zxing-wasm pour le décodage. L'architecture est divisée en répertoires send/ et receive/, avec un module partagé pour les utilitaires communs.

Lorsque vous ouvrez l'application sur deux appareils, l'un va sur la page /send/ et l'autre sur /receive/. L'émetteur sélectionne un fichier (jusqu'à 64 Mo) ou colle un extrait de texte. Le fichier est ensuite compressé avec gzip si cela aide, et divisé en morceaux. Chaque morceau est encodé dans un code QR, et le flux de codes QR est animé à l'écran.

La caméra du récepteur scanne en continu l'écran, décodant chaque code QR au fur et à mesure qu'il apparaît. Les morceaux décodés sont stockés, et une fois qu'assez de morceaux distincts sont collectés, le fichier est réassemblé. Un hachage SHA-256 vérifie l'intégrité avant que le fichier ne soit proposé au téléchargement.

Performances et résultats réels

Le projet rapporte un débit utile de 130,5 Ko/s lors d'un test réel (voir la capture d'écran dans le dépôt). C'est impressionnant pour un canal visuel. L'expérience originale dont cela a été extrait a atteint 128 Ko/s de téléphone à téléphone. Le protocole est conçu pour être efficace, et l'utilisation de codes fontaine garantit que même avec un taux de perte d'images élevé, le transfert se termine dès que suffisamment d'images sont reçues.

Pour commencer

Pour l'exécuter vous-même, clonez le dépôt et installez les dépendances :

npm install
npm run dev # serveur de développement https avec HMR

Ensuite, ouvrez https://localhost:5173/send/ sur l'appareil émetteur et l'URL réseau sur le téléphone récepteur (acceptez le certificat auto-signé une fois). Pour la production, utilisez npm run build et servez le dossier dist/.

Il existe également un mode démo (npm run demo) qui ne permet que d'envoyer des charges utiles groupées, utile pour tester sans fichier réel.

Particularités de plateforme et support hors ligne

L'application est une PWA, elle fonctionne donc hors ligne après la première visite et peut être installée sur les écrans d'accueil iOS et Android. La version v0.3.0 a ajouté la détection des capacités Android, la lecture multimédia en ligne et les boîtes de dialogue de partage. Le projet comprend également une version autonome qui produit deux pages autonomes, qui peuvent être hébergées n'importe où ou même ouvertes directement depuis un système de fichiers.

Considérations sur la confidentialité

Il est important de noter que le transfert optique n'est pas chiffré. Tout ce qui est sur l'écran de l'émetteur est lisible par toute caméra pointée dessus. La propriété que vous obtenez est l'absence de réseau, pas la confidentialité. Si vous avez besoin de confidentialité, vous devez chiffrer le fichier avant de l'envoyer.

Projets similaires

Le concept de transfert de données optique a été exploré par d'autres. Le README mentionne :

  • mohankumarelec/airgapped-qr-code-transfer : transfert de fichiers QR basé sur navigateur avec compression et découpage séquentiel.
  • divan/txqr (2018) : QR animé plus codes fontaine en Go, avec d'excellents articles expliquant pourquoi le codage fontaine est supérieur au bouclage séquentiel.
  • sz3/libcimbar : va au-delà du QR avec un code couleur haute densité personnalisé spécialement conçu pour ce canal.

Ces projets montrent que l'idée n'est pas unique, mais l'implémentation de Decimen est soignée, bien documentée et open source sous licence MIT.

Conclusion

Decimen Optical Transfer est un exemple fascinant d'utilisation de matériel courant à des fins non conventionnelles. Il ne remplacera pas le Wi-Fi pour les gros transferts, mais pour des transferts rapides et sécurisés au sens de l'air gap, c'est un outil pratique. L'utilisation de codes fontaine est une solution intelligente au problème de l'absence de canal de retour, et le projet est une excellente ressource d'apprentissage pour toute personne intéressée par la communication optique ou le codage d'effacement.

Que vous soyez dans un environnement hautement sécurisé ou que vous souhaitiez simplement impressionner vos amis en envoyant un fichier par les airs, Decimen vaut la peine d'être essayé. Et comme il est open source, vous pouvez plonger dans le code et voir exactement comment il fonctionne.

Source

bashalarmistalt/decimen-optical-transfer