OP-TEE_2_软件架构

作者: 阿棍儿_Leon | 来源:发表于2017-11-20 12:17 被阅读154次

本篇要基于一个例子讲软件架构,所以先补充以下基本概念,老司机可以跳过或指正,由于是小白向文章,为了便于理解,文中基本概念并不绝对严谨。

程序:表面上看是代码,本质是计算机内部资源和工具的使用步骤,代码只是对那些步骤的抽象表达,需要抽象是因为人类理解或使用更方便,人容易理解抽象的东西计算机最底层只会做加法。小到数学中的加减乘除可以抽象成一个运算符号,大到alpha Go的一步棋可以抽象成一行代码,如果有人帮你把和alpha Go的沟通方式抽象成一套对话的规则,这也是个编程语言,当然,这种语言是远离机器思维,而接近于一般人类思维的,就是所谓的高级(这个“级”从某种角度讲只是编程语言对应的编程思维与人类或机器相似度的评价标准,不会作为程序猿鄙视链的的参考)编程语言了,然而再高级的代码最终也会细分为若干步加法。

程序的本质

从代码的能力上看,代码也是分三六九等的,有些代码可以控制更多的软硬件资源,有些很少,然而这不取决于代码是谁写的,只取决于代码之间的逻辑关系。比如,如果APP要使用手机上的摄像头,那么APP就要经过操作系统的同意,操作系统是否把摄像头的使用权交给APP,取决于用户是否授权,所以APP如果在安装授权列表中没写摄像头的权限,就会在要使用时询问用户,我们就看到了类似“某应用要使用摄像头,是否允许?”这样的询问。也就是说,程序之间是存在某种隔离的。

有了层次,隔离的概念,就便于理解下图了。

臆想的安卓手机存储指纹的流程

上图是一个臆想的流程,箭头代表了指纹信息的流动。图中2个原谅色的方块就是GP标准所规定的接口,再看OP-TEE, open-source security for the mass-market这篇文章,里面有个完整的图,还有关于OP-TEE的历史,里面提到了GP。

GP(GlobalPlatform):是一个致力于开发、制定并发布安全芯片的技术标准的组织,可以用搜索引擎进一步了解。对于本主题来说,要知道这个组织制定了TEE的标准,OP-TEE是符合GP关于TEE的软件标准,运行在符合GP关于TEE的硬件标准的芯片上的操作系统以及配套软件。图中的两个标准接口分别是GlobalPlatform TEE Client APIGlobalPlatform TEE Internal Core API,前者用来让普通应用使用TEE系统中的应用,后者让TEE中的应用使用TEE系统,虽有公开文档,但是官方下载有些麻烦,需要的可以留言。

再补充几个图中出现的概念:

TA(Trusted Application):在图中右上角,可以理解为在TEE系统中运行的APP。

CA(Client Application):即图中的安卓手机APP,可以理解为在REE系统中要使用TEE系统功能的的APP。

TEE驱动:驱动,直接拆分字面意思,驱使某东西动,我们的电脑上经常接触的是显卡驱动,鼠标驱动什么的,也是一样的东西,就是一个软件。没有这个软件也不是不行,只是如果你的代码要获取光学鼠标在屏幕上的位置,可能需要做几件事:1.控制激光器发射激光,2.分析激光反射的图像,判定鼠标移动的位移,3.根据上次的位置和本次的位移,计算目前鼠标的位置。光学鼠标原理我不太懂,实际上可能不是这样。如果有了鼠标驱动,上面这些动作就只要一行代码了,驱动已经把这些动作打包成了一条命令(函数API)。驱动就是这样一种存在,让你不必了解所驱使的对象的具体细节,就能够使用那个对象能够完成的复杂功能。就像轮滑表演,对于我来说,combo是一些列动作组成的,对业余观众来说就是一个节目而已,观众不必关心每个动作的技术要点,动作的衔接,just enjoy.TEE驱动,就好理解了,对于REE来说,TEE就一个黑盒子,REE不知道TEE里面在干什么,只能看到TEE驱动提供的一些开关、按钮和一份傻瓜式使用说明书,即驱使TEE环境做事的软件。

TEE supplicant:这个东西没有找到很好理解的类比事物,但也不能不画,其完整的功能我还不敢乱说,目前在上图中的功能就是替TEE系统完成一些REE系统下的事务。

REE/TEE系统调度:图中的系统调度是非专业术语,是我为了便于理解造的词,所谓调度就是协调、分配,很多东西会对他发起一些请求,这个调度者就负责把这个请求转发到对应的接收者那里。

REE/TEE系统存储功能:这个词也是我造的,系统xx功能专业讲叫做系统调用,就是操作系统的一些基础功能,比如读写文件、保存文件等,这里用的就是创建和保存文件功能。

user space/kernel space:这是一种软件层次的划分,可以先简单理解为用户应用层和操作系统层。在user space层面,就是我们常见的支付宝、微信,王者荣耀等APP里面的程序,当王者荣耀要求显示一张画面时,例如你获得本场MVP的这个画面,就要通过操作系统来操控管显示的那些硬件,但做用户应用的程序猿只想要一行代码来实现这件事,因为他需要把更多精力投入到游戏逻辑中,所以游戏引擎给了他这种能力,而游戏引擎程序猿就需要使用操作系统的一些功能来实现,而操作系统(kernel space)就使用管显示的硬件的驱动来实现。也就是说,越上层的程序猿越不知道底下的细节,所以就不能让他们乱搞,只提供给他们足够他们使用的有限功能就可以了。kernel space里面其实也有很多层,越是向下,对硬件的操控能力越强,越有为所欲为的潜力,相对在下的范围,专业术语就叫“底层”。一般在同一层的程序猿中,懂底层的人会被高看一眼。

有了以上概念,这个流程就清楚一些了,手机APP想要使用TEE中的有存储功能的TA,把指纹存到SD卡上。这时APP需要通过GP标准用户接口,调用TEE驱动来向TEE请求服务。TEE驱动就像TEE这个大宅子门外的门童,TEE操作系统调度就是站在门里的管家,这个管家负责把外面的请求发送给宅子里面的请求中指定的那个财主(TA)或是某个公子(TA)。比如是某个公子(TA)收到了请求,原来是隔壁宅院的小姐邀请他一起私奔,在私奔前她了准备一笔盘缠,盘缠藏在一个秘密地点,小姐请公子把地图藏起来。公子会找负责宅内事务的另一个管家(GP标准内部接口),叫他使用宅子内部的公共服务(例如TEE系统存储功能),使用特定的加密方法,把藏宝图和公子的一个独特的个人信息糅合起来,变成一张普通图,然后请宅子外面的管家(TEE supplicant),把普通图送到实物存储银行(SD卡),请柜台人员(REE系统存储功能)保存普通图。这里有2个符合上面流程实际的隐含假设:1.里面的门童,管家之类的都是可靠的,可以理解为机器人,只会做固定的事务,不会泄密;2.小姐和公子是互相认识的,有暗号的。这样,任何其他人在REE这边没有办法获得藏宝图,他抢实物银行只能获得一张普通图。因为暗号对不上,他通过门童和管家不能驱使公子取出藏宝图。他可以找宅子里的另一个公子帮忙,但是另一个公子没有那个公子的独特的个人信息,这个对不上,后面的流程也是走不通。总之,其他人获得这张藏宝图是机器困难的。

当然不是所有存储都是这个流程,TEE也不只有存储的功能,以上之一个臆想的案例。

相关文章

  • OP-TEE_2_软件架构

    本篇要基于一个例子讲软件架构,所以先补充以下基本概念,老司机可以跳过或指正,由于是小白向文章,为了便于理解,文中基...

  • 无标题文章

    软件体系架构 第一章 认识体系结构 软件架构的多个结构 软件的架构不是静止的 软件架构的概念 软件架构的产生 软件...

  • SpringCloud 微服务(架构篇)

    SpringCloud 微服务(架构篇) 软件架构的进化 什么是软件架构 软件架构是在软件的内部,经过 综合各种因...

  • 「整洁架构」实战 MVC 架构重构到整洁架构

    软件架构介绍 什么是软件架构 我们先来看看维基百科对 软件架构 的定义, 软件架构是有关软件整体结构与组件的抽象描...

  • 系统架构设计师学习笔记 第九章 软件架构设计

    第九章 软件架构设计 9.1 软件架构概述 9.1.1 软件架构的定义 定义1:软件或计算机系统的软件架构是该系统...

  • 软件架构详解(附图)

    软件架构(software architecture) 软件架构(software architecture)是一...

  • 系统分析与设计作业8

    1、描述软件架构与框架之间的区别与联系 软件架构:软件架构是一个系统的草图。软件架构描述的对象是直接构成系统的抽象...

  • 学习总结0606

    一、软件架构的概念 软件架构是有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计。 软件架构整体...

  • 系统分析与设计 hw8

    描述软件架构与框架之间的区别与联系 先分别弄清楚两个名词的定义。 软件架构:软件架构是一个系统的草图。软件架构描述...

  • 微服务

    1.1 软件架构的演进: |-- 单体架构 |-- SOA架构 ...

网友评论

    本文标题:OP-TEE_2_软件架构

    本文链接:https://www.haomeiwen.com/subject/vlhrvxtx.html