以Rust重新实例让Tor更安全,官方发布新项目Arti

Tor官方发布一个用Rust重新实例的Tor版本Arti 1.0.0,目前这个版本已经可用于生产环境。Arti与C客户端Tor具有类似的隐私度、可用性和稳定性,而嵌入器(Embedder)API也接近完全稳定阶段。

用户现在已经可使用Arti代理连接Tor网络,匿名化网络连接,官方提醒,不建议用户使用传统网络浏览器指向Arti,因为网络浏览器会泄露许多隐私和可识别资讯,最好使用Tor浏览器。

从2020年Tor官方就已经开始着手以Rust实例Tor协议,而之所以要用Rust重写Tor,官方解释,在2001年的时候,C是一个合理的选择,但他们逐渐发现C的限制,像是C鼓励以不必要的低端方法,解决程序开发问题,而且要安全地使用C,需要付出许多心力,也由于这些限制,C语言的开发速度总是比期望更慢。

还有另一个重要原因,C实例发展这么多年,早已成为一个不那么模块化的设计,几乎所有东西都连接在一起,而这使得程序代码分析和进行安全性改进都变得困难。而转向以Rust开发,是这些问题的好解决方案,在2017年的时候,官方就曾尝试在C Tor程序代码库中添加Rust,希望有一天能逐步替换程序代码。

因为C Tor实例不够模块化,但要获得Rust带来的好处,需要一次重写整个模块,而非仅重写单一函数,但能够被隔离出来用Rust重写的模块,大部分微不足道,真正需要更换的部分又全部交织在一起,因此要在不破坏程序代码稳定性的情况下,要逐步替换成Rust实例,官方认为是不可能的工作。

在2020年,Tor共同创办人Nick Mathewson开始着手Rust Tor项目,随后更名Arti作为Tor官方项目,并获得Zcash Community Grants的资助,使得Tor公司得以聘用更多的开发者加入开发,历经数个测试版本,现在终于达到1.0.0里程碑。

从开发语言改变来看,官方提到,在每个可比较的开发阶段,以Rust实例碰到的bug,都比C开发阶段少得多,会遇到的错误几乎都是语义或是算法错误,也就是真正的程序语言开发问题,而非是使用Rust语言及其工具所遭遇到的问题。

Rust以学习梯度陡闻名,而且编译器非常严谨,官方提到,一般而言,只要Rust程序代码可以通过编译测试,在相同条件下,就可能比C程序代码更加正确。虽然是第二次构建Tor,类似功能开发速度本来就会比较快,但官方强调,部分速度提升是因为Rust更具表达式语义,且更可用的函数库生态系统,但主要还是归功于Rust安全性所带来的信心。

不过Rust还是有一些缺点,像是虽然Rust可移植性比C更好,但还是需要处理操作系统之间的差异,另外,因为Rust的标准函数库并不会默认安装在目标系统上,也因此增加二进制文件的大小,虽然通过使用平台原生TLS实例改进支持,已经足以消除这个问题,但是仍有一些工作要进行。

比起C Tor,官方发现Arti更吸引贡献者,获得的程序代码贡献量更大且摩擦更小,由于Rust强大的类型系统、API文件支持和安全性,极大程度帮助新的贡献者入手。