Skip to content

应用安全模型

鸿蒙应用沙箱、签名验证、应用隔离机制。


1. 应用沙箱

1.1 沙箱架构

应用沙箱(Sandbox)
┌─────────────────────────────────────┐
│  应用 A                              │
│  ┌─────────────┐                    │
│  │ 私有数据     │                    │
│  │ /data/storage/el2/base/com.app.A │
│  │ - files/    │                    │
│  │ - cache/    │                    │
│  │ - rdb/      │                    │
│  │ - preferences/                   │
│  └─────────────┘                    │
│  无法访问应用 B 的数据               │
└─────────────────────────────────────┘

┌─────────────────────────────────────┐
│  应用 B                              │
│  ┌─────────────┐                    │
│  │ 私有数据     │                    │
│  │ /data/storage/el2/base/com.app.B │
│  └─────────────┘                    │
└─────────────────────────────────────┘

1.2 沙箱特性

| 特性 | 说明 | |---|-|-| | 数据隔离 | 应用间数据不可见 | | 权限隔离 | 每个应用独立权限集 | | 进程隔离 | 应用运行在独立进程 | | 文件隔离 | 沙箱外文件需授权访问 |


2. 应用签名

2.1 签名验证流程

应用开发

生成密钥对(私钥 + 证书)

使用私钥签名应用

应用安装时验证签名

验证通过 → 安装成功
验证失败 → 安装拒绝

2.2 签名配置

json5
// build-profile.json5
{
    "app": {
        "signingConfigs": [
            {
                "name": "release",
                "type": "HarmonyOS",
                "material": {
                    "certpath": "/path/to/release.cer",
                    "storePassword": "password",
                    "keyAlias": "alias",
                    "keyPassword": "password"
                }
            }
        ],
        "products": [
            {
                "name": "release",
                "signingConfig": "release"
            }
        ]
    }
}

2.3 签名权限

签名权限(signature permission):
├─ 同签名应用自动授予
├─ 用于应用间共享数据/能力
└─ 防止恶意应用冒充

3. 应用隔离

3.1 进程隔离

每个应用独立进程:
├─ 应用崩溃不影响其他应用
├─ 内存隔离
├─ CPU 资源隔离
└─ 文件描述符隔离

3.2 能力隔离

typescript
// 应用只能访问自己声明的能力
import { bundleManager } from '@kit.ArkTS'

// 获取自身信息
let bundleInfo = await bundleManager.getBundleInfoForSelf({
    flags: bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION
})

console.log('应用名:', bundleInfo.name)
console.log('TokenID:', bundleInfo.appInfo.tokenId)

// 无法直接访问其他应用的私有数据
// 必须通过公开 API 或授权

4. 安全启动

4.1 启动链验证

BootROM → BootLoader → Kernel → System → Application
    ↓          ↓           ↓          ↓          ↓
签名验证   签名验证   签名验证   签名验证   签名验证

5. 面试高频考点

Q1: 鸿蒙应用沙箱的作用?

回答:数据隔离、权限隔离、进程隔离。每个应用只能访问自己的沙箱数据,无法访问其他应用数据。

Q2: 应用签名验证流程?

回答:开发时生成密钥对并签名 → 安装时系统验证签名 → 验证通过才允许安装。


🐱 小猫提示:应用安全记住 "沙箱隔离、签名验证、进程隔离、能力隔离"