コンテンツにスキップ

暗号化

Capgoは、JavaScript codeやアセットを送信および保存する際に保護するために、強力なエンドツーヘンド暗号化を提供します。この暗号化システムは、ライブ更新の便利さを維持しながら、完全な制御を提供するように設計されています。

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

実際に保護される暗号化: OTAシステムが更新のみ署名するのとは異なり、Capgoはアップロードされたバンドルを暗号化して保存し、配信するため、ストレージまたはトランジット中のバンドル内容を無作為にアクセスするのを防ぎ、有効な暗号化された更新を生成するには、プライベートキーを持つユーザーのみが可能です。ただし、配布アプリに使用されるクライアント側の公開鍵を使用して更新を解読するため、実行可能な攻撃者はまだバンドル内容を検査するのに十分な努力を費やすことができます。 暗号化の必要性 暗号化の必要性

暗号化は、特に以下の場合に重要です。

Section titled “How Encryption Works”

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

Capgo暗号化フロー

  • プライベートキー: 開発環境で安全に生成および保存され、暗号化に使用されます。
  • パブリックキー: プライベートキーから派生され、プログラムのCapacitor設定に保存され、復号化に使用されます。
  • セッションキー: 各アップロード用にランダムに生成されるAESキー

2. 暗号化プロセス

2. 暗号化プロセス
  1. 各バンドルのアップロードごとにランダムにAESセッションキーが生成されます。
  2. バンドルはAESセッションキーで暗号化されます。
  3. バンドルのチェックサムが計算されます。
  4. 両方のAESセッションキーとチェックサムは、RSA秘密鍵(署名を作成する)で暗号化されます。
  5. 暗号化されたバンドルと署名が保存されます。

チェックサムは、攻撃者が暗号化されたAESキーを変更できないように、AESキーと一緒に暗号化されます。RSA秘密鍵のみで署名を作成でき、対応する公開鍵のみで署名を復号化できるため、暗号化されたAESキーと予想されるチェックサムが、攻撃者によって変更されていないことを保証します。

3. 復号化プロセス

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

このプロセスにより、攻撃者が暗号化されたバンドルをキャッチしたとしても、AESセッションキーを変更したり、偽のチェックサムを提供したりすることはできません。なぜなら、有効な署名を作成するにはプライベートキーが必要だからです。ただし、パブリックキーは署名を検証できます。

Capgo vs Other Platforms

「Capgo vs Other Platforms」
機能Capgo他のOTAプラットフォーム
バンドルコンテンツ__CAPGO_KEEP_0__のストレージ/トランジット内で暗号化されます。アプリバイナリを使用して、特定の逆向作成者によって検査できます。パブリックに読み取れる
セキュリティーメソッド完全にエンドツーヘンド暗号化Codeの署名のみ
プライバシー レベルプラットフォームが__CAPGO_KEEP_0__にアクセスできますPlatform can access your code
コンテンツ + 完全性 + 認証性完全性 + 認証性のみなぜこれが重要なのか:

__CAPGO_KEEP_0__のストレージ/トランジット内で暗号化されます。アプリバイナリを使用して、特定の逆向作成者によって検査できます。

  • Code署名 アップデートが改ざんされていないか、正しいソースから来ていることを確認するだけです。
  • Capgo暗号化 アップデートが保存され、配信されている間、バンドルを保護し、偽造された暗号化されたアップデートを作成するのは難しくなります。なぜなら、攻撃者はあなたの秘密鍵が必要だからです。
  • アプリが配信された後、クライアントにはアップデートを復号化してロードするために必要な公開鍵が含まれているため、逆アセンブルはまだ可能です。 暗号化方法

Capgo uses Encryption V2 as the standard encryption method:

「暗号化V2 (現在の標準)」のセクション

RSA-4096を使用して、セキュリティを強化しています
  • __CAPGO_KEEP_0__
  • __CAPGO_KEEP_0__で使用されるAES-256-GCMによる認証付き暗号化
  • __CAPGO_KEEP_0__で提供される整合性検証
  • __CAPGO_KEEP_0__のパフォーマンスとセキュリティの向上
  • RSA-2048を使用してキー暗号化
  • __CAPGO_KEEP_0__でAES-256-CBCを使用したバンドル暗号化
  • CLIで利用可能なものではありません
  • V1を使用するレガシーアプリケーションはV2に移行する必要があります

最初に、Capgo CLI を使用して暗号化キーを生成してください。

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

次のようになります:

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

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

モバイルアプリが利用できるように、Capacitor 設定にパブリックキーを保存する必要があります。

Section titled “Step 2: Save Your Public Key to Capacitor Config (Required)”

実稼働環境では、環境変数や鍵管理サービスを使用してプライベートキーを安全に保存し、プロジェクトのセットアップ後からローカルプロジェクトから削除してください。 Step 2: Save Your Public Key to __CAPGO_KEEP_0__ Config (Required) ステップ 2: Capacitor 設定にパブリックキーを保存する (必須)

Section titled “Step 2: Save Your Public Key to __CAPGO_KEEP_0__ Config (Required)”
# 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: Sync Capacitor Platform (Required)

Section titled “Step 3: Sync Capacitor Platform (Required)”

保存した公開鍵を 必要です。 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)

より多くの制御が必要な場合は、バンドルを手動で暗号化できます。

  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. 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シークレット マネージャーを使用してプライベート キーを管理
  • バージョン管理にプライベートキーをコミットしない

Key Usage:

  • プライベートキーCLIがバンドルアップロード中に暗号化に使用する (安全に保管する必要があります)
  • パブリックキー__CAPGO_KEEP_0__がデバイス上で復号化に使用するためにアプリの構成に保存する (安全にコミットすることができます)

プライベートキーが不正確または確実に不正確であると疑われる場合にキーをペアをローテートする

キーをペアをローテートする

プライベートキーが不正確または確実に不正確であると疑われる場合にキーをペアをローテートする必要があります。ルーチン カレンダー ローテーションは必要ありません。このはネイティブ キー マイグレーションであり、OTA のみの変更ではありません。

  1. 新しいキーをペアを生成する:

    ターミナル画面
    npx @capgo/cli@latest key create
  2. Capacitorの設定に置き換えの公開鍵を保存してください:

    ターミナルウィンドウ
    npx @capgo/cli@latest key save --key ./.capgo_key_v2.pub
  3. 置き換えの公開鍵を含む新しいネイティブアプリのバージョンを配布する: Run npx cap sync, その後、置換えの公開鍵で暗号化されたアップデートをデバイスが解読できないようにするために、

  4. 新しいネイティブバージョンをターゲットする: 古いネイティブバイナリを実行しているデバイスは、置換えの鍵で暗号化されたアップデートを解読できない。 バージョン対象設定 を使用して、置換え鍵のパッケージを新しいネイティブバージョンに制限し、残りの艦隊はストアまたはMDMを通じてアップデートすることができます。

  5. アップロードシークレットを切り替える: ネイティブリリースがライブになったら、CIでプライベート鍵を置き換え、置換えの公開鍵を含むネイティブバージョンにのみアップロードするようにしてください。

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

セクション「セキュリティのベストプラクティス」
  • プライベートキーを 環境間やチームメンバー間で共有しない
  • 環境ごとに 開発、ステージング、生産環境用に
  • 漏洩した場合にすぐに交換する__CAPGO_KEEP_0__を使用したキー Pair を置き換えます。プライベート キーが疑わしい場合または確実に侵害された場合。
  • 鍵を安全に保管する 適切な鍵管理システムを使用して

Bundle Security

常に検証する
  • 暗号化解除後にバンドルの整合性を確認する 異常なダウンロードパターンまたはエラーの監視
  • すべてのバンドル URL に HTTPS を使用する (モバイル アプリ用必須) 実装
  • __CAPGO_KEEP_0__ __CAPGO_KEEP_0__
  • __CAPGO_KEEP_0__ 暗号化失敗時の適切なエラーハンドリング
  • 暗号化キーへのアクセスを、承認された従業員のみに制限する ロールベースのアクセス制御
  • 暗号化キーの管理操作に使用する キー使用とアクセスの監査
  • キー使用とアクセスの監査 適切なバックアップと復元手順の実施
  • 暗号化のトラブルシューティング __CAPGO_KEEP_0__

一般的な問題

一般的な問題

デコード失敗:

  • プライベートキーがエンクリプションに使用されているパブリックキーと一致していることを確認してください
  • エンクリプションに使用されている 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 (General Data Protection Regulation)
  • HIPAA (ヘルスインシュアランス ポートエビリティ アカウント アクト)
  • SOC 2 (サービス オーガニゼーション コントロール 2)
  • ISO 27001 (情報セキュリティ マネジメント)

パフォーマンスの考慮事項

パフォーマンスの考慮事項

暗号化オーバーヘッド

暗号化オーバーヘッド
  • バンドルサイズ:暗号化されたバンドルは、約1-2%のオーバーヘッドで大きくなります。
  • 処理時間:暗号化/復号化は最小限の遅延を追加します。
  • メモリ使用量: 暫定的な増加は暗号化/復号化操作中
  • Delta (マニフェスト) の更新を使用して暗号化されたデータの転送を最小限に抑え
  • WebP形式に画像を変換してバンドルサイズを最適化する
  • JavaScriptとCSSファイルをバンドルする前に最小化する
  • 使用されていない依存関係を削除し code
  • 古い/遅いデバイスでデバイスのパフォーマンスを監視する
  • 学び カスタムストレージ __CAPGO_KEEP_0__のインフラストラクチャで暗号化を使用する
  • Explore チャンネル 環境間で暗号化されたバンドルを管理する
  • セットアップ CI/CD統合 暗号化されたデプロイを自動化する

__CAPGO_KEEP_1__が使用している場合 __CAPGO_KEEP_0__ セキュリティとコンプライアンスの計画に役立つため、 コンプライアンス コンプライアンスの実装詳細については Capgo セキュリティ スキャナー Capgo セキュリティ スキャナーの製品ワークフローについて Capgo セキュリティ Capgo セキュリティの製品ワークフローについて Capgo トラスト センター Capgo トラスト センターの製品ワークフローについて 組織のセキュリティ コンプライアンスの実装詳細については