rust编程之道 pdf_深挖一篇嵌入式内核论文之后,我发现 Rust 正在悄悄改变世界...
本站寻求有缘人接手,详细了解请联系站长QQ1493399855
之前看到了 TockOS(Rust实现的实时操作系统)团队在2015年写过的论文:https://www.tockos.org/assets/papers/tock-plos2015.pdf
在论文里面该团队总结了 Rust 开发嵌入式的一些不足,以及他们总结出来 Rust 需要改进的地方。然而,这其实是TockOS 犯下的一个乌龙错误。
我来帮大家梳理一下整个乌龙事件的过程,并且帮助大家对嵌入式开发特点有一个基本认识。
嵌入式开发的一些特点
嵌入式开发特点:
- 嵌入式系统通常使用缺乏硬件保护机制的处理器和微控制权,比如内存管理单元,当硬件无法保护软件的时候,语言的安全性则可以保护软件。
- 嵌入式应用程序对崩溃的容忍度较低,因为它们无法依靠用户干预来从运行时错误中恢复(例如,重启应用程序)。
- 调试嵌入式内核非常困,因为通常没有日志功能,并且需要物理访问来连接调试器。
2015年:Rust 所有权机制带来的问题
但是,在 2015年的论文里,TockOS团队提出,Rust 的所有权在实现嵌入式内核的时候,遇到了三个问题:Rust 的自动内存管理没有针对系统中经常出现的硬件资源和设备驱动程序进行优化。
由于项目的基本设置中存在线程不安全问题,Rust的 所有权模型阻止了闭包和其他内核代码之间的资源共享。
- 尽管闭包对于简化事件处理是理想的,但对于嵌入式系统而言,它们对动态内存的要求却是有问题的。
2017年:然而,过了两年发现乌龙了
然后,在2017年的时候,TockOS 发现,他们其实是因为对 Rust 的认识不深,导致了误解。然后又马上发了一篇新的论文来纠正之前的错误认知。问题的解决方法也比较简单:使用Rust的内部可变性。博客:https://www.tockos.org/blog/2017/apsys-paper/论文:https://www.tockos.org/assets/papers/rust-kernel-apsys2017.pdf在新的论文中,TockOS团队说:以我们在Rust中编写资源高效的嵌入式内核的经验发现,仅需一小部分不安全的抽象就可以形成通用的内核构建块。所以,我们认为 Rust 选择使用线性类型系统来避免运行时内存管理将使下一代安全操作系统成为了可能。
Unsafe 代码的安全抽象
在新的论文里讲到,TockOS中需要信任两种类型的 Unsafe 代码。第一个由Rust语言团队编写的Rust语言机制和库组成。这些提供了安全的接口,但是它们基本都是基于Unsafe代码的安全抽象。
- 第二种必须信任的代码是由内核开发人员编写的内核代码部分,这些部分使用Unsafe代码来实现基本的操作系统功能,但又可以提供安全的接口。
- 边界检查:数组经过边界检查,因此 Unsafe 代码使用length字段来确保访问是安全的。
- 迭代器优化:跨Rust数组操作的规范方法是使用迭代器,这些迭代器使用Unsafe代码来避免不必要的中间检查。
- 编译器内部函数和基本类型强制转换。
- 使用Cell。
2020年:Tock OS 现状
打开TockOS团队最新博客看了一眼,真不得了。https://www.tockos.org/blog/2020/hello-opensk/Google发布的这个 OpenSK 是跑在 Tock上面的!
插一段新闻如今,FIDO安全密钥通过提供一种简单的两因素身份验证(2FA)来防止网上诱骗,从而保护了帐户,这种形式正变得越来越广泛。但是,并非每个人都可以访问和使用它们。为了促进和改善对FIDO Authenticator实现的访问,Google宣布发布OpenSK,这是用Rust编写的安全密钥的开源实现,该密钥同时支持FIDO U2F和FIDO2标准。
该项目将帮助业余爱好者,硬件供应商和研究人员进行开发和创新。通过刷新Nordic芯片加密狗上的OpenSK固件,人们可以制作自己的安全密钥。
除了价格低廉外,Google解释说选择Nordic芯片加密狗作为初始参考硬件是因为它支持FIDO2中提到的所有主要传输协议,包括NFC,低功耗蓝牙,USB和专用硬件加密内核。此外,Google提供了可定制的3D打印保护套,可以在各种打印机上使用。
根据Google的说法,OpenSK是用Rust编写的,可在TockOS上运行,以提供更好的隔离性和更简洁的操作系统抽象以支持安全性。Rust具有强大的内存安全性和零成本的抽象性,从而使代码不易受到逻辑攻击。通过其沙箱体系结构,TockOS提供了安全密钥小应用程序,驱动程序和内核之间的隔离,这是构建深度防御所需的。Google对TockOS的贡献,包括闪存存储系统和补丁,已上传到TockOS存储库的上游。
谷歌还表示,希望将OpenSK扩展到其他类型的芯片,并带来更多创新和新功能,以及更强大的嵌入式加密技术。看见了吗?Google的OpenSK 也是 Rust实现的:https://github.com/google/OpenSKRust 正在悄悄的改变世界!
感谢阅读