一个医疗保健初创公司可能会花几个月的时间设计一个安全的移动工作流程,然后发现一个越狱的测试者通过截图和本地缓存暴露了患者记录。与此同时,团队的Electron管理面板的调试构建可能会带有一个API密钥嵌入到其捆绑包中。两种情况都涉及加密,但也没有通过添加一个加密库来解决问题。
应用加密是一个系统的决定。 团队必须决定数据在存储时如何被保护,如何在系统之间移动,密钥存放在哪里,攻击者可以从应用捆绑包中学习什么,运行时如何响应篡改,以及有签名更新保留那些保证。一个有用的起点是 应用风险评估 将敏感数据、信任边界、客户端能力和可能的滥用路径映射到一起。
移动和跨平台应用面临着一个异常暴露的环境。设备离开办公室,构建可以被复制或侧载,局部文件可能被检查,逆向工程工具广泛可用。下面的部分逐步构建模型,从存储和传输到平台密钥保护、客户端机密性、合规性和发布操作。
目录
- 为什么应用加密比以往任何时候都更重要
- 数据在休眠状态下的加密与在传输过程中的加密
- 保护Code、数据和机密信息
- iOS、Android、Capacitor和Electron的平台考虑
- 密钥管理和客户端保密性的局限性
- 监管和合规性影响
- 常见陷阱和加固的最佳实践
- 将所有内容都纳入您的加密计划
为什么应用加密比以往任何时候都更重要
通常,Web应用程序会将敏感逻辑和机密材料保留在组织控制的基础设施中。移动应用程序将code、资产、配置和数据处理逻辑发送到属于他人的设备。Electron应用程序有一个类似的问题,因为其JavaScript、资源和打包文件可以被运行该应用程序的用户检查。
这改变了安全边界。 客户端很有用,但它不是一个保险箱。 加密可以保护信息免受随意检查,并使盗窃的文件更不值得一提,但应用程序仍需要访问明文。攻击者可以控制设备,观察输入、检查内存、监控API或修改执行。
考虑医疗保健的例子。对数据库进行加密可能会保护从磁盘复制的记录,但它不会阻止被破坏的运行时将解密的记录显示给恶意进程。对网络流量进行加密可能会保护临床人员的请求在传输到后端时,但它不会保护本地导出后应用程序将其保存在未受保护的缓存中。压缩的JavaScript中隐藏的密钥如果应用程序必须使用它,则仍然可以恢复。
实践规则: 将每个客户端保护视为减少暴露的层,而不是证明设备可信赖。
完整的设计通常结合了:
- 静止保护,适用于数据库、文件、缓存、偏好和下载的文档。
- 在途保护,适用于请求、同步、更新传递和服务到服务通信。
- 平台密钥存储,以便不将加密密钥留在普通应用程序文件中。
- Code和运行时保护包括混淆、完整性检查、反调试措施和适当的证书验证。
- A控制更新频道因为签名的发布必须保留早期版本中构建的安全假设。
- 文档化的合规控制包括所有权、证据、监控和响应程序。
合规要求会带来压力,但也会提高工程实践的纪律性。GDPR、HIPAA、PCI DSS和SOC 2并不会将加密转化为通用复选框。它们要求团队了解保护的内容、控制密钥的方式以及如何证明安全措施正常运作。
数据在传输过程中加密与数据在存储过程中加密
想象一下寄送一份机密文件。封闭的信封在文件传递过程中保护了信息。一旦收件人打开信封,文件仍然需要一个锁定的文件柜。 传输过程中的加密保护了数据的移动。存储过程中的加密保护了数据的存储。 信封和文件柜解决了不同的问题。
存储过程中的加密
存储过程中的加密适用于数据存储在设备、服务器磁盘、备份、数据库或可移植存储器上。移动平台上,操作系统保护可能会自动加密设备的一部分,但您的应用程序仍然需要选择安全的存储位置、访问控制和密钥使用。敏感的应用程序文件应该使用平台支持的加密和密钥存储在受保护的存储器中,而不是将密钥写在加密数据旁边。
这里,认证加密很重要。 OWASP 建议使用平台加密 API、硬件背后的密钥存储(可用时)以及认证模式,如 或 ,这些模式不仅可以检测篡改,还可以隐藏内容。同样的指导建议保护敏感数据既在静止状态,又在传输状态,放在内部存储中,并避免使用专有加密算法,而是使用平台实现(OWASP 移动应用安全速查表).

实践细节会根据平台不同而有所不同。 iOS 提供数据保护和密钥链服务。 Android 提供 Keystore 后端选项和可以帮助管理加密文件的库。 桌面应用程序依赖于操作系统凭据和本地访问控制。 与 Chromium 嵌入式框架环境中工作的团队也可以查看 CEF 文档存储最佳实践 来检查加密器之外的存储边界。
传输加密
在传输过程中进行加密保护请求和响应数据,防止在网络传输过程中被中间人窃听或篡改。正确配置的TLS连接有助于防止中间人读取或修改应用程序流量,但TLS只有在客户端正确验证服务器并后端提供可信证书时才有效。禁用证书校验、不安全的回退或意外的明文端点会破坏预期的保护。
Certificate pinning can add another verification layer in selected mobile scenarios, especially where the team controls certificate operations and has a recovery plan for rotation. It isn’t a replacement for correct TLS, and an incorrect pin can block legitimate users. Teams building with Capacitor can examine SSL pinning for Capacitor apps 在选择是否适合应用程序的运营权衡之前。
数据传输安全无法保护从丢失设备复制的数据库。存储加密无法保护通过被破坏连接提交的密码。应设计两条路径,然后测试明文出现的点,包括日志、截图、临时文件、崩溃报告、剪贴板内容和同步队列。
保护应用中的Code、数据和机密
团队经常将“加密”、“混淆”和“加固”这三个词混为一谈,好像它们描述的是同一个控制措施。然而,它们实际上是针对不同攻击行为的。将它们混淆会产生误解。
混淆和压缩 让 code 更难读懂。它们可以增加克隆应用程序或理解业务逻辑的成本,但它们并不会使应用程序无法访问的秘密不可用。一个 API 密钥在 JavaScript 包中,一个签名凭证在存档中,或者一个由可预测函数重构的值仍然可以被提取。Hermes 字节码和 Electron 框架的存档可能比源文件更不方便地检查,但打包并不是秘密的同义词。 asar 存档可能比源文件更不方便地检查,但打包并不是秘密的同义词。
数据加密 保护用户内容和本地凭证在存储时。它应该使用平台加密API和Keychain、Keystore、Secure Enclave、StrongBox或等效的操作系统设施中的密钥。OWASP 的加密测试指南警告不要将密码或密钥放在源 code 中,并强调剩余在客户端的秘密可以被提取(OWASP MASTG 加密测试).
运行时保护 寻找条件,提高了被篡改或自动滥用的可能性。Jailbreak 和 root 信号、调试器检测、应用程序完整性检查、证明和证书验证可以使攻击更难或提供响应信号。没有一种方法可以使设备可信赖。一个决心的攻击者可以修改检查,而一个合法用户可能会触发一个他uristics。
| 保护层 | 它保护什么 | 它不能阻止什么 |
|---|---|---|
| Code 混淆 | 应用程序逻辑的可读性和非正式克隆 | 应用程序可访问的机密信息提取 |
| 数据加密 | 选定存储数据的机密性和完整性 | 合法解密后数据明文暴露 |
| 运行时保护 | 一些篡改、调试和自动滥用 | 掌控运行时的高手 |
安全设计让高价值机密存储在服务器上,给客户端提供有限权限的凭证,并只对需要离线访问的本地数据进行加密。token存储值得单独评估其过期、注销、刷新行为以及平台绑定。该 移动开发者的安全token存储指南 在将这些决策转化为实现要求时是有用的。
天真的方法失败,因为它们保护了机密的外观而不是机密的生命周期。将值用XOR进行源code中的操作,分割密钥到多个文件中,或者依赖于JavaScript的混淆并不能改变事实,即正在运行的应用程序必须重构并使用值。
iOS、Android、Capacitor和Electron的平台考虑
由于每个平台暴露的密钥存储、API、隔离边界和恢复机制不同,相同的加密设计在不同运行时下表现出不同的行为。跨平台抽象可以简化应用程序code,但无法消除这些差异。
原生移动平台
在iOS上,Keychain提供了保护凭证存储,而 安全环境 可以将某些密钥操作隔离在主应用程序处理器之外。应用程序仍需要选择与其可用性要求相匹配的访问控制,例如数据是否应在设备认证后可用,还是仅在用户认证后可用。
Android Keystore提供了支持设备上的硬件背后的路径,而 StrongBox 可以提供更强的隔离环境。Android团队还应考虑设备能力、备份行为、认证要求和证明信号。硬件支持并不均匀,因此应用程序需要定义的fallback策略,而不是假设每个设备都提供相同的保护。
跨平台壳
Capacitor应用程序通过桥接结合了webcode和原生平台功能。该桥梁是一个安全边界,而不是一个方便层。 localStorage, IndexedDB和普通web偏好项不应默认作为加密机密存储。团队必须显式选择原生存储插件或实现一个使用平台保护密钥设施的原生模块。
Electron 有不同的威胁模型。其渲染器处理 web 内容,而主进程具有更广泛的特权,因此敏感操作应避免在暴露的渲染器中执行。Electron 的 safeStorage 可以使用操作系统凭据保护,但结果的安全性取决于宿主操作系统、用户帐户、桌面配置和进程隔离。关键并非自动在同样的方式中在移动平台中隔离保护的密钥。
| 平台 | 密钥存储 | 加密 API | 默认威胁模型 |
|---|---|---|---|
| iOS | Keychain 和,支持的区域,Secure Enclave | Apple 平台加密和数据保护 | 设备和应用程序是分开的,但一个被破坏的设备或运行时可以观察到使用 |
| Android | Keystore 和,支持的区域,StrongBox | 安卓平台加密和Jetpack安全组件 | 设备的硬件和软件能力各不相同 |
| Capacitor | 原生存储通过插件或自定义桥接code | Web API与原生平台API | Web资产在原生壳内运行,不会自动继承安全存储 |
| Electron | __CAPGO_KEEP_0__ safeStorage |
OS凭证通过API | Node和Chromium兼容的应用API |
渲染器暴露和宿主级访问是核心问题 团队应该根据目标平台来记录行为,而不是描述产品为“所有平台加密”。Capacitor的平台差异方法 帮助框架桥梁作为一个地方,平台特定决策必须保持可见。
客户端端密钥的局限性
加密保护数据,只有密钥管理保护密钥时才有效。一个有用的生命周期有五个阶段: 生成、分发、存储、轮换和撤销。每个阶段都有不同的故障模式。
使用可信的平台或服务器加密API生成密钥。通过认证的协议分发它们,而不是将它们嵌入到包中。将它们存储在保护的平台设施中,可能的话。轮换它们,当政策、风险或加密要求要求时。通过服务器控制的授权撤销访问,当设备、帐户或会话不再应该解密数据时。
客户端比基础设施弱,因为用户控制设备并且可以潜在地检查应用程序状态。客户端持有的密钥在离线数据上保护由用户派生的口令时有意义,假设产品接受恢复和可用性后果。它在API令牌上远远不够,这个令牌授予广泛的后端访问。攻击者提取了令牌,围绕本地数据库的加密就不会限制令牌可以远程做什么。
加密数据分离了数据加密密钥和主密钥。应用程序可以使用一个短期的数据密钥来加密一个本地对象,而一个服务器端的密钥管理服务或HSM背后的系统保护了包装密钥。一个远程密钥释放的设计可以要求一个经过身份验证的设备、用户、策略决策或证明信号在释放解密所需的材料之前。这些模式并不能使一个被破坏的客户端安全,但它们减少了设备上永久性权威的程度。

OWASP 将本地敏感数据识别为包括个人识别信息、加密材料、机密和API密钥。它还将加密与生命周期控制联系起来,如安全的本地存储、密钥轮换和使用后零化。这个架构原则很简单:
保持高价值的机密在团队控制的系统上。给客户端只提供当前任务所需的最小权威。
对于发布系统,密钥管理也适用于更新签名和交付。一个团队应该定义谁可以签署一个捆绑包、签名凭证的存放位置、访问审计和一个被破坏的签名凭证替换的方式。关于 如何使用密钥管理来保护OTA更新 可以帮助将应用程序加密与更新生命周期联系起来。
法规和合规性影响
[
GDPR Article 32 treats encryption as an appropriate technical measure for reducing risk, as reflected in the European Union’s GDPR text. The obligation is risk-based, so the organization still needs to connect its safeguards to the nature of the personal data and processing environment. A mobile app that handles medical information, identity data, or financial records needs a defensible explanation of local storage, transport, access, and incident response.
HIPAA’s Security Rule treats encryption for electronic protected health information as an addressable safeguard rather than a universal technical checkbox. That means a covered entity or business associate should assess whether encryption is reasonable and appropriate, document the decision, and apply alternative measures where it doesn’t implement the safeguard. The HHS Security Rule guidance provides the governing context.
[
SOC 2 审核人员关注的是控制是否正常运作的证据。 这些证据可能包括密钥管理策略、TLS 配置、加密算法清单、访问日志、变更审批、事件记录、测试结果以及证明签名版本遵循预期流程的证据。 有了文档的控制但没有监控,可能无法证明有效运作。

共同点是 可证明性. 在实施应用加密时,建立证据链,而不是在审计前一周。
常见陷阱和加固最佳实践
大多数加密失败都是普通的工程决策。 开发者需要在启动时获得令牌,团队希望离线搜索感觉快,或者发布过程需要快速分发热修复。 风险出现在捷径成为信任模型的永久部分时。
最近的移动风险研究报告指出 超过60%的评估应用使用了不安全或过时的加密算法来保护敏感数据而 大约三分之一的应用重新使用了初始化向量 并且 20% 使用固定的静态值那些发现使问题从“应用是否加密?”转变为“实现是否能在实际使用中保留机密性和完整性?”移动应用风险的SC World报告)
| 常见陷阱 | 加固实践 |
|---|---|
| 在源代码、字节码或捆绑包中硬编码API密钥或加密密钥 | 将高价值凭证保留在服务器端并使用受保护的平台存储来存储设备范围的材料 |
| 在SQLite数据库中进行加密,而留下明文缓存、导出、日志或备份 | 对所有敏感数据的副本进行清点,并将临时工件应用相同的存储策略 |
| 将刷新令牌存储在普通的Web存储中 | 使用平台背后的凭证存储、缩小令牌范围并支持服务器端撤销 |
| 编写自定义加密或发明密钥混淆 | 使用经过验证的平台API和认证加密模式 |
| 禁用证书验证以解决连接问题 | 正确配置TLS,然后评估使用测试恢复过程的钉住 |
| 将最小化视为机密保护 | 从客户端code中删除机密信息并仅使用混淆以提高逆向工程成本 |
| 省略应用完整性检查和证明信号 | 在适当情况下验证发布身份并使用信号调整访问或触发审查 |
| 允许未签名或弱控制的更新 | 签署发布artifact,保护签名凭证并监控更新结果 |
一份独立的威胁报告描述了间谍软件团队针对Signal和WhatsApp账户的攻击,通过冒充应用程序并滥用手机底层 报告指出,2025年上半年与2024年上半年相比,安卓智能手机攻击增加了29% (《The Register》对CISA相关报告的报道. The lesson isn’t that encryption failed. Attackers often choose the device, account, session, or update path because those layers can bypass the protected ciphertext.
将每个加固的实践转化为自动发布规则。CI可以拒绝已知的秘密模式,标记自定义加密code,验证签名步骤,检查包内容,并在存储或传输设置发生变化时要求安全审查。目标是在依赖项被发布之前捕获错误的决定。
将所有内容整合到您的加密计划中
加密计划应该像工程合同一样写。它必须说明应用程序保护什么,密钥存放在哪里,哪些组件可以看到明文,以及团队如何证明控制措施在每次发布后仍然有效。
从以下开始 数据分类. 标记记录、令牌、文档、日志、缓存、备份和分析字段根据敏感性和保留需求进行分类。尽量减少本地副本,选择算法之前。数据从未到达设备就不需要设备存储设计。
然后记录存储和传输决策:
- 休眠方案: 选择认证加密、平台管理的密钥存储、受保护的文件位置、备份行为和删除或零化处理。
- 传输方案: 定义TLS配置、证书验证、端点策略和是否适合威胁模型的固定。
- __CAPGO_KEEP_0__: 记录生成、访问、分发、轮换、撤销、恢复和紧急替换程序。
- Code 和运行时控制: 决定混淆、完整性检查、证明、调试器检测和敏感屏幕保护的贡献。
- 审计证据: 捕获配置清单、访问日志、发布批准、测试结果、事件记录和异常。
顺序很重要。数据分类决定需要保护的内容。这个决定会影响存储和密钥保管。运输和更新控制然后会保留信任服务和客户端之间的路径。Capacitor 和 Electron 团队应该在每个目标上重复审查,因为一个本机 iOS 密钥存储、一个 Android 硬件背后的选项、一个浏览器存储 API 和一个桌面凭证设施不会提供相同的保证。

更新频道应该在这个计划内,而不是在计划之后。一个签名的发布可以保留 code 完整性,而控制的目标、回滚保护和发布可观察性可以帮助团队响应当一个脆弱的构建或配置到达用户时。每当应用程序添加离线数据、更改其存储插件、引入一个新的后端权限或改变如何签名和分发更新时,都应该审查计划。
Capgo 为 CapacitorJS 和 Electron 应用程序提供了签名的实时更新,支持 JavaScript code 和资产的加密包,控制发布渠道,回滚保护和设备级更新可观察性。访问 Capgo 到评估如何控制的更新路径支持您的应用程序加密和发布管控计划。