跳过内容

加密

Capgo 为您的应用程序包提供强大的端到端加密,确保您的 JavaScript code 和资产在传输和存储期间受到保护。这一加密系统旨在为您提供对应用程序安全性的完全控制,同时保持实时更新的便利性。

Capgo 的加密系统使用行业标准的加密方法来保护您的包免受未经授权的访问。启用加密时,包在离开开发环境之前会被加密,并且在用户设备上的应用程序解密之前会保持加密状态。

加密保护了什么: 与 OTA 系统相比,只有签名更新,Capgo 加密上传的包之前存储和传递。这保护了包内容在存储或传输期间免受随意访问,并确保只有持有您的私钥的人才能产生有效的加密更新。它 不 使已发布的 Web 资产无法逆向工程:客户端用于解密更新的公钥在应用程序中分发,因此一位坚定的攻击者仍然可以提取它并在足够的努力下检查包内容。

加密的工作原理

加密原理

Capgo 使用混合加密方法,结合RSA和AES加密,实现最佳的安全性和性能:

Capgo 加密流程

  • 私钥: 在开发环境中生成并安全存储(用于加密)
  • 公钥: 从私钥派生并在应用的Capacitor配置中存储(用于解密)
  • 会话密钥: 为每个上传包生成的随机AES密钥
  1. 为每个上传的包生成一个随机的AES会话密钥
  2. 使用AES会话密钥对包进行加密
  3. 计算包的校验和
  4. 使用您的RSA私钥对AES会话密钥和校验和进行加密(创建“签名”)
  5. 存储加密的包和加密的签名

校验和与AES密钥一起加密,以防止篡改。由于只有您的RSA私钥才能创建此签名,且只有相应的公钥才能解密它,因此这确保了AES会话密钥和预期校验和都是真实的,并且没有被攻击者修改。

  1. 您的应用程序下载加密的包和加密的签名
  2. Capgo SDK 使用您的RSA公钥(存储在应用程序中)来解密签名
  3. 这揭示了AES会话密钥和原始校验和
  4. 使用 AES 会话密钥来解密包裹
  5. 对解密包裹计算校验和并与原始校验和进行比较以进行完整性验证

这个过程确保即使攻击者截获了加密包裹,他们也无法修改 AES 会话密钥或提供假校验和,因为他们需要您的私钥才能创建一个有效的签名,这个签名可以被公钥解密

Capgo 与其他平台

Capgo vs Other Platforms
功能Capgo其他 OTA 平台
包裹内容在存储/传输中使用加密;仍然可以通过应用程序二进制文件被一名有决心的逆向工程师检查公开可读
安全方法真正的端到端加密Code 签名仅
隐私等级强大的交付/存储保护;不是反向工程平台可以访问您的 code
保护内容 + 完整性 + 真实性仅完整性 + 真实性

为什么这很重要:

  • Code 加密 仅验证更新未被篡改且来自正确源
  • Capgo 加密 保护 bundle 在存储和传递期间,并使伪造加密更新更加困难,因为攻击者需要您的私钥
  • 逆向工程仍然可能 因为客户端包含用于解密和加载更新的公钥

加密方法

加密方法

Capgo 使用加密 V2 作为标准加密方法:

加密 V2 (当前标准)

加密 V2 (当前标准)
  • 使用 RSA-4096 提供增强的安全性
  • AES-256-GCM用于认证加密
  • 提供完整性验证
  • 更好的性能和安全性

加密 V1(已弃用)

标题:加密 V1(已弃用)
  • 使用 RSA-2048 进行密钥加密
  • AES-256-CBC用于包加密
  • 不再在当前CLI中可用
  • 遗留应用程序使用 V1 必须迁移到 V2

步骤 1:生成加密密钥

context

首先,使用Capgo和CLI生成您的加密密钥。

步骤 1:生成加密密钥
# Generate new encryption keys (creates files in current directory)
npx @capgo/cli@latest key create

终端窗口

  • .capgo_key_v2复制到剪贴板
  • .capgo_key_v2.pub这将创建:

这些文件是在您运行命令的当前目录中创建的。

第二步:保存您的公共密钥到Capacitor配置(必填)

步骤 2:将您的公共密钥保存到Capacitor配置(必填)

您 必须 保存您的公钥到Capacitor配置中,方便您的移动应用程序解密包裹。

终端窗口
# Save public key from file to Capacitor config (required)
npx @capgo/cli@latest key save --key ./.capgo_key_v2.pub
# Or save public key data directly
npx @capgo/cli@latest key save --key-data "$CAPGO_PUBLIC_KEY"

步骤 3:同步Capacitor平台(必需)

步骤 3:同步Capacitor平台(必需)

保存公钥后,您必须 必须 同步Capacitor平台以将更新的配置复制到本机层:

终端窗口
# Sync the platform to copy config to native
npx cap sync

加密包

加密包

方法 1:上传时加密

方法 1:上传时加密

最简单的方法是在上传过程中进行加密:

终端窗口
# Upload with automatic encryption
npx @capgo/cli@latest bundle upload --key-v2
# For external storage, you must encrypt first (see Manual Encryption Workflow below)

方法 2:手动加密工作流

方法 2:手动加密工作流

为了获得更多的控制,您可以手动加密包:

  1. 创建一个 zip 包:

    终端窗口
    npx @capgo/cli@latest bundle zip com.example.app --path ./dist --key-v2
  2. 加密包:

    终端窗口
    npx @capgo/cli@latest bundle encrypt ./com.example.app.zip CHECKSUM_FROM_STEP_1
  3. 上传到您的存储(例如 S3)并注册到 Capgo:

    终端窗口
    # First upload the encrypted bundle to your storage (e.g., AWS S3)
    aws s3 cp ./encrypted-bundle.zip s3://your-bucket/encrypted-bundle.zip
    # Then register with Capgo using the external URL
    npx @capgo/cli@latest bundle upload --external https://your-storage.com/encrypted-bundle.zip --iv-session-key IV_SESSION_KEY_FROM_STEP_2

密钥管理

密钥管理部分

安全存储密钥

安全存储密钥部分

私钥选项:

  1. 基于文件(本地开发):

    终端窗口
    # Key stored as .capgo_key_v2 file in project root
    npx @capgo/cli@latest bundle upload --key-v2
  2. 环境变量(CI/CD):

    终端窗口
    # Store in environment variable for CI
    export CAPGO_PRIVATE_KEY="$(cat .capgo_key_v2)"
    npx @capgo/cli@latest bundle upload --key-data-v2 "$CAPGO_PRIVATE_KEY"

公钥设置(必需):

终端窗口
# Must save public key to Capacitor config for mobile app
npx @capgo/cli@latest key save --key ./.capgo_key_v2.pub

生产环境:

  • 将私钥存储在安全的密钥管理服务(AWS KMS,Azure Key Vault 等)中
  • 使用 CI/CD 秘密管理私钥
  • Never commit private keys to version control

Key Usage:

  • 私钥: 由CLI用于在打包上传时进行加密(保持安全)
  • Public Key在应用配置中存储,设备端进行解密(安全可提交)

在私钥被泄露后旋转

Rotate after private key compromise

当私钥被怀疑或确认被破坏时,应旋转密钥 pair。 不需要定期轮换。 这是一个本地密钥迁移,而不是仅限 OTA 的更改。

  1. 生成一个替代密钥pair:

    终端窗口
    npx @capgo/cli@latest key create
  2. 保存替换公钥到您的Capacitor配置:

    终端窗口
    npx @capgo/cli@latest key save --key ./.capgo_key_v2.pub
  3. 同步并发布一个原生版本: 运行 npx cap sync然后将包含替换公钥的新原生应用版本分发给用户。

  4. 目标新原生版本: 仍在运行旧原生二进制文件的设备无法解密使用替换密钥加密的更新。使用 版本目标 来限制替换密钥捆绑包仅在新原生版本中更新,而其他设备则通过商店或 MDM 更新。

  5. 切换您的上传密钥: 一旦原生版本发布后,替换私钥在 CI 中替换,并只上传包含替换公钥的原生版本捆绑包给新版本的设备。

安全最佳实践

安全最佳实践

密钥安全

密钥安全
  • 绝不共享私钥 在环境或团队成员之间
  • 为不同环境 (开发、测试、生产) 使用不同的密钥 在被破坏后旋转密钥
  • 在被破坏后旋转密钥在私钥被怀疑或确认被破坏时,应替换密钥对; 日常密钥轮换不是必须的
  • 安全存储密钥 使用适当的密钥管理系统

Bundle 安全

Bundle 安全
  • 始终在解密后验证 检查
  • 下载模式或故障异常 使用 HTTPS
  • 为所有 Bundle URL 在移动应用中必需
  • 实施 正确的错误处理机制以应对解密失败
  • 限制对加密密钥的访问 仅授权人员才能访问加密密钥
  • 使用基于角色的访问 对密钥管理操作进行访问控制
  • 审计 定期审计密钥使用和访问
  • 实施 正确的备份和恢复程序

加密故障排除

Troubleshooting Encryption

常见问题

常见问题

解密失败:

  • 确认私钥与用于加密的公钥匹配
  • 检查 ivSessionKey 是否正确
  • 确保您正在使用Encryption V2(V1已不再支持)

密钥相关错误:

  • 确认私钥格式正确(PEM格式)
  • 确认密钥在存储/传输过程中未被损坏
  • 检查应用配置中密钥的权限是否正确

性能问题:

  • 大型捆绑包可能需要更长的时间进行加密/解密
  • 考虑使用Delta更新来减少捆绑包大小
  • 在解密过程中监控设备性能

调试命令

调试命令

检查加密状态:

终端窗口
npx @capgo/cli@latest app debug

测试加密/解密工作流程:

终端窗口
# Test the complete workflow: zip → encrypt → decrypt → unzip
npx @capgo/cli@latest bundle zip com.example.app --key-v2
npx @capgo/cli@latest bundle encrypt ./com.example.app.zip CHECKSUM --json
npx @capgo/cli@latest bundle decrypt ./encrypted-bundle.zip IV_SESSION_KEY

{'text': '遵守和标准'}

{'text': '“遵守和标准”部分'}

{'text': 'Capgo遵循的加密实现遵守了行业标准:'}

  • AES-256{'text': ': FIPS 140-2 批准的加密算法'}
  • RSA-4096{'text': ': 强大的对称加密算法,用于密钥保护'}
  • AES-GCM 模式{'text': ': 提供了机密性和真实性'}
  • {'text': '安全随机数'}{'text': ': 密钥生成的安全随机数'}

{'text': 'Capgo 适合用于需要遵守:'}

  • GDPR (《通用数据保护条例》)
  • HIPAA (《健康保险可移植性和责任法》)
  • SOC 2 (《服务组织控制 2》)
  • ISO 27001 (《信息安全管理》)

性能考虑

性能考虑

加密开销

加密开销
  • 包大小: 加密包大小约为1-2%的开销
  • 处理时间: 加密/解密过程对性能影响很小
  • 内存使用: 加密/解密操作期间的暂时性增加

优化技巧

优化技巧
  • 使用 Delta 更新来最小化加密数据传输
  • 通过将图像转换为 WebP 格式来优化您的捆绑包大小
  • 在捆绑之前最小化 JavaScript 和 CSS 文件
  • 移除未使用的依赖项和 code
  • 在较旧/较慢的设备上监控设备性能

下一步

下一步

加密 Encryption 为了规划安全性和合规性,连接它与 合规 在合规中, Capgo 安全扫描器 在Capgo 安全扫描器中的产品工作流程 Capgo 安全 在Capgo 安全中的产品工作流程 Capgo 信任中心 在Capgo 信任中心中的产品工作流程,并且 组织安全 在组织安全中的实施细节