Open source · Compatible WireGuard®
Rendez votre clé VPN impossible à copier.
Latchwire garde votre clé privée WireGuard dans une YubiKey. La clé est générée sur la carte et ne la quitte jamais. Le protocole et votre serveur ne changent pas. Pas de carte, pas de tunnel.
Préversion : ligne de commande pour macOS et Linux
Fonctionnement
Générez la clé sur votre YubiKey
Lancez keygen avec une YubiKey en firmware 5.7 ou ultérieur. La clé est créée sur la carte, dans un emplacement PIV retired (82–95), et les autres emplacements restent tels quels. Une carte en configuration d'usine reçoit d'abord un nouveau PIN et un nouveau PUK.
Ajoutez la clé publique à votre serveur
Votre serveur voit un pair WireGuard ordinaire : ni plugin ni mise à jour ne sont nécessaires. Latchwire est conçu pour les serveurs standard comme OPNsense, pfSense, Linux et MikroTik. À ce jour, il n'a été testé de bout en bout qu'avec un serveur de test dans un conteneur Linux.
Saisissez votre PIN et connectez-vous
Le PIN va à la carte et n'est pas conservé. Vous le saisissez normalement une fois ; il est redemandé après une mise en veille ou quand un autre programme réinitialise la carte. Retirez la carte et le tunnel se ferme. L'objectif est de deux secondes ; un test avec une carte simulée a pris environ une seconde.
WireGuard classique et Latchwire
| Question | WireGuard classique | Latchwire |
|---|---|---|
| Où est la clé privée ? | Dans un fichier sur votre ordinateur | Dans la YubiKey |
| Peut-elle être copiée ? | Oui, sans laisser de trace | Non. La clé ne peut pas être retirée de la carte |
| Portable volé sans la carte ? | Remplacer la clé sur chaque serveur | Rien sur le disque ne peut mener un handshake à son terme |
| Un malware sur votre ordinateur ? | Il peut voler la clé et s'en servir plus tard | Il peut utiliser le tunnel tant que la carte est branchée, mais ne peut pas emporter la clé |
| Sauvegarde | Une copie du fichier | Une seconde YubiKey, ajoutée au serveur comme second pair |
| Côté serveur | WireGuard standard | Le même : WireGuard standard |
| Maturité | Établi, avec des clients officiels | Préversion |
Matériel
Aujourd'hui, seule la première carte ci-dessous existe dans le code. Les étiquettes indiquent ce qu'est chacune.
YubiKey 5
v1PIV avec X25519, firmware 5.7 ou ultérieur. La clé est générée sur la carte et ne la quitte jamais. Les tests actuels utilisent des cartes simulées ; les vérifications sur de vraies cartes restent à faire.
Cartes OpenPGP
BientôtPrévues juste après la v1. Non implémentées.
PKCS#11 et HSM
BientôtPrévus juste après la v1, pour les appareils avec X25519. Non implémentés.
TPM, Secure Enclave, FIDO2
Feuille de routeClasse plus faible, hors v1. La clé serait chiffrée par le matériel mais exposée en mémoire pendant l'usage : ces appareils ne porteront donc jamais l'affirmation que la clé est impossible à copier.
Sécurité
L'affirmation porte sur le vol de la clé, pas sur son usage. Voici ce que cela couvre et ce que cela ne couvre pas.
Protège contre
- La copie de la clé depuis votre disque ou vos sauvegardes : aucune clé privée n'y est jamais écrite
- Un portable volé ou cloné sans la carte
- Les fichiers de configuration contenant une clé privée : Latchwire les rejette
- Les clés qui n'ont pas été générées sur la carte : Latchwire les refuse
- Le trafic qui sort hors du tunnel quand le kill switch est actif, dans les limites du modèle de menace
Ne protège pas contre
- Un malware exécuté sous votre compte pendant que la carte est branchée et le PIN saisi : il peut utiliser la carte et le tunnel. Aucun toucher n'est requis
- D'autres programmes qui accèdent à la carte après la saisie du PIN ; sur certains systèmes, cela inclut d'autres utilisateurs locaux
- Un compte root ou un noyau compromis
- Un portable volé avec la carte et le PIN
- La lecture de la mémoire du processus : des clés de session et un secret en cache s'y trouvent et peuvent atteindre le swap. Ce ne sont pas la clé privée, et ils ne peuvent pas mener un handshake à son terme sans la carte
- Les jetons contrefaits : Latchwire se fie à ce que la carte déclare et ne vérifie pas encore l'attestation
À savoir
- Le PIN n'est jamais conservé, mais il passe par la mémoire pendant la saisie.
- Le PIN par défaut n'est jamais essayé.
- Une clé pré-partagée, si vous en utilisez une, reste sur le disque et n'est pas protégée par le matériel.
- Le modèle de menace indique le code derrière chaque protection. Si les deux divergent, le code a raison et le document contient une erreur.
État du projet
Latchwire est un logiciel en préversion. Voici ce qui existe aujourd'hui et ce qui a été vérifié.
- Testé
Ligne de commande et réseau sous Linux
Testé de bout en bout dans un conteneur privilégié, avec une clé logicielle et un serveur de test.
- Non vérifié
Ligne de commande et réseau sous macOS
Implémenté. Les vérifications manuelles restent à faire.
- Non vérifié
Comportement avec une vraie YubiKey
Les tests automatiques utilisent des cartes simulées. Les vérifications sur de vraies cartes restent à faire.
- Pas prêt
Windows
Non implémenté. La compilation pour Windows échoue encore.
- Pas prêt
Application de bureau
En développement. Aujourd'hui, il n'y a que la ligne de commande.
- Pas encore
Versions signées et paquets
Il n'y a aucune version publiée. Vous compilez depuis les sources.
- Pas encore
Audit de sécurité indépendant
Il n'y a eu aucun audit indépendant.
Installation
Compilez depuis les sources. Il n'existe encore ni paquets ni binaires signés, et cette installation sert aux tests.
Il vous faut Go 1.25 ou ultérieur et une YubiKey 5 en firmware 5.7 ou ultérieur. Sous Linux, il faut aussi un compilateur C et libpcsclite-dev pour compiler, ainsi qu'un pcscd en service.
Compiler
git clone https://github.com/Kodviva/latchwire
cd latchwire
go build -o latchwire ./cmd/latchwire
sudo install -o root -m 0755 latchwire /usr/local/bin/latchwire
Lancez le daemon et l'agent, chacun dans son terminal
sudo latchwire daemon
latchwire agent
Créez une clé et connectez-vous
latchwire devices
latchwire keygen --serial <serial> --address <tunnel-ip>
sudo latchwire add office office.conf
latchwire up office
keygen affiche un bloc [Peer] pour votre serveur. Votre fichier de tunnel est un fichier WireGuard normal avec KeyRef et PublicKey à la place de PrivateKey.
Des paquets Homebrew, .deb, .rpm et Microsoft Store sont prévus. Aucun n'existe encore.
Feuille de route
CœurImplémenté
Client en ligne de commande pour macOS et Linux
Fonctions réseau complètesImplémenté
Tunnel complet, DNS, kill switch, connexion à la demande et utilisateurs autorisés. Testé sous Linux ; macOS reste à vérifier
Vérifications sur du vrai matérielÀ faire
Vraies YubiKey et réseau macOS, avec la liste publique
WindowsEn cours
Service, couche réseau et kill switch
Application de bureau et traductionsEn cours
Application de bureau pour macOS, Windows et Linux
Versions signéesPrévu
Homebrew, téléchargement direct, .deb, .rpm, Microsoft Store