在基于Android的移动应用中实现eMMC和UFS内联加密

作者:Biswanath Tayenjam,ASIC数字设计工程师,和Licinio Sousa,Synopsys公司技术营销经理

移动存储的安全性至关重要,因为用户在其移动应用(如数码相机、智能手机和平板电脑)的闪存中存储更加敏感的数据。联合电子设备工程委员会(JEDEC)为这些移动应用开发了两种存储接口标准:嵌入式多媒体控制器(eMMC)和通用闪存(UFS), 两者都可以使用内联加密来保护数据。eMMC为主流移动应用的提供了高可靠性、吞吐量和快速启动支持,而UFS则为高端移动应用带来了显著的性能优势和功耗特性。

在智能手机中,eMMC或UFS 被划分为两个分区:

  1. 只读分区:系统使用此分区来存储Android操作系统,用户无法对此部分进行编程和修改,除非破坏掉手机的功能
  2. 应用和数据分区:系统使用此分区来存储应用程序和用户数据,例如文档和多媒体文件

图1显示了32 GB的内部内存分区,其中25.23 GB可用于设备存储,剩下的则用于存储操作系统。

图1:Android设备的内部存储分区显示,大部分空间用于存储需保证安全的个人数据

图1:Android设备的内部存储分区显示,大部分空间用于存储需保证安全的个人数据

由于许多内部移动存储设备用于存储用户数据,而这些数据很可能是私人的、敏感的,所以,诸如加密这样的安全性措施就成为迫切需要的功能之一。本文介绍了eMMC或UFS主控制器内联加密功能如何在基于Android的应用中执行安全任务。

什么是加密

加密是对数据进行编码的过程,因此其只能由授权用户访问。根据Barry K. Shelton所著的“Cryptography Introduction”(《密码学入门》)一书,“加密算法或密码是应用于数据的数学公式或函数,其将未受保护的信息(即明文或文本)转换成不可识别的格式,后者通常称为密文。加密算法通常有两个输入:密钥和明文本身。密钥只是一个具有预定长度的数字。理想情况下,每个密钥都是真正的随机数,这意味着任何可能的密钥组合都是同等可能的,并且密钥无法以可预测的方式生成。根据数学预测,一个强大的算法和密钥组合至少需要几百万年的时间才能破解。”

软件加密与硬件内联加密

今天,入侵我们隐私数据的情况比以往任何时候都要严重,这迫使操作系统开发人员采用加密方法来支持数据存储加密,例如基于文件的加密和全盘加密。

基于软件的加密解决方案利用主系统处理器来执行加密和解密任务。虽然这种方法提供了相当不错的性能,但是由于需要不断提高存储速度,所以这种方法日渐不足。为了克服性能劣化的情况,诸如JEDEC等标准化机构正在向主控制器中添加基于硬件的内联加密功能。内联意味着硬件加密引擎位于主控制器内部(图2),并即时加密和解密数据。利用内联硬件加密引擎处理大量的安全数据能够实现更好的实时系统性能,因为这能够减少延迟并减轻主处理器的负担。无论如何,硬件内联加密或软件加密可以共存于同一个应用中。硬件内联加密解决了对称、批量加密的问题,而软件加密则解决了认证、密钥和文件名加密问题。

图2:具有内置加密引擎的移动存储主控制器IP

图2:具有内置加密引擎的移动存储主控制器IP

Android设备中的加密

在没有安全锁定屏幕的Android设备中,数据存储加密是可选的。但是,支持安全锁定屏幕的Android设备可以对私人应用数据和共享应用数据都进行数据存储加密。Android有两种设备加密方法:全盘加密和基于文件的加密。eMMC和UFS主控制器支持多种加密算法来实现这两种方法,如图3所示。

图3:eMMC和UFS支持对全盘加密方法和基于文件的加密方法都提供相应的加密算法

图3:eMMC和UFS支持对全盘加密方法和基于文件的加密方法都提供相应的加密算法

全盘加密在Android v4.4中部分引入,并在Android v5.0中全面引入。借助于全盘加密,Android设备上的所有用户数据都使用加密密钥进行编码。一旦设备被加密,所有用户创建的数据在写入磁盘之前都会被自动加密,而所有读取的数据在进行处理之前都会被自动解密。

全盘加密采用单个加密密钥来保护数据。磁盘加密密钥由用户的设备密码加以保护。在任何时候,该加密密钥都不能在没有加密的情况下写入存储器中。在Android设备中,全盘加密基于Linux内核功能dm-crypt,该功能在模块设备层运行。因此,加密可以与eMMC或UFS设备一起工作,这些设备将其自己作为模块设备呈现给内核。

在启动时,用户必须在访问磁盘的任何部分之前提供其证书。虽然这对于安全性来说非常好,但是也意味着,在用户提供证书之前,手机的大部分核心功能都是不可用的。由于对用户数据的访问受到用户证书的保护,所以,诸如警报、无障碍服务和电话服务等功能都无法使用。全盘加密使用高级加密标准-密码块链接(AES-CBC)对主密钥进行加密,并使用AES-CBC-ESSIV(加密Salt-Sector初始化向量)对数据进行加密。

Android 7.0及以上版本支持另一种加密方法,即基于文件的加密,它使用不同的密钥对不同的文件进行加密,这些密钥可以独立解锁。支持基于文件加密的设备也能够支持称为直接启动的新功能,该功能能够让加密的设备直接启动到锁定的屏幕,而无需询问用户证书,从而可以快速访问核心设备功能,例如无障碍服务和警报。

在采用基于文件的加密的设备中,每个用户都有两个可用的存储位置:

  • 证书加密的(CE)存储 – 这是默认的存储位置,其仅在用户使用其证书解锁设备之后才能使用
  • 设备加密的(DE)存储 – 这是在直接启动模式期间以及在用户解锁设备之后都可以使用的存储位置;DE密钥以密码方式绑定到设备的硬件信任根(root of trust)

具有直接启动感知能力的应用可以访问DE存储,但是只有在用户提供证书解锁设备之后才能访问CE存储。利用基于文件的加密,即使在用户提供设备密码之前,诸如警报和电话服务等应用仍然可以在有限的情况下运行。在基于文件的加密模式下,文件内容采用AES-XTS进行加密,而文件名则使用AES-CBC-CTS(密文窃取)模式进行加密。

对于Android而言,保护CE和DE存储位置的密钥必须是唯一且独特的,并且应当在受信任的执行环境中以加密方式绑定到硬件支持的密钥库中。

结论

由于黑客活动日益猖獗,而且消费者越来越频繁地使用内存分区来保护其移动设备中的隐私数据,因此,安全性变得至关重要。虽然像Android这样的操作系统提供了软件加密,但诸如JEDEC这样的标准化组织在主控制器内部提供了加密和解密引擎来处理安全相关的任务。通过采用硬件内联加密方式对数据进行加密,JEDEC eMMC和UFS标准的用户可以实现更好的系统性能。Synopsys公司的 DesignWare移动存储IP解决方案符合最新的JEDEC标准,其包含一套内置的高级加密标准(AES)硬件引擎,用于执行针对Android生态系统的各种加密操作。