Androidアプリの署名と署名検証
アプリケーションの署名
アプリケーションの署名は、APK(Androidパッケージ)が、アプリ開発者を一意に識別する秘密鍵で署名されるプロセスです。このプロセスにより、アプリが署名された後、改ざんされることなく開発者から提供されたことが保証されます。詳細な手順はこちらです:
キーストアの生成
- 開発者はキーストアを作成します。これは暗号化キーを格納するバイナリファイルです。このキーストアにはAPKを署名するための秘密鍵が含まれています。
- キーストアはパスワードで保護されており、不正アクセスを防ぐために安全に保管しなければなりません。
APKの署名
- ビルドプロセス中または後に、キーストアに保存されている秘密鍵を使用してAPKが署名されます。
- このプロセスにより、ハッシュ関数でAPKの内容から唯一のダイジェストが生成されます。
- ダイジェストは開発者の秘密鍵で暗号化され、その結果がAPK内に格納されます。
証明書の含有
- APKには、署名に使用された秘密鍵に対応する公開鍵を含む証明書が含まれています。
- この証明書はインストールプロセス中のデジタル署名を検証するために使用されます。
なぜアプリケーションの署名が重要か?
- 信頼性の確保: アプリの開発者の身元を確認します。
- 完全性の保護: 署名後にアプリが改ざんされていないことを保証します。
- 安全な更新の提供: 更新は同じ鍵で署名されるため、元の開発者からのものであることが保証されます。
署名検証
署名検証は、Androidオペレーティングシステムがインストール前にAPKのデジタル署名をチェックして、その完全性と信頼性を確認するプロセスです。このRedditの投稿でAPKの署名/信頼性を簡単に確認する方法をチェックし、ここで検証がどのように行われるかをお読みください:
証明書の抽出
APKがダウンロードされインストールが開始されると、デバイスはAPKから公開鍵を含む証明書を抽出します。
署名の復号化
- デバイスは、APKに埋め込まれたデジタル署名を復号化するために証明書から抽出した公開鍵を使用します。
- 復号化により、署名プロセス中に生成された元のハッシュ(ダイジェスト)が得られます。
ハッシュの生成
独立して、デバイスはAPKの内容のハッシュを生成します。これには署名プロセス中に使用されたのと同じハッシュ関数が使われます。
ハッシュの比較
- デバイスは、独立して生成されたハッシュとデジタル署名から復号化されたハッシュを比較します。
- 一致: ハッシュが一致する場合、APKは信頼性があり改ざんされていないと確認され、インストールが続行されます。
- 不一致: ハッシュが一致しない場合、APKが署名後に改ざんされた可能性があることを示し、インストールはブロックされます。
なぜ署名検証が重要か?
- 信頼性の確認: APKが指定された開発者によって署名されたことを確認します。
- 完全性の維持: APKが署名後に変更されていないことを確認します。
- ユーザーの保護: 潜在的に悪意のあるAPKがインストールされるのを防ぎます。
アプリに複数の署名がある場合、どの署名を選択すべきか?
ほとんどのアプリには1つの有効な署名がありますが、中には複数あるものもあります。アップデートエラーを避けるために、既にデバイスにインストールされているAPKの署名と一致させる必要があります。
複数署名の理由
- キーのローテーション: Android 9ではファイルの署名キーを切り替えることが許可されています。これは、APK Signature Scheme v3によるものです。
- 配信経路:異なるソース(例: Play Store, Github)からのアプリは異なる署名を持っている可能性があります。
- システムアプリ: システムアプリの署名キーはデバイスやOSのバージョンによって異なることがあります。
- 不明なケース: GoogleのFilesやPlay servicesのようなアプリは単に複数の署名を持っています。
正しい署名を識別する方法
- AndroidFreewareには、APKの、Android権限チェックを実行し、危険なフラッグとフィルターを検出し、md5、sha1、sha256チェックサムを計算し、VirusTotalウイルスチェックを実行する高度なAPKチェッカーがあります。
- アプリの署名を見るには、My APKのようなツールを使います。
- 試みのアプローチを使うです。アップデートがうまくいくまで異なるAPKをインストールし、将来のアップデートのために正しい署名を覚えておきます。
- ML Managerを使ってAPKMirrorにアプリをアップロードし、既存の署名を見つけることができます。
- 一部のデスクトップツールは、apkファイルの署名を見つけることができます。 その中にはGoogleのapksigner、IBMのkeytool、Warren Bankのprint-apk-signatureがあります。