Le projet Tor est en train de passer à Rust
(itsfoss.com)- Le code cœur du réseau Tor est en cours de migration du langage C vers Arti, basé sur Rust
- Le code C existant présente des vulnérabilités telles que des buffer overflows, des use-after-free et des corruptions mémoire
- La nouvelle version Arti 1.8.0 élimine les schémas prévisibles grâce à une refonte des délais d’expiration des circuits, ce qui réduit les risques de traçage
- Une nouvelle commande a été ajoutée pour permettre aux opérateurs de services onion de migrer automatiquement leurs clés de Tor basé sur C vers Arti
- Cette transition constitue une avancée technique majeure du projet Tor pour améliorer la sécurité et la stabilité
Principaux changements d’Arti 1.8.0
-
Le point central de cette version est l’application d’une refonte des délais d’expiration des circuits (circuit timeout rework)
- Dans Tor jusqu’ici, le Circuit Dirty Timeout (CDT) contrôlait le moment de fermeture des circuits via un minuteur unique
- Cette approche était prévisible, ce qui permettait aux observateurs du trafic d’identifier des schémas
- Arti 1.8.0 introduit des délais d’expiration fondés sur l’usage et des minuteurs individuels, de sorte que les circuits se ferment à des moments aléatoires lorsqu’ils acceptent de nouvelles connexions ou restent inactifs
- Cela réduit le risque de fingerprinting
-
Ajout d’une nouvelle commande expérimentale
arti hsc ctor-migrate- Les opérateurs de services onion peuvent migrer des restricted discovery keys depuis Tor basé sur C vers le keystore d’Arti
- Ces clés sont utilisées pour l’authentification des clients, et la nouvelle commande permet une migration automatique sans intervention manuelle
-
Autres améliorations
- De nombreux composants internes ont été améliorés, notamment l’architecture de routage, l’implémentation du protocole, la prise en charge du cache d’annuaire et la configuration de l’écouteur de port OR
- Le détail des changements est disponible dans le journal des modifications officiel d’Arti 1.8.0
Contexte de la transition vers Rust
- Le réseau Tor fonctionne sur une base en langage C depuis le début des années 2000
- Mais cette base de code en C a subi des vulnérabilités récurrentes à cause de problèmes de sûreté mémoire
- Le projet Tor mène donc Arti, un projet de réécriture exploitant la sûreté mémoire de Rust
- Arti réimplémente les fonctionnalités de Tor en Rust avec pour objectif de renforcer la sécurité, la stabilité et la maintenabilité
Portée technique
- La transition vers Rust vise à renforcer en profondeur l’architecture garantissant l’anonymat de Tor
- La suppression des comportements de circuit prévisibles et l’automatisation de la gestion des clés contribuent à améliorer le niveau de protection de la vie privée des utilisateurs
- Les mises à jour continues d’Arti sont perçues comme un signal d’accélération du remplacement progressif de Tor basé sur C
2 commentaires
Sortie d’Arti 1.0.0 - une implémentation de Tor écrite en Rust
Réactions sur Hacker News
J’ai récemment essayé le test Cover Your Tracks de l’EFF et il en est ressorti que seul le navigateur Tor avec JS désactivé résistait complètement au fingerprinting.
Même Tor avec JS activé n’était évalué que comme « partiellement » résistant, et Firefox ne donnait aucun résultat même avec JS désactivé. C’est assez inquiétant, donc je serais curieux de voir les expériences d’autres personnes.
binning).À l’inverse, les outils qui ne testent que la persistance, comme fingerprinting.com/demo, posent aussi problème.
Le vrai signal d’alerte, c’est d’échouer aux deux tests.
Cela dit, même si le navigateur Tor est clairement visible, ce seul test ne permet pas vraiment de conclure qu’il est facile de distinguer les empreintes entre utilisateurs de Tor.
Plus on augmente le niveau de sécurité, plus le nombre de bits identifiants augmente, puis il redescend quand on désactive complètement JS.
Autrement dit, désactiver JS offre le plus haut niveau d’anonymat.
J’aurais aimé que Mozilla poursuive davantage la transition de Firefox vers Rust (
oxidizing). Cela aurait aussi été positif pour l’écosystème Rust, ce qui est regrettable.Si Rust était resté « l’arme secrète » de Mozilla, sa diffusion aurait peut-être au contraire été plus lente.
Si l’usage de Rust les aide à résoudre leurs problèmes, cela me semble être un choix rationnel.
Un langage est un outil qui s’adapte différemment selon le projet, l’équipe et le problème.
Ce n’est pas un argument de fanboy Rust, mais un problème de résistance comparable à l’époque où médecins ou pilotes refusaient les check-lists.
Pour l’UI, les itérations rapides et le GC sont importants, et les performances le sont moins. Écrire de l’UI en Rust peut devenir un enfer de maintenance.
Tor est un environnement multithread où sécurité et performances sont toutes deux essentielles.
Zig pourrait aussi être une alternative, mais ce n’est pas encore assez mature. Une approche comme celle de Tigerbeetle, centrée sur le déterminisme (
determinism), est également intéressante.Le plus gros reproche fait au projet Tor, c’est sa lenteur. Je ne pense pas qu’un passage à Rust le rende plus rapide.
Cette transition vers Rust a été financée par Zcash Community Grants. Même la R&D crypto peut parfois produire de bons résultats.
Avec la blague implicite que les cryptomonnaies sont peut-être pires que l’urine.
Je m’inquiète du risque juridique lié à l’exploitation d’un nœud de sortie Tor. Je me demande s’il existe un moyen de ne l’autoriser qu’en mode liste blanche.
Si possible, il est recommandé de l’enregistrer au nom d’une organisation, et si l’on veut aider de façon plus sûre, il vaut mieux exploiter un relay.
Faire tourner un guard relay ou middle relay aide également beaucoup le réseau.
En revanche, il faut bloquer certains ASN chinois. Il y a beaucoup de faux téléchargements.
Cette adoption de Rust ressemble à un remplacement des poutres en bois d’une vieille forteresse par de l’acier.
Le code de Tor basé sur C porte des décennies de compromis de sécurité et de traces d’optimisation, donc une rustification progressive est la manière la plus réaliste d’améliorer la sûreté.
L’essentiel n’est pas une « réécriture complète », mais la réduction des zones non sûres en mémoire.
Si seules les parties les plus risquées — parsing, cryptographie, frontières de protocole — passent à Rust, Tor deviendra plus robuste.
Il sera aussi intéressant de voir si cela évolue vers des transports enfichables basés sur Rust ou un runtime hybride.
En réalité, cette décision ne date pas d’hier. Tor a lancé en 2020 le projet Arti, basé sur Rust, et a annoncé Arti 1.0 en 2022.
L’équipe avait estimé qu’il serait difficile de refactoriser progressivement la base de code en C, et s’est dite satisfaite de Rust sur les plans de la vitesse de développement, de la portabilité et de l’arrivée de nouveaux contributeurs.
Selon le changelog d’Arti, le développement reste très actif.
Par exemple, une application de messagerie pourrait utiliser le réseau sans démon Tor séparé. À mon avis, c’est là le changement le plus important.
Tor n’est pas juste un concept : c’est le nom qui recouvre le protocole (
onion routing), le réseau et l’implémentation de référence.Quelqu’un a suggéré à moitié en plaisantant que compiler Tor avec Fil-C permettrait peut-être d’obtenir la sûreté mémoire gratuitement.