web-dev-qa-db-ja.com

署名バージョンの違い - AndroidStudioで署名付きapkを生成している間のV1(Jar Signature)とV2(Full APK Signature)の違い

Android Studio 2.3で使用する署名バージョンを少なくとも1つ選択してください

Android Studioで署名付きapkを生成している間、それは2つのオプション(CheckBox)を示しています、すなわち1. V1(Jar Signature)と2。最後にSignature Versionsとして `V2(Full APK Signature) '署名付きapk生成プロセスのステップ。

**Signature Versions** options

だから、これらのV1(Jar Signature)V2(Full APK Signature)の違いは何ですか? Android Studioのアップデート?

そして、Play Storeリリースのためにapkを署名するのにどちらを使うべきですか(または両方)?

また、私はエラーを取得しています私は2番目のオプションを使用するときapkをインストール中にインストール解析失敗証明書なし

198
Shirish Herwade

これは、Android 7.0で導入された新しい署名メカニズムです。APK署名をより安全にするように設計された追加機能があります。

必須ではありません。可能であればこれらのチェックボックスの両方をチェックする必要がありますが、新しいV2署名メカニズムによって問題が発生する場合は、省略することができます。

そのため、問題が発生した場合はV2を未チェックのままにしておくことができますが、可能であればチェックするようにしてください。

190
Booger

Play Storeリリース用のapkの署名に(または両方)使用するべきですか?答えは _ yes _ .

https://source.Android.com/security/apksigning/v2.html#verification :のとおり

Android 7.0では、APKはAPK署名スキームv2(v2スキーム)またはJAR署名(v1スキーム)に従って検証できます。古いプラットフォームはv2の署名を無視し、v1の署名のみを検証します。

V2(Full Apk Signature) オプションをチェックしてビルドを生成しようとしました。それからリリースビルドを 7.0 device以下にインストールしようとしたときにビルドをデバイスにインストールできません。

その後、バージョンチェックボックスをオンにしてリリースビルドを生成することでビルドを試みました。それからビルドをインストールすることができます。

33
pRaNaY

here that「デフォルトでは、Android St​​udio 2.2およびGradle 2.2用のAndroidプラグインは、APK Signature Scheme v2と従来のJAR署名を使用する署名スキーム。」

これらの新しいチェックボックスはAndroid 2.3で表示されたように見えるので、以前のバージョンのAndroid St​​udio(少なくとも2.2)は両方の署名で署名したことを理解しています。そのため、以前のように続行するには、両方のチェックボックスをオンにすることをお勧めします。

EDIT 2017年3月31日:両方の署名を持ついくつかのアプリを送信=>問題なし:)

21
Regis_AG

これ は良い答えだと思います。

APK署名スキームv2の検証

  1. APK Signing Blockを見つけて、それを確認してください:
    1. APK Signing Blockの2つのサイズフィールドは同じ値を含みます。
    2. Zip Central Directoryの直後にZip End of Central Directoryレコードが続きます。
    3. Zip End of Central Directoryの後にデータが続きません。
  2. APK Signature Scheme v2 Block内の最初のAPK Signing Blockを見つけます。 v2ブロックが存在する場合は、手順3に進みます。それ以外の場合は、v1スキームを使用したAPKの検証に戻ります。
  3. APK Signature Scheme v2 Blockの各署名者に対して:
    1. 署名からサポートされている最強の署名アルゴリズムIDを選択してください。強度の順序は各実装/プラットフォームのバージョンまでです。
    2. 公開鍵を使用して署名付きデータに対する署名から対応する署名を検証します。 (署名されたデータを解析しても安全になりました。)
    3. ダイジェストとシグネチャのシグネチャアルゴリズムIDの番号付きリストが同じであることを確認します。 (これは署名の削除や追加を防ぐためです。)
    4. 署名アルゴリズムで使用されるダイジェストアルゴリズムと同じダイジェストアルゴリズムを使用して、APKコンテンツのダイジェストを計算します。
    5. 計算されたダイジェストが、ダイジェストからの対応するダイジェストと同じであることを確認してください。
    6. 証明書の最初の証明書のSubjectPublicKeyInfoが公開鍵と同一であることを確認してください。
  4. 少なくとも1人の署名者が見つかった場合、検証は成功し、ステップ3は、見つかった署名者ごとに成功します。

注:手順3または4で障害が発生した場合は、APKをv1方式で検証しないでください。

JAR署名付きAPK検証(v1スキーム)

JAR署名付きAPKは標準の署名付きJARであり、META-INF/MANIFEST.MFにリストされているエントリと、すべてのエントリが同じ署名者のセットによって署名されている必要があります。その整合性は次のように検証されます。

  1. 各署名者は、META-INF/<signer>.SFおよびMETA-INF/<signer>.(RSA|DSA|EC) JARエントリで表されます。
  2. <signer>.(RSA|DSA|EC)は、署名がPKCS #7 CMS ContentInfoファイルで検証されるSignedData構造を持つ<signer>.SFです。
  3. <signer>.SFファイルには、META-INF/MANIFEST.MFのファイル全体のダイジェストと、META-INF/MANIFEST.MFの各セクションのダイジェストが含まれています。 MANIFEST.MFの全ファイルダイジェストが検証されます。それでも失敗した場合は、代わりに各MANIFEST.MFセクションのダイジェストが検証されます。
  4. META-INF/MANIFEST.MFには、各整合性保護されたJARエントリに対して、エントリの非圧縮コンテンツのダイジェストを含む、対応する名前のセクションが含まれています。これらのダイジェストはすべて検証されています。
  5. APKにMANIFEST.MFに記載されておらず、JAR署名の一部ではないJARエントリが含まれている場合、APK検証は失敗します。したがって、保護チェーンは<signer>.(RSA|DSA|EC)<signer>.SFMANIFEST.MF→それぞれの整合性保護されたJARエントリの内容です。
5
zonda

このリンクによると: 署名ヘルプ

APK Signature Scheme v2は以下を提供します。

  1. アプリのインストール時間の短縮
  2. APKファイルに対する不正な変更に対する保護が強化されています。

Android 7.0では、APK署名スキームv2が導入されました。これは、アプリのインストール時間が短縮され、APKファイルへの不正な変更からの保護が強化された新しいアプリ署名スキームです。デフォルトでは、Android Studio 2.2と Androidプラグインfor Gradle 2.2は、 APK署名方式v2とJAR署名を使用する従来の署名方式の両方を使用してアプリに署名します。

APK署名スキームを使用するのは 推奨 です v2 ですが 必須ではありません

アプリにAPK署名スキームv2を適用することをお勧めしますが、この新しいスキームは必須ではありません。 APK Signature Scheme v2を使用しているときにアプリが正しくビルドされない場合は、新しいスキームを無効にすることができます。

3
Shirish Herwade