コンテンツにジャンプ

暗号化

Capgo provides robust end-to-end encryption for your app bundles, ensuring that your JavaScript code and assets are protected during transmission and storage. This encryption system is designed to give you complete control over your app’s security while maintaining the convenience of live updates.

__CAPGO_KEEP_0__の暗号化システムは、業界標準の暗号化方法を使用して、不正アクセスからアプリケーションバンドルを保護します。暗号化が有効になると、開発環境から出発するアプリケーションバンドルは暗号化され、ユーザーのデバイスでアプリが暗号化を解除するまで暗号化され続けます。

Install

Capgo’s encryption system uses industry-standard cryptographic methods to protect your bundles from unauthorized access. When encryption is enabled, your bundles are encrypted before leaving your development environment and remain encrypted until they’re decrypted by your app on the user’s device.

実際に保護される暗号化: Capgo でアップロードされたバンドルを暗号化して保存および配信することで、OTA システムと比較してアップデートを署名するだけのシステムとは異なります。この方法では、ストレージまたはトランジット中のバンドル内容を無防備にアクセスするのを防ぎ、有効な暗号化されたアップデートを生成できるのはあなたのプライベート キーを持っている人だけです。 アップデートの暗号化の必要性 アップデートの暗号化の必要性

Capgo uses a hybrid encryption approach that combines RSA and AES encryption for optimal security and performance:

Capgo Encryption Flow

1. シークレット キー生成

セクション: 1. シークレット キー生成
  • プライベート キー: 開発環境で安全に生成および保存され、暗号化に使用されます
  • パブリック キー: プライベート キーから派生され、Capacitor アプリの設定に保存され、復号化に使用されます
  • セッション キー: 各アップロード用にランダムに生成される AES キー
  1. 各アップロードごとにランダムに生成される AES セッション キー
  2. AES セッション キーを使用してバンドルが暗号化されます
  3. バンドルのチェックサムは計算されます。
  4. 両方のAESセッションキーとチェックサムは、RSAの秘密鍵(「署名」を作成する)を使用して暗号化されます。
  5. 暗号化されたバンドルと暗号化された署名は保存されます。

チェックサムはAESキーとともに暗号化され、改ざんを防止します。RSAの秘密鍵でしか署名を作成できず、対応する公開鍵でしか署名を復号化できるため、AESセッションキーと期待されるチェックサムは、攻撃者によって改ざんされていないことを保証します。

  1. アプリは暗号化されたバンドルと暗号化された署名をダウンロードします。
  2. Capgo SDKは、RSAの公開鍵(アプリに保存されている)を使用して署名を復号化します。
  3. これにより、AESセッションキーと元のチェックサムが明らかになります。
  4. AESセッションキーはバンドルを復号化します。
  5. 復号化されたバンドルのチェックサムが計算され、元のチェックサムと整合性を検証します。

このプロセスにより、暗号化されたバンドルを攻撃者がキャッチした場合でも、AESセッションキーまたは偽のチェックサムを変更することはできません。なぜなら、有効な署名を作成するには秘密鍵が必要であり、公開鍵で復号化できるからです。

Capgo vs Other Platforms

「Capgo vs Other Platforms」
FeatureCapgoOther OTA Platforms
Bundle Contentストレージ/トランジットで暗号化されているが、逆エンジニアがアプリのバイナリを使用して検査できるパブリックに読み取れる
Security Method完全なエンドツーヘンド暗号化Code の署名のみ
プライバシー レベル強い配信/保存保護; 反逆用エンジニアリング対策ではないプラットフォームが code にアクセスする
保護内容 + 完全性 + 認証完全性 + 認証のみ

なぜこれが重要なのか:

  • Code の署名 __CAPGO_KEEP_0__ の署名は、更新が改ざんされていないか、正しいソースから来ているかを確認するのみ
  • Capgo の暗号化 保護されたバンドルは、保存および配信されている間、攻撃者がプライベートキーを取得する必要があるため、偽造された暗号化された更新をより困難にします。
  • 逆アセンブルはまだ可能です。 アプリが配信された後、クライアントには更新を復号およびロードするために必要な公開鍵が含まれているため、

Capgoは暗号化V2を標準暗号化方法として使用します:

  • RSA-4096を使用して強化されたセキュリティを提供します。
  • AES-256-GCMを使用して認証付き暗号化を提供します。
  • 整合性の検証を提供します。
  • パフォーマンスとセキュリティの向上
  • RSA-2048を使用して鍵の暗号化
  • AES-256-CBCを使用してパッケージの暗号化
  • 現在のCLIで利用不可
  • V1を使用する古いアプリケーションはV2に移行する必要があります

暗号化の設定

暗号化の設定

Step 1: 暗号化キーを生成する

Step 1: 暗号化キーを生成する

最初に、Capgo CLI を使用して暗号化キーを生成します。

ターミナル画面
# Generate new encryption keys (creates files in current directory)
npx @capgo/cli@latest key create

次のようになります:

  • .capgo_key_v2: 秘密鍵 (この情報を安全に保管してください)
  • .capgo_key_v2.pub: 公開鍵 (アプリで使用)

このファイルは、コマンドを実行したディレクトリで作成されます。

Step 2: Capacitor の公開鍵を保存してください (必須)

セクション: “Step 2: Capacitor の公開鍵を保存してください (必須)”

あなた は、__CAPGO_KEEP_0__ の設定に公開鍵を保存する必要があります。モバイルアプリがパッケージを復号するためです。 save your public key to the Capacitor config so your mobile app can decrypt bundles:

コピー
# 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"

Step 3: Capacitor プラットフォームを同期してください (必須)

セクション: “Step 3: Capacitor プラットフォームを同期してください (必須)”

公開鍵を保存した後、 あなたは は、Capacitor プラットフォームを同期する必要があります。更新された設定をネイティブ層にコピーするためです。

ターミナル画面
# Sync the platform to copy config to native
npx cap sync

暗号化されたバンドル

「暗号化されたバンドル」

アップロード中に暗号化する方法

「アップロード中の暗号化方法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)

zipバンドルを作成:

  1. ターミナル画面

    コピー
    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. Capgoにアップロードして登録する (例: S3)

    ターミナルウィンドウ
    # 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 シークレット管理を使用してプライベート鍵を管理する
  • バージョン管理からプライベート鍵をコミットしない

鍵の使用方法:

  • 秘密鍵: CLIで使用されるアップロード用バンドルエンコードに使用される鍵 (安全に保管)
  • 公開鍵: __CAPGO_KEEP_0__の設定ファイルにデバイス上のデコードに使用される鍵が保存される (コミット可能)

鍵のローテーションを定期的に行うことでセキュリティが向上します:

  1. 新しい鍵を生成する:

    ターミナル画面
    # Navigate to desired directory first, then create keys
    mkdir ./new-keys && cd ./new-keys
    npx @capgo/cli@latest key create
  2. 新しい公開鍵をCapacitorの設定ファイルに保存する:

    ターミナル画面
    npx @capgo/cli@latest key save --key ./new-keys/.capgo_key_v2.pub
  3. アプリケーション設定を更新してください __CAPGO_KEEP_0__の新しい公開鍵を使用して

  4. __CAPGO_KEEP_1__を更新してください __CAPGO_KEEP_2__をアップロードする前に、__CAPGO_KEEP_1__で暗号化されたバンドルをアップロードしてください

セキュリティのベストプラクティス

セクション「セキュリティのベストプラクティス」
  • プライベート鍵を __CAPGO_KEEP_3__間またはチームメンバー間で共有しないでください
  • __CAPGO_KEEP_4__のために異なる鍵を使用してください (dev、staging、production)
  • __CAPGO_KEEP_0__の鍵を定期的に回転する __CAPGO_KEEP_1__ (推奨: 6-12 か月ごと)
  • __CAPGO_KEEP_2__の鍵を安全に保管する __CAPGO_KEEP_3__を使用する
  • __CAPGO_KEEP_4__ 暗号化解除後、ダウンロードパターンやエラーが異常な場合は監視する
  • HTTPSを使用する (モバイルアプリ用には必須)
  • __CAPGO_KEEP_0__ __CAPGO_KEEP_1__
  • 暗号化失敗時の適切なエラー処理を実装する アクセス制御
  • ロールベースのアクセス制御 暗号化キー管理のオペレーションにロールベースのアクセス制御を使用する
  • 暗号化キーの使用とアクセスを定期的に監査する 適切なバックアップと復元手順を実装する
  • Implement proper error handling for decryption failures
  • Access Control Section titled “Access Control”

暗号化失敗の場合:

  • __CAPGO_KEEP_0__のプライベートキーが暗号化に使用されているパブリックキーと一致していることを確認してください
  • __CAPGO_KEEP_1__が正しいことを確認してください ivSessionKey 暗号化 V2 を使用していることを確認してください (V1 はサポートされていません)
  • キー関連のエラーの場合:

プライベート キーの形式が正しいことを確認してください (PEM 形式)

  • キーが保存/転送中に損傷していないことを確認してください
  • __CAPGO_KEEP_0__
  • アプリの設定でキーが適切な権限を持っていることを確認してください。

パフォーマンス問題:

  • 大きいバンドルは暗号化/復号化に長い時間かかる可能性があります。
  • バンドルサイズを削減するために、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

Capgoは、業界標準に準拠した暗号化実装を実施しています。

  • AES-256: FIPS 140-2で承認された暗号化アルゴリズム
  • RSA-4096: 強力な非対称暗号化を使用して鍵を保護
  • GCM モード: 確認性と正当性を両方提供
  • Secure Random: 暗号化に適したランダムな数値生成

これはCapgoを、以下の規制に適合するアプリケーション向けに適切にします:

  • GDPR (一般データ保護規則)
  • HIPAA (健康保険法)
  • SOC 2 (サービス機関制御 2)
  • ISO 27001 (情報セキュリティマネジメント)
  • パッケージサイズ暗号化されたパッケージは、約1-2%のオーバーヘッドで大きくなります。
  • 処理時間: __CAPGO_KEEP_0__を使用することで最小限の遅延が生じる
  • メモリ使用量: 暫定的な増加が暗号化/復号処理の操作中に発生する
  • Delta (マニフェスト) アップデートを使用して暗号化されたデータの転送を最小限に抑える
  • WebP形式に画像を変換することでバンドルサイズを最適化する
  • JavaScriptとCSSファイルをバンドルする前に最小化する
  • 使用されていない依存関係を削除し、codeを使用する
  • 古い/遅いデバイスでデバイスのパフォーマンスを監視する