Capacitor-updaterは、エンドツーエンドのコード暗号化をサポートするようになりました。コード署名により、エンドユーザーのデバイスで実行される更新が改ざんされていないことを確認し、Capacitor-updaterの標準的なWebグレードのセキュリティに加えて、さらなる保護レベルを提供します。
Capacitor-updaterのデフォルトセキュリティ
デフォルトでは、Capgoのセキュリティモデルはウェブホスティングプロバイダーのそれと似ています。Capgoは更新を保存時に暗号化し、最新の暗号化方式を使用してHTTPS経由で配信します。同様に、開発者のコンピューターからの更新の公開も常にHTTPSを使用します。
CapgoのデフォルトセキュリティはSSL LabsのHTTPSテストでA+スコアを獲得しています(https://www.ssllabs.com、2022年11月)
最高クラスのウェブホストと同様に、Capgoはサーバーとエンドユーザーのデバイス間のネットワーク接続のプライバシーと整合性を保護するためにHTTPSを使用します。これはウェブとCapgoを使用するIonicアプリの両方に適した優れたセキュリティレベルです。
クラウドインフラストラクチャーのサプライチェーン
Capgoとほとんどのウェブホストに共通するもう一つの点は、AWS、GCP、または他の一般的なクラウドプロバイダーからの下位レベルのクラウドインフラストラクチャー上で実行されることです。これらのクラウドプロバイダーとCapgoまたは他のウェブホストが運用するハードウェアとソフトウェアは、クラウドサプライチェーンの一部です。
クラウドサプライチェーンとそのセキュリティモデルは、膨大な数のウェブサイトとアプリに対応しています。クラウドプロバイダーを使用するすべてのウェブ開発者は、そのプロバイダーを信頼し、アップロードしたファイルが改ざんされることなく実行または提供されることを期待しています。そして、クラウドプロバイダーはインフラストラクチャーの安全性確保に尽力しています。
しかし当然ながら、ハードウェアとソフトウェアの脆弱性は発見されます。クラウドプロバイダーは適時にスケジュールで脆弱性を修正し、悪意のあるソフトウェアを積極的に防止し(例:Google’s SLSA)、多層防御を構築しており、実際にクラウドインフラストラクチャーはほとんどのウェブサイトとアプリのセキュリティニーズを満たしています。ただし、一部のIonicアプリは、脅威モデルに侵害されたクラウドインフラストラクチャーを含めています。これらのウェブを超える最高のセキュリティ要件を持つCapacitor JSアプリのために、CapgoとCapgo Updates標準プロトコールにエンドツーエンドのコード署名を組み込みました。
Capgoによるエンドツーエンドコード署名
Capgoのエンドツーエンドコード署名は、公開鍵暗号方式を使用して、エンドユーザーのデバイスがCapacitorアプリ開発者からの未変更の元の更新のみを実行することを保証します。
「エンドツーエンド」とは、開発者が更新を公開してから、エンドユーザーのデバイスが更新を受信して実行するまでの流れをカバーするセキュリティを意味します。「コード署名」は、暗号化と秘密の秘密鍵を使用してコードに「署名」し、後で信頼された公開鍵を使用して署名を検証することです。
以下は、その仕組みを説明する簡単な*スキーマです:
- 実際には複雑で、暗号化は難しい
定義:
- AES:Advanced Encryption Standard、対称暗号化アルゴリズム、暗号化と復号化に1つの鍵を使用
- RSA:Rivest–Shamir–Adleman、非対称暗号化アルゴリズム、2つの鍵を使用:公開鍵と秘密鍵
- Cypher:暗号化されたデータ
- セッションキー:データの暗号化と復号化に使用される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のクラウドプロバイダーやCapgo自体がコード署名された更新を変更しようとしても、エンドユーザーのデバイスはその更新を拒否し、デバイスにすでにある以前の信頼された更新を実行します。
ウェブレベルのHTTPSは多くのアプリに十分ですが、一部の大企業はエンドツーエンドコード署名による追加のセキュリティレベルを魅力的に感じています。これらの企業の中には、高額で永続的な取引を行う金融アプリを作成する企業もあれば、脅威モデルに侵害されたクラウドインフラストラクチャーを含めるCISOを持つ企業もあります。これらのユースケースのためにCapgoにエンドツーエンドコード署名を組み込み、より高レベルのセキュリティニーズを持つ企業からの意見をさらに聞きたいと考えています。
エンタープライズ顧客向けの始め方
セキュリティを重視する大企業やプロジェクトのために、コード署名の設定と維持を容易にしたいと考えています。そのために、以下の機能を提供しています:
- 迅速な証明書のセットアップと設定
- CapgoとDevelopmentビルドの両方でのコード署名開発サーバーのサポート
- すべての更新での本番コード署名
Capgoコード署名はすべての顧客が利用できます。始めるには、セットアップ手順に従ってください。