7

このトピックは私を混乱させ続けています。私は自分の現在の理解を書き出して、うまくいけば、私が正しいこと/間違っていることを見つけようと思いました.

開発証明書を作成する場合、公開鍵と秘密鍵の概念があります。プロビジョニング ポータルから入手できる証明書は公開鍵を保持しますが、秘密鍵はキーチェーン内に保存されます。アプリにコード署名するには、両方が必要です。

アプリを実行するには、デバイスにプロビジョニング プロファイルが必要です。これは基本的に、アプリ識別子、認識された証明書のセット (アプリはこれらの証明書のいずれかによって署名されている必要があります)、およびデバイス識別子のセットを保持します。 (どのデバイスがアプリの実行を許可されているかを示します)。

「認識された証明書」には公開鍵への参照がありますが、秘密鍵は基本的にアプリによって渡されます。

したがって、App Store に関しては、通常のデバイスには、リンゴの「公開鍵」が既にあるデフォルトの prov プロファイルが付属していると考えることができ、Apple は配布前に独自のコード署名操作を実行して、秘密鍵を追加します。

完全?近い?途中?非常識?

4

2 に答える 2

5

価値があるのは、これが私の最新の理解です。

プロビジョニング プロファイルは、どのアプリが (AppID を介して) どの開発者によって (証明書を介して) 署名され、どのデバイス (UDID) で実行できるかを示すファイルです。

証明書には、公開鍵と秘密鍵の概念があります。公開鍵と秘密鍵は数学的にリンクされているため、平文を暗号化したり、暗号文を解読したりできます。証明書により、Apple は次の 2 つのことを保証できます: 1. 登録された開発者のみがコードを配布できること、2. 配布されるコードがデバイスに送信される途中で変更されないこと。

Xcode でコードをビルドすると、キーチェーンにある秘密鍵を使用してアプリケーションに「コード署名」し、それによってアプリケーションを「ロック」します。コードのロックを解除/復号化するには、宛先デバイスが公開鍵にアクセスできる必要があります。デバイスは、プロビジョニング プロファイルに含まれている証明書から公開キーを取得します。

開発者からデバイスに届くまでコードが変更されていないことを確認するために、証明書には、コード/データを「ダイジェスト」と呼ばれるものに変換できるアルゴリズムが含まれています。開発者側では、データ/コードがアルゴリズムを介して実行され、個別のダイジェストが生成され、秘密鍵でロックされます。

アプリ パッケージがデバイスによって受信されると、デバイスは次の手順を実行して、コードが変更されていないことを確認できます: 秘密鍵を使用してダイジェストのロックを解除し、暗号化されていないデータをアルゴリズムを介して実行します (デバイスは証明書にアクセスできることを思い出してください)。プロフプロファイルを介して)、結果が開発者から送信されたものと同じダイジェストであることを確認します。

さらに、prov プロファイルは電話の UDID を確認するだけでよく、プロファイルの AppID がアプリの識別子と一致することを確認します。

アプリストアからのアプリの個別のプロフ プロファイルが必要ない理由は、各 iPhone には、Apple が配布アプリにコード署名するために使用する公開鍵が同梱されているためだと思います。

于 2012-12-05T19:24:16.173 に答える
2

Ray Wenderlich は、こ​​こで合理的に説明しています。説明を改善するには、代わりに

「認識された証明書」には公開鍵への参照がありますが、秘密鍵は基本的にアプリによって渡されます。

私はこう言います:

app .ipa には、開発者証明書が含まれています。開発者証明書は、公式の Apple 秘密鍵だけでなく、あなたの秘密鍵でも署名されています。

したがって、開発者証明書を Apple の公開鍵と公開鍵で検証することにより、iPhone は次のことを検証できます。

  • あなたはこのアプリの開発者です
  • Apple からアプリ開発の認定を受けている
  • このアプリは iPhone で実行できます (この開発者証明書を参照するプロビジョニング プロファイルが電話にある限り)。

秘密鍵は証明書やプロファイルには保存されず、署名のみに使用されます。公開鍵が保存されているかどうかは不明です。完全に安全にするために、電話は検証時に Apple から公開鍵を取得する必要があります。

于 2012-11-30T16:42:35.507 に答える