Capacitor-updater はエンドツーエンドのコード暗号化をサポートするようになりました。コード署名は、エンドユーザーのデバイスで実行されるアップデートが改ざんされていないことを保証し、Capacitor-updaterの標準的なウェブグレードのセキュリティを超える追加の保護レベルを提供します。
Capacitor-updaterのデフォルトのセキュリティ
デフォルトでは、Capgoのセキュリティモデルはウェブホスティングプロバイダーのものに似ています。Capgoは、静止状態で暗号化された状態でアップデートを保存し、現代の暗号を使用してHTTPS経由で提供します。同様に、開発者のコンピュータからアップデートを公開する際は常にHTTPSが使用されます。
Capgoのデフォルトのセキュリティは、SSL LabsのHTTPSテストでA+を獲得しています (https://wwwssllabscom, 2022年11月)
最高水準のウェブホストのように、CapgoはHTTPSを使用してサーバーとエンドユーザーのデバイス間のネットワーク接続のプライバシーと完全性を保護します。これは、ウェブとCapgoを使用するIonicアプリの両方に適した優れたセキュリティレベルです。
クラウドインフラストラクチャのサプライチェーン
Capgoとほとんどのウェブホストに共通していることの一つは、AWS、GCP、または他の一般的なクラウドプロバイダーからの低レベルのクラウドインフラストラクチャ上で動作していることです。これらのクラウドプロバイダーやCapgo、他のウェブホストによって運営されるハードウェアとソフトウェアは、クラウドサプライチェーンの一部です。
クラウドサプライチェーンとそのセキュリティモデルは、多くのウェブサイトとアプリで機能します。クラウドプロバイダーを利用するすべてのウェブ開発者は、そのプロバイダーに信頼を寄せ、アップロードしたファイルが改ざんされることなく実行または提供されることを期待しています。クラウドプロバイダーは、インフラストラクチャのセキュリティを維持するために努力しています。
しかし、明らかにハードウェアとソフトウェアの脆弱性は発見されます。クラウドプロバイダーは、タイムリーなスケジュールで脆弱性を修正し、悪意のあるソフトウェアを積極的に防止し(例:GoogleのSLSA)、多層防御を構築します。実際には、クラウドインフラストラクチャはほとんどのウェブサイトとアプリのセキュリティニーズを満たすことが示されています。しかし、一部のIonicアプリは、自らの脅威モデルに妥協されたクラウドインフラストラクチャを含んでいます。このため、ウェブ上のセキュリティ要件を超える最高のセキュリティ要件を持つこれらのCapacitor JSアプリのために、Capgoにエンドツーエンドのコード署名とCapgo Updates標準プロトコルを組み込みました。
Capgoによるエンドツーエンドのコード署名
Capgoのエンドツーエンドのコード署名は、公開鍵暗号法を使用して、エンドユーザーのデバイスがCapacitorアプリの開発者からの未修正のオリジナルアップデートのみを実行することを保証します。
「エンドツーエンド」とは、このセキュリティが開発者がアップデートを公開する時点から、エンドユーザーのデバイスがアップデートを受信して実行する時点までの流れをカバーすることを意味します。「コード署名」とは、暗号技術と秘密の秘密鍵を使用してコードに「署名」し、後に信頼できる公開鍵を使用して署名を検証することです。
以下は、仕組みを説明するためのシンプルな*スキーマです:
- 実際は複雑、暗号学は難しい
定義:
- AES: 高度な暗号化標準、対称暗号化アルゴリズム、暗号化と復号のための1つの鍵
- RSA: リベスト–シャミール–アデルマン、非対称暗号化アルゴリズム、公開鍵と秘密鍵の2つの鍵を使用
- サイファー: 暗号化されたデータ
- セッション鍵: データを暗号化および復号化するために使用されるAES鍵
- チェックサム: ファイルに対して計算されたハッシュ
- シグネチャ: 私人RSA鍵で暗号化されたチェックサム。公開RSA鍵で検証可能
私たちはAESアルゴリズムを使用してアップデートを暗号化します。アップロードごとにランダムなAES鍵が生成され、その後、AES鍵とチェックサム(以下「シグネチャ」と呼ぶ)は開発者の秘密RSA鍵で暗号化されます。開発者の公開RSA鍵は、アプリ内でAES鍵とシグネチャを復号化(再びチェックサムに戻す)するために使用されます。後に、復号化されたAESキーが更新の復号化に使用され、復号化された更新のチェックサムが計算され、復号化された署名と比較されます。
RSAを大量のデータを暗号化するためには使用できないため、2つの異なる暗号化アルゴリズムを使用します。AESは更新を暗号化するために使用され、RSAはAESキーとチェックサムを暗号化するために使用されます。
これにより、Capgoでさえあなたのバンドルの内容を読むことができません。これは多くの企業顧客によって使用される堅牢なセキュリティモデルです。
更新暗号化 V2 2024-08-27:
- アプリに保存されるキーのタイプを変更しました。これは、プライベートキー(以前は復号化に使用されていた)から公開キー(以前は暗号化に使用されていた)を推測するのを防ぐために行われました。現在、アプリは公開キー(現在は復号化に使用されている)を保存します。
- チェックサムをCRC32アルゴリズムからSHA256アルゴリズムに変更しました。また、バンドルに署名することも開始しました。暗号化V2が設定されている場合、更新は有効な署名を持つ必要があります。これはプラグインによって厳密に強制されています。
- 現在、暗号化V2が設定されている場合、有効な署名を強制しています。 これらの3つの変更は、コミュニティのメンバーによるセキュリティ分析の後に行われました。これは、更新中の暗号攻撃を防ぐためのものです。
暗号化V1を使用していた場合は、V2に移行して新しいセキュリティ機能を活用してください。移行手順に従ってください。
エンドツーエンドのコード署名により、Capgoは「信頼なし」のクラウドインフラストラクチャになります。Capgoのクラウドプロバイダーの1つ、またはCapgo自体がコード署名された更新を変更した場合、エンドユーザーのデバイスはその更新を拒否し、すでにデバイスにある信頼された以前の更新を実行します。
ウェブレベルのHTTPSが多くのアプリに対して十分である一方、一部の大企業はエンドツーエンドのコード署名から得られる追加のセキュリティレベルに魅力を感じます。これらの企業の中には、高額で永続的なトランザクションを発行する金融アプリを作成するものもあります。他の企業には、妥協したクラウドインフラを脅威モデルに含めるCISOがいます。私たちは、これらのユースケースのためにCapgoにエンドツーエンドのコード署名を構築し、より高いセキュリティニーズを持つ企業からのご意見を聞くことに興味があります。
企業顧客向けの始め方
セキュリティを深く重視する大企業やプロジェクトのために、コード署名を簡単に設定して維持できるようにしたいと考えています。そのために、次の機能を提供します:
- 簡単な証明書のセットアップと構成
- Capgoと開発ビルドの両方でのコード署名開発サーバーのサポート
- すべての更新での本番コード署名
Capgoのコード署名はすべての顧客に利用可能です。始めるには、セットアップ手順に従ってください。