Latchwire
Français

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

  1. 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.

  2. 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.

  3. 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

QuestionWireGuard classiqueLatchwire
Où est la clé privée ?Dans un fichier sur votre ordinateurDans la YubiKey
Peut-elle être copiée ?Oui, sans laisser de traceNon. La clé ne peut pas être retirée de la carte
Portable volé sans la carte ?Remplacer la clé sur chaque serveurRien 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 tardIl peut utiliser le tunnel tant que la carte est branchée, mais ne peut pas emporter la clé
SauvegardeUne copie du fichierUne seconde YubiKey, ajoutée au serveur comme second pair
Côté serveurWireGuard standardLe même : WireGuard standard
MaturitéÉtabli, avec des clients officielsPré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

v1

PIV 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ôt

Prévues juste après la v1. Non implémentées.

PKCS#11 et HSM

Bientôt

Prévus juste après la v1, pour les appareils avec X25519. Non implémentés.

TPM, Secure Enclave, FIDO2

Feuille de route

Classe 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é.

  • 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.

    Testé
  • 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.

    Non vérifié
  • 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 prêt
  • 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.

    Pas encore

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

  1. CœurImplémenté

    Client en ligne de commande pour macOS et Linux

  2. 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

  3. Vérifications sur du vrai matérielÀ faire

    Vraies YubiKey et réseau macOS, avec la liste publique

  4. WindowsEn cours

    Service, couche réseau et kill switch

  5. Application de bureau et traductionsEn cours

    Application de bureau pour macOS, Windows et Linux

  6. Versions signéesPrévu

    Homebrew, téléchargement direct, .deb, .rpm, Microsoft Store