为Arm trust zone开发程序。

7

我该如何开发能够使用ARM信任区的应用程序?具体而言,我想开发一个可以在安全世界中保存敏感数据的程序。

这个程序应该运行在常规世界还是安全世界?我知道在安全世界中有可信应用程序,我需要开发可信应用程序吗?是否有SDK或API可以直接与现有的安全世界操作系统进行交互,或者我需要编译和安装自己的安全操作系统?

非常感谢您给出的任何建议。

谢谢!


http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.den0013c/index.html - auselen
4个回答

7
有两个极端。这些在ARMs的《安全技术:使用TrustZone技术构建安全系统》的软件概述章节中有记录。

API

在一个极端,只有一组API可以从normal world调用。这在LinuxSMC calls中有详细说明。例如,如果设备包含public-private key,API调用可以签署数据。normal world永远不会访问private key,但任何人都可以通过验证签名来验证设备是否为original。因此,normal world可以自由地通过任何通信接口转发此请求。这可能是设备身份验证的一部分。

合作操作系统

在这种模式下,安全世界和正常世界(另称TEE和REE)都有一个完整的操作系统。这些操作系统必须协同处理中断和调度。它们还可以使用SMC调用、无锁算法lock free、信号量以及共享内存。ARM建议将FIQ用于安全世界,并将IRQ留给正常世界。具体来说,有一些设置可以阻止正常世界屏蔽FIQ。所有这些问题都依赖于系统所需的IPC类型、调度、中断响应等。
最简单的“安全”调度程序将始终抢占“正常”世界。只有“空闲”任务会将CPU让给“正常”世界。更灵活的解决方案是让“调度程序”合作,以便两个世界都可以拥有更高和更低优先级的任务。

API安全世界需要一个监视器表(MVBAR),只有SMC插槽填充(偏移0x8)。对于操作系统,您需要FIQ和IRQ插槽来处理中断。如果两个操作系统都支持分页,则需要指令故障和数据故障处理程序。如果两个世界都使用NEON/VFP,则必须保存主CPU寄存器。 - artless noise
如果两个操作系统都支持分页,那么 "If both OS's are paging aware portion is untrue"(如果两个操作系统都支持分页,则该部分不正确)。只有外部中断通过MVBAR数据和页面故障地址进行向量处理。因此,即使操作系统使用MMU,监视器也无需处理页面故障。通常,由于分区检查器问题,外部中断将被触发。 - artless noise

1

已经存在像MobiCore这样的操作系统,并已在大规模市场设备上部署,例如三星Galaxy S3。

MobiCore是一种可以与Android同时运行的操作系统,因此信任小程序(= MobiCore应用程序)可以通过一组系统调用与Android应用程序通信到MobiCore driver,它是负责与受信任执行环境通信的Android操作系统的一部分。

如果您想要像上述那样为MobiCore开发信任小程序,则必须成为MobiCore开发人员,理论上可以通过注册MobiCore的Trustonic风投的开发人员来实现。

如果您希望在自己的设备/开发板上使用ARM的TrustZone技术,并且使用开源安全操作系统,也许可以使用OpenVirtualization的SierraTEE,该软件似乎已经编译适用于Xilinx Zynq-7000 AP SOC,并且与作为富操作系统的Android兼容。

1
更好的方式是在一个设备上安装REE操作系统和TEE操作系统。当程序想要执行一些敏感操作时,设备会切换到TEE操作系统,因此您可以安全地处理敏感数据。当您完成敏感数据处理后,设备将切换回REE操作系统。 但在一个设备上实现两个操作系统的切换是一项艰巨的工作。

0

您可以使用OPTEE(开源便携式可信执行环境)操作系统。如果您正在寻找可信执行环境应用程序示例,也称为可信应用程序(TA),那么您可以查看{{link2:此optee可信应用程序示例存储库}}和{{link3:此TA使用OP-TEE和Comcast Crypto API}}。

  • Optee操作系统提供以下API以编写可信应用程序:
    • 安全存储API,用于安全存储
    • 加密操作API,用于加密、解密安全凭据和数据
    • 安全元素API,有助于在防篡改平台上托管应用程序或小应用程序
    • 时间API
    • 算术API 对于客户端或普通世界,optee提供:
  • Tee客户端API

您可以在此处文档中参考。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接