コンテンツにジャンプ

暗号化

Capgoは、JavaScript codeやアセットを保護するために、エンドツーエンドの暗号化を提供します。

Capgoの暗号化システムは、業界標準の暗号化方法を使用して、不正アクセスからバンドルを保護します。暗号化が有効になっている場合、開発環境を離れる前にバンドルは暗号化され、ユーザーのデバイスでアプリが解読するまで暗号化されます。

実際にどの部分が保護されているか: Capgoは、OTAシステムがアップデートを署名するのみの場合と異なり、アップロードされるバンドルを暗号化して保存し配信します。この方法により、ストレージまたはトランジット中のバンドル内容を無断に閲覧することができなくなり、しかも、有効な暗号化されたアップデートを発行するには、プライベートキーを持つ者だけが可能です。 暗号化の必要性 暗号化の必要性

暗号化のしくみ

「暗号化のしくみ」

Capgo は、RSA と AES の暗号化を組み合わせたハイブリッド暗号化アプローチを使用して、最適なセキュリティとパフォーマンスを実現します:

Capgo の暗号化フロー

  • プライベートキー: 開発環境で安全に生成および保存されます (暗号化に使用)
  • パブリックキー: プライベートキーから派生し、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に移行する必要があります

Encryption V1 (Deprecated)

暗号化の設定

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 の公開鍵を保存してください (必須)」

あなた あなたは 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"

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

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

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

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

暗号化されたバンドル

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

アップロードプロセス中に暗号化するのが一番簡単な方法です。

ターミナル画面
# 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. ターミナル画面

    Copy to clipboard
    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. アプリケーション設定を更新 新しい公開鍵を使用して

  4. アップデートされたアプリケーションをデプロイ 新しい鍵で暗号化されたバンドルをアップロードする前に

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

セクション “セキュリティのベストプラクティス”
  • プライベート鍵を 環境やチームメンバー間で共有しない
  • 異なる環境 (開発、ステージング、生産) に 異なる鍵を使用する
  • 鍵を定期的に回転する (推奨: 6-12 か月ごと)
  • 鍵を安全に保存する 適切な鍵管理システムを使用して
  • 常に検証する 復号化後、パッケージの完整性を確認する
  • 不審なダウンロードパターンやエラーの監視 すべてのパッケージURLでHTTPSを使用する (モバイルアプリ用必須)
  • __CAPGO_KEEP_0__ __CAPGO_KEEP_0__
  • 暗号化失敗時の適切なエラーハンドリングの実装 アクセス制御
  • ロールベースのアクセス制御 暗号化キー管理のためのロールベースのアクセス制御
  • 暗号化キーの使用とアクセスを定期的に監査する 暗号化失敗時の適切なバックアップと復元手順の実装
  • Implement proper error handling for decryption failures
  • Access Control Section titled “Access Control”

暗号化失敗:

  • 暗号化に使用した公開鍵と一致するようにプライベート鍵を確認してください
  • 暗号化に使用した ivSessionKey が正しいことを確認してください
  • 暗号化 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

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
  • 古い/遅いデバイスでデバイスのパフォーマンスを監視する

次のステップ

次のステップ