当前位置: 首页 > news >正文

Android Safety 系列专题【总篇:安全机制汇总】

目录

一、密码学基本概念

1、编码&散列算法

2、加密算法

3、数字证书

二、镜像签名

1、启动流程

2、AP & BP镜像

3、Secure Boot机制

4、Aosp AVB机制

三、运行时安全机制

1、安全架构

2、DAC机制

3、Selinux机制

4、应用签名


Android系统的安全方面其实是非常复杂,繁多,添加了很多套机制,在android五层架构中,用于解决不同的安全问题。因此这里整体梳理一下android在安全方面做的一系列事情。本系列主要围绕如下几个主体全面了解Android系统在安全方面做了哪些努力:

  • 第一章:针对密码学的基本概念,主要介绍一些基础的密码学相关术语,对一些基本概念有所了解
  • 第二章:引入镜像签名,为了防止刷机过程中软件被篡改,从镜像的编译、平台工具刷机、系统启动过程中对分区的校验,来保证整个流程是安全的
  • 第三章:建立在系统成功启动之后,如何保证应用的信息安全,服务进程的安全,等维度来拆机AOSP引入了哪些机制

一、密码学基本概念

要理解android的安全机制,肯定少不了各种key,公钥、私钥、证书、签名等东西,但是这些如果没有系统的了解过密码学基础知识,可能会觉得一脸懵逼。这里就来进行一个简单和基础概念的梳理。

1、编码&散列算法

在研究密码学之前,先进行一个热身,介绍两种算法:编码算法和散列算法,他们都不是加密算法,同时也存在一些本质的区别。

1)编码算法

  • 概念:编码算法是可逆的格式转换,目的是让数据能在特定系统中安全传输或存储(如文本环境传二进制),不提供任何安全性。
  • 示例:明文字符串"hello"可以通过编码算法转换为"aGVsbG8=",又可以通过编码算法回到"hello",中间没有任何安全性可研,所以根本无法用来当成加密算法进行使用。
  • 子集:常见的算法有Base64、Base32 / Base58 / Base85、URL 编码(Percent-encoding)、HTML 实体编码、Hex 编码(十六进制)
  • base64:作为最常见的编码算法,可研将任意二进制数据转为 ASCII 字符串(使用 A–Z, a–z, 0–9, +, /, =)。常用于:邮件附件、HTML/CSS 内嵌图片(data:image/png;base64,...)、JWT Token 载荷

2)散列算法

  • 概念:不可逆!输出固定长度“指纹”,用于校验完整性、生成唯一标识等。安全性差异大,需按场景选择。
  • 示例:明文字符串"xxxxyyyy....",都可以获取他固定长度的hash值,但是无法通过这个hash值还原之前的明文,因此它是不可逆,通常用于校验完整性,或者生成唯一标识。因为安全性差异较大,通常也无法用来作为密码算法。
  • MD5(Message-Digest 5):输出128 位(32 位 hex),特点是快,但已被攻破(碰撞攻击可行),仅限非安全场景(如文件快速校验、ETag)

  • CRC32(Cyclic Redundancy Check):输出32 位整数(常转为 hex);不是密码学哈希!仅用于错误检测(如网络包、ZIP 文件校验);速度快,但极易碰撞,不能用于安全场景

  • SHA 系列(Secure Hash Algorithm):其中SHA-256比较场景,输出长度256位

算法输出长度安全性说明
SHA-1160 位(40 hex)❌ 不安全(Google 已实现碰撞)曾用于 Git、证书,现逐步淘汰
SHA-256256 位(64 hex)✅ 安全最广泛使用的安全哈希(区块链、TLS、JWT)
SHA-224 / SHA-384 / SHA-512各不同✅ 安全SHA-2 家族成员
SHA-3可配(如 256/512)✅ 安全结构不同于 SHA-2,抗未来攻击更强

2、加密算法

1)对称加密

对称加密就是通信双方使用相同的秘钥加密解密。

对称加密算法有DES、3DES(TripleDES),DESede、AES、Blowfish,以及RC2和RC4算法,还有其他第三方提供的软件包提供的Bouncy Castle 提供的IDEA算法。这里面DES算是最经典的算法,DESede是DES算法的变种,AES算是DES算法的替代者。

流程图如上,详细理解可以参考:https://www.jianshu.com/p/3840b344b27c

2)非对称加密

非对称加密使用一对密钥:公钥(public key)和私钥(private key)。

  • 私钥只能由一方安全保管,不能外泄,而公钥则可以发给任何请求它的人。
  • 公钥和私钥是成对出现的,它们可以互相解密。公钥加密的内容,只有私钥可以解密。私钥加密的内容,只有公钥可以解密

流程图如上,介绍的两个场景:

  • 第一个场景是,原内容被公钥加密之后,公钥无法解密只有私钥才能进行解密,例如对方想给我发送一段密文,那么他可以使用我的公钥进行加密,然后吧密文发给我,因为私钥只在我手上,我不担心其他人收到密文,因为他们没有私钥无法解密,只有我才能。
  • 第二个场景是,我把我的信息通过私钥进行加密,加密之后的密文发布出去,只要拿到我的公钥就可以解密这段密文内容,通常用于身份认证的场景,包括发布签名证书。

主要的非对称加密算法有RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)。使用最广泛的是RSA算法,Elgamal是另一种常用的非对称加密算法.

3)加密算法如何选择?

如上为我们最佳使用场景,因为对称加密算法速度比较快,通常会把传输内容进行对称加密,例如AES,为了保证我们的安全性,我们可以对这里比较重要的AES秘钥进行第二次加密,那么如何加密呢?使用非对称加密方式,例如RSA,虽然RSA比较慢,但是这里的数据量小。

这样有效的吧非对称和对称加密算法,结合起来,构建成了如今大多数场景。

3、数字证书

证书这个理解起来有些懵逼,不过可以参考https://blog.csdn.net/adeyi/article/details/8556170

描述的非常形象,截一段他的图:

因此数字证书其实就是一个文件,或者一段字符串,这段数据中包含了我们的持有者姓名,持有者的公钥。讲到这里是否恍然大悟,其实就是非对称加密的第二个场景的适用:

举个例子:我要发布SHEN的数字证书,首先我需要生成公钥和私钥,我把我的名字SHEN和生成的公钥,还有其他信息放到一起,并做成如上的名片,这个就是我的数字证书,并发放给我的粉丝,我的粉丝拿到我这张名片之后,就能够知道我的公钥和我的名字,我把我的名字SHEN通过我的私钥进行加密,我的粉丝收到这些密文之后,通过我的证书中的公钥解密,解密出来是我的名字SHEN,并和我的数字证书进行验证,看我数字证书的持有者也是SHEN,匹配成功,就知道这是本人发布的签名,是真实的。

二、镜像签名

在了解了密码学的一些基本概念之后,我们来看看android是如何利用这些加密算法,来保证我们android架构的安全呢?

首先面临的问题就是,我们如何保证镜像编译和刷机的过程是安全的,例如厂商生成的镜像经过厂商自己的私钥签名,就可以保证此镜像是由厂商编译生成,厂商生成的设备,如果发现镜像的签名不匹配,那么就禁止启动。

在研究这个话题之前,我们先看看在不同平台的android系统启动流程:

1、启动流程

1)Boot ROM 阶段

设备上电后,CPU从固定地址(通常是0x0)开始执行固化在芯片内部ROM中的Boot ROM代码(也称BL1)。
这一阶段不可修改,是整个启动链的信任根,主要任务包括:

  • 初始化CPU核心、时钟、L2 Cache(临时作为SRAM使用)等基础硬件;
  • 检测启动设备(如eMMC、SD卡);
  • 加载下一阶段的Preloader到内部SRAM并跳转执行。
  • MTK‌: 称为 ‌BL1‌,固化在芯片 ROM 中,负责初始化 CPU、时钟、L2 Cache,并加载 ‌Preloader‌ 到 SRAM。
  • 高通‌: 称为 ‌PBL‌(Primary Boot Loader),功能类似,负责从存储设备加载 ‌SBL‌ 镜像。

2)Bootloader 阶段

boot rom阶段还是执行的固化在芯片内部rom中的代码,这段代码通常不会被篡改,由芯片平台厂商进行设计,并且闭源,我们无法修改代码。

boot rom负责加载启动引导程序bootloader,而bootloader就是常规的引导程序,这部分代码在不同平台设计也有所不一样,不同的这段代码我们可以拿到并进行修改。

A 高通平台

高通平台主要设计如下:

  • Primary Bootloader (PBL) 阶段‌:PBL 是 Boot ROM 后续执行的第一个引导加载程序,通常由高通的 SoC 芯片内置,不可更改。它的主要任务包括:

  • 初始化基本硬件环境(如时钟、内存控制器等)。
  • 加载次级引导程序(Secondary Bootloader, SBL)。
  • 在某些情况下,可能会加载 SBL1 到 L2 Cache 或 RPM 处理器的 RAM 中。
  • Secondary Bootloader (SBL) 阶段‌:SBL 继续进行更深入的硬件初始化工作,例如:

  • 初始化 DDR 内存控制器。
  • 加载安全组件(如 TrustZone/QSEE)。
  • 加载后续阶段的引导程序(如 XBL 或 UEFI)。
  • UEFI 或 XBL 阶段‌:在较新的高通平台(如 MSM8998 及以上),使用 UEFI 替代了传统的 LK Bootloader。UEFI 包括多个阶段,如 SEC、PEI、DXE、BDS 等,负责加载内核镜像和 ramdisk。而在旧平台中,XBL(eXtensible Boot Loader)可能替代 SBL 作为主要的引导加载程序。

B MTK平台

MTK平台主要设计如下:

  • Preloader 阶段(BL2)‌:Preloader是MTK平台特有的引导程序,运行在SRAM中(BL2阶段),负责进一步初始化硬件环境。其关键功能包括:

  • 初始化外部DRAM控制器;
  • 设置UART、USB等调试接口;
  • 执行安全验证(仅加载MTK签名的镜像);
  • 加载LK(Little Kernel)到DRAM中。
  • 此阶段还支持多种启动模式检测,如是否进入Fastboot或Recovery模式。
  • Little Kernel(LK)阶段(BL33)‌:LK是MTK平台的主引导加载程序,主要分为BL2(在SRAM中运行,进行最小化初始化)阶段;和‌BL33(在DRAM中运行,执行完整功能)阶段。LK的主要职责包括:

  • 显示开机Logo(初始化LCD);
  • 检测启动模式(正常启动、Fastboot、Recovery等);
  • 校验并加载boot.img(包含Linux内核和ramdisk)到内存;
  • 将控制权交给Linux内核。

3)Linux 内核阶段

MTK 与高通‌:均加载 Linux 内核镜像(如 zImage),内核会执行以下操作:

  • 初始化设备驱动和子系统。
  • 挂载根文件系统。
  • 加载必要的内核模块。
  • 启动用户空间的第一个进程init

4)System分区进程

当linux内核被启动之后,就会依次启动如下进程:

  • 启动init进程,解析init.rc,启动系统服务(如ueventdlogd)和 Zygote。
  • Zygote 创建 ART 虚拟机并预加载类库,System Server 启动核心服务,最终启动 Launcher。

因为这些进程大部分都在system分区,即android原生流程,这就是所谓的AP侧。

2、AP & BP镜像

从启动流程都可以看出来,有很多阶段是由google aosp设计,但是一些和硬件强相关的阶段其实是由厂商自己设计,例如高通一大堆子系统,例如MTK自己研发的modem子系统,包括boot rom和bootloader阶段所需要的一些分区。

从这个维度可以简单的进行区分?android原生的镜像/分区叫做AP侧镜像,非android的进行/分区叫做BP侧镜像。

AP侧和BP侧通过共享内存进行通信,BP侧主要负责语音通话、短信等数据通信以及SIM卡管理功能。AP侧通过标准的接口TAPI(Telephony API)调用BP侧的功能。

这种设计使得AP侧的软件变化不会影响BP侧的通信功能,同时保证了系统的稳定性和安全性。

1)AP侧镜像(Application Processor Side)

AP侧镜像主要运行在应用处理器上,负责操作系统、用户界面和应用程序的执行。这些镜像通常包括:

  • boot.img‌: 包含Linux内核镜像和ramdisk,用于启动Android系统
  • system.img‌: 系统分区镜像,包含Android框架、核心应用和系统库
  • vendor.img‌: 厂商特定组件,如驱动程序和专有软件
  • recovery.img‌: 恢复模式镜像,用于系统恢复和更新
  • cache.img‌: 缓存分区镜像,存储临时文件
  • userdata.img‌: 用户数据分区镜像,存储用户文件和应用数据

AP侧镜像通过Google的AVB(Android Verified Boot)机制进行安全验证,确保系统启动的完整性和真实性。

2)BP侧镜像(Baseband Processor Side)

BP侧镜像运行在基带处理器上,主要负责射频通信控制和相关的硬件功能。这些镜像包括:

  • modem‌: 基带固件,处理通信协议和无线信号
  • dsp‌: 数字信号处理器镜像,处理音频和视频信号
  • adsp‌: 高通音频数字信号处理器镜像,处理音频相关任务
  • wcnss‌: WiFi和蓝牙基带镜像,处理无线通信功能
  • venus‌: 视频编解码器镜像,处理视频解码和编码
  • mss‌: Modem SubSystem镜像,基带子系统
  • pronto‌: WiFi基带镜像,处理WiFi通信
  • rpm‌: 资源电源管理固件,管理低功耗状态
  • tz‌: TrustZone安全环境,提供安全启动环境
  • sbl‌: 基带处理器初级引导加载程序,负责初始化硬件

BP侧镜像需要通过厂商的安全启动机制进行签名验证,确保通信功能的安全性。

3)MTK&高通 AP侧镜像

AP侧分区主要由应用处理器管理,包含操作系统、应用程序和用户数据等,这些分区通常通过Google的AVB(Android Verified Boot)机制进行安全验证。

  • boot‌: 包含内核镜像和ramdisk,用于启动Android系统。
  • system‌: 系统分区,存储Android框架、核心应用和系统库。
  • vendor‌: 厂商特定组件,如驱动程序和专有软件。
  • recovery‌: 恢复模式分区,用于系统恢复和更新。
  • cache‌: 缓存分区,存储临时文件以加快系统运行速度。
  • userdata‌: 用户数据分区,存储用户文件、应用数据和设置。
  • dtbo‌: 设备树blob分区,用于设备树描述。
  • product‌: 产品特定分区,包含厂商定制的应用和配置。
  • odm‌: OEM设备模块,用于特定设备的驱动和配置。
  • metadata‌: 存储元数据信息,如分区表和安全参数。
  • NVRAM‌: 包含Modem NVRAM数据,如RF校准数据等。(MTK特有?)

‌4)高通 BP侧镜像

BP侧分区由基带处理器管理,包含基带固件和安全相关的镜像,这些分区通常需要高通的安全启动机制和签名验证。

  • modem‌: 基带固件,处理通信协议和无线信号。
  • dsp‌: 数字信号处理器镜像,处理音频和视频信号。
  • adsp‌: 高通音频数字信号处理器镜像,处理音频相关任务。
  • wcnss‌: WiFi和蓝牙基带镜像,处理无线通信功能。
  • venus‌: 视频编解码器镜像,处理视频解码和编码。
  • mss‌: Modem SubSystem,基带子系统镜像。
  • pronto‌: WiFi基带镜像,处理WiFi通信。
  • rpm‌: 资源电源管理固件,管理低功耗状态。
  • tz‌: TrustZone安全环境,提供安全启动环境。
  • aboot‌: Android引导加载程序,负责加载内核。
  • sbl‌: 基带处理器初级引导加载程序,负责初始化硬件。
  • non-hlos‌: 包含多个BP侧镜像的复合分区,如modem、ADSP、Wcnss、Venus等,通过NON-HLOS.bin文件加载。

5)MTK BP侧镜像

BP侧分区由基带处理器管理,包含基带固件和安全相关的镜像,这些分区通常需要MTK的安全启动机制和签名验证。

  • modem‌: 基带固件,处理通信协议和无线信号。
  • dsp‌: 数字信号处理器镜像,处理音频和视频信号。
  • adsp‌: 高通音频数字信号处理器镜像,处理音频相关任务。
  • wcnss‌: WiFi和蓝牙基带镜像,处理无线通信功能。
  • venus‌: 视频编解码器镜像,处理视频解码和编码。
  • mss‌: Modem SubSystem,基带子系统镜像。
  • pronto‌: WiFi基带镜像,处理WiFi通信。
  • rpm‌: 资源电源管理固件,管理低功耗状态。
  • tz‌: TrustZone安全环境,提供安全启动环境。
  • sbl‌: 基带处理器初级引导加载程序,负责初始化硬件。
  • aboot‌: Android引导加载程序,负责加载内核。
  • non-hlos‌: 包含多个BP侧镜像的复合分区,如modem、ADSP、Wcnss、Venus等,通过NON-HLOS.bin文件加载。

3、Secure Boot机制

针对BP侧镜像的安全校验和镜像签名,就是所谓的Secure Boot机制。

因为这些都是厂商自己设计,通常的做法是这些厂商在自己的芯片内部是有一个硬件单元的,只能一次烧录,是不可逆的,烧录的东西和root key密切相关,efuse被熔断了,那么root key就不能改变,同时这块芯片只能运行和root key相关的key签名的镜像。

通常secure boot也是非对称式加密算法,因此也会有公钥和私钥

详细参考https://blog.csdn.net/qq_27672101/article/details/156652434

4、Aosp AVB机制

针对AP侧镜像的安全校验和镜像签名,就是所谓的google avb机制。

因为AP侧镜像基本上都是由Google AOSP设计,因此需要使用Google的AVB(Android Verified Boot)特性来保证镜像的完整性和真实性。

详细参考https://blog.csdn.net/qq_27672101/article/details/150934415

三、运行时安全机制

本篇不再是围绕镜像分区的编译、镜像分区的校验的维度来进行说明。本篇主要站在系统已经成功启动之后,aosp使用了哪些机制来保证我们的系统是安全的,系统运行的应用程序是安全的,例如支付宝这类应用的密钥数据是安全的。

1、安全架构

首先要介绍的就是android安全架构,这不是一个机制,这是一套架构,贯穿整个android始终,先提供如下一张架构图。

详细的可以参考https://blog.csdn.net/qq_27672101/article/details/156652343

2、DAC机制

3、Selinux机制

4、应用签名

http://www.cnnetsun.cn/news/1400321.html

相关文章:

  • oapi-codegen合规性:生成SOC2/ISO27001审计代码
  • RPA-Python与Netlify集成:现代网站托管自动化终极指南
  • ParadeDB与C集成:使用Npgsql实现搜索功能的完整指南
  • BioLogic_STM32:面向Blue Pill的裸机I/O控制库
  • FileZilla Server安装避坑指南:从NAT穿透到被动模式设置
  • 云容笔谈在自媒体落地:日更国风头像/壁纸/配图,提效300%内容生产
  • 专利分析必备!用Selenium自动化下载国家知识产权局年报Excel(2008-2023完整数据集)
  • BootstrapBlazor水波纹按钮:打造令人惊艳的点击交互效果
  • DeepSeek-V3.1 FP8量化技术解析:UE8M0数据格式应用
  • Splitflap串行通信协议详解:从文本模式到Protobuf二进制协议
  • 特征值可视化指南:用Matplotlib动态演示PCA降维全过程
  • Scrapy-Redis监控与统计:实时掌握爬虫运行状态的终极指南
  • L57;TWPKHFDKHTFYSILKLGKH
  • Silero Models学术论文引用指南:研究影响力深度分析
  • 软件耦合度优化:设计低耦合的Qwen3微服务接口
  • 文脉定序系统API鉴权与网络安全配置最佳实践
  • 如何优化xyflow打包体积:完整指南与最佳实践
  • 50projects50days面试通关指南:从HTML/CSS/JS实战项目掌握前端面试核心考点
  • CHORD-X视觉战术指挥系统内网穿透部署方案:安全远程访问与指挥
  • 5分钟搞懂SMILES:化学小白的分子结构速记指南(附实战案例)
  • 5分钟搞定!用千帆AppBuilder零代码搭建专属知识问答机器人(附ERNIE-Bot 4.0配置技巧)
  • 终极指南:如何通过自动化检查提升Bootstrap Datepicker代码质量
  • Sqoop1.4.7实战:5分钟搞定MySQL到HDFS数据迁移(附常见坑点)
  • Pixel Dimension Fissioner降本提效:替代商用文案工具的开源像素化替代方案
  • FactoryBot 终极指南:7个实用技巧构建可复用测试套件
  • 如何使用Amber语言实现安全的数据保护策略
  • PsiSwarmV8_CPP:面向微型机器人的裸机级C++硬件抽象库
  • 嵌入式天气API开发:OAuth1.0a与JSON解析实战
  • rnnoise中的多精度计算:平衡性能与精度的终极指南
  • MangoHud与游戏控制器宏:一键切换监控预设的终极指南