Gli sviluppatori della rete anonima Tor hanno rilasciato la prima versione stabile (1.0.0) del progetto Arti, che sviluppa un client Tor scritto in Rust. Questa versione è stata segnalata come adatta per l'uso da parte degli utenti comuni e offre lo stesso livello di riservatezza, usabilità e stabilità della versione principale scritta in C. È stato stabilizzato anche l'API, che può essere utilizzata per integrare le funzionalità di Arti in altre applicazioni. Il codice è distribuito sotto le licenze Apache 2.0 e MIT.
A differenza dell'implementazione in C, che è stata inizialmente progettata come un proxy SOCKS e successivamente adattata ad altre esigenze, Arti viene sviluppato fin dall'inizio come una libreria incorporabile modulare, che varie applicazioni potranno utilizzare. Inoltre, durante lo sviluppo del nuovo progetto si tiene conto di tutta l'esperienza passata nella progettazione di Tor, il che consente di evitare problemi architettonici noti e rende il progetto più modulare ed efficiente.
La motivazione per riscrivere Tor in Rust è stata il desiderio di ottenere un livello più elevato di sicurezza del codice grazie all'uso di un linguaggio che garantisce un uso sicuro della memoria. Secondo i programmatori di Tor, almeno la metà di tutte le vulnerabilità monitorate dal progetto sarà esclusa nell'implementazione in Rust, a meno che non vengano utilizzati blocchi 'unsafe' nel codice. Rust offrirà anche la possibilità di ottenere una maggiore velocità di sviluppo rispetto all'uso del C, grazie all'espressività del linguaggio e alle sue rigide garanzie, che permettono di risparmiare tempo in controlli doppi e scrittura di codice superfluo.
Dallo sviluppo della prima versione, l'uso del linguaggio Rust si è dimostrato giustificato. Ad esempio, è stato notato che ad ogni fase nel codice Rust si commettevano meno errori rispetto a uno sviluppo comparabile in C: gli errori emersi durante lo sviluppo erano principalmente legati alla logica e alla semantica. La severità del compilatore rustc, considerata da alcuni come un difetto, si è rivelata in realtà una benedizione, poiché se il codice si compila e supera i test, aumenta significativamente la probabilità della sua correttezza.
Durante il lavoro sulla nuova versione, si è inoltre confermato l'aumento della velocità di sviluppo, dovuto non solo al fatto che la funzionalità veniva ricreata sulla base di un modello esistente, ma anche alla semantica più espressiva di Rust, alle librerie di funzioni comode e all'uso delle capacità di Rust per garantire la sicurezza del codice. Tra i difetti, si evidenzia la grande dimensione degli assembly risultanti: poiché la libreria standard di Rust non è inclusa nei sistemi per impostazione predefinita, deve essere inclusa nei pacchetti offerti per il download.
La versione 1.0 si concentra principalmente sul funzionamento di base nel ruolo di client. Nella versione 1.1 è prevista l'implementazione del supporto per il trasporto plug-in e ponti per eludere le restrizioni. Nella versione 1.2 si prevede il supporto per i servizi onion e funzionalità correlate, come il protocollo di controllo della congestione (RTT Congestion Control) e misure di protezione contro gli attacchi DDoS. Il raggiungimento della parità con il client in linguaggio C è previsto nella versione 2.0, nella quale saranno anche offerti binding per l'utilizzo di Arti in codice scritto in vari linguaggi di programmazione.
Nel corso dei prossimi anni, il lavoro sarà indirizzato all'implementazione delle funzionalità necessarie per il funzionamento dei relè e server directory. Quando il codice in Rust raggiungerà un livello in grado di sostituire completamente la variante in C, gli sviluppatori intendono conferire ad Arti lo status di implementazione principale di Tor e interrompere il supporto per la versione in C. Il supporto per la versione in linguaggio C sarà gradualmente dismesso, fornendo la possibilità di una migrazione fluida.
Fonte: opennet.ru
