blog

アップルアプリ署名原理

公開鍵と秘密鍵\n暗号化:公開鍵暗号化、秘密鍵復号化。\n署名:秘密鍵暗号化、公開鍵復号化。\n\n暗号化のシナリオを例にとってみましょう:\nAはまずBの公開鍵でデータを暗号化し、暗号化されたデータ...

Jun 9, 2020 · 4 min. read
シェア

公開鍵と秘密鍵

  • 暗号化:公開鍵暗号化、秘密鍵復号化
  • 署名:秘密鍵暗号化、公開鍵復号化

例えば、暗号化のシナリオ: Aが安全で機密性の高いデータをBに送りたい場合、AとBはそれぞれ秘密鍵を持っており、AはまずこのデータをBの公開鍵で暗号化し、次にこの暗号化されたデータを自分の秘密鍵で暗号化します。最終的にBに送信され、読まれることのない内容が改ざんされないようにします。

コード署名

コード署名とは、実行ファイルやスクリプトのデジタル署名のことです。署名後にソフトウェアが変更されたり破損していないことを確認するための手段です。デジタル署名と同じ原理ですが、署名データがコードであることだけが異なります。

デジタル署名: データの完全性を保護し、メッセージの送信元を追跡するために、非対称暗号化を使用する。
 
 1.送信者は非対称暗号化公開鍵と秘密鍵を生成し、公開鍵とアルゴリズムを公開する。
 2.メッセージを実行するhash.ダイジェストを生成し、秘密鍵で暗号化する。
 3.受信者が公開鍵とアルゴリズムを使って復号化したダイジェストが、計算されたダイジェストと一致すれば、メッセージのソースが正確で、改ざんされていないことが証明される。
 
 セキュリティの前提
 * アルゴリズムは安全であり、秘密鍵は漏洩していない。
 * 受信機から照会た公開鍵とアルゴリズムが正確である。

シンプルなアプリケーション署名

iOSにインストールされるすべてのアプリが、アップルによって正式に許可されていることを確認するには?コードに署名することです。検証を実現したいなら。実際には、最も簡単な方法は、Appleの公式を介して非対称暗号化公開鍵と秘密鍵のペアを生成することです。iOSシステムに公開鍵を組み込み、秘密鍵はAppleのバックグラウンドによって保存され、あなたがAppStoreにAPPを渡すとき、Appleのバックグラウンドは、APPのデータに署名するために秘密鍵を使用し、iOSシステムがAPPをダウンロードした後、公開鍵は、署名を検証するために使用され、署名が正しい場合、APPは、Appleのバックグラウンドによって認定され、変更されていない、これはまた、Appleの要求を満たしています:インストールされたAPPは、Appleの公式のコード署名によって認定されていることを確認します。すべてのAPPはAppleによって許可されています。

認証を実現する最も簡単な方法は、Appleから非対称暗号化された公開鍵と秘密鍵のペアを生成することです。最も簡単な方法は、Appleによって非対称暗号化された公開鍵と秘密鍵のペアを生成することです。iOSシステムに組み込まれた公開鍵があり、秘密鍵はAppleのバックエンドによって保持され、AppStoreにAPPを渡すと、Appleのバックエンドは秘密鍵でAPPデータに署名し、iOSシステムがAPPをダウンロードした後、公開鍵を使って署名を検証し、署名が正しければ、APPはAppleのバックエンドによって認証され、変更されていません。すべてのAPPはAppleによって許可されています。

二重署名

要件

単純なアプリケーションシグネチャではアップルのニーズを満たすことはできません:

  • インストーラーはApp Storeにアップロードする必要はなく、携帯電話に直接インストールできます。
  • システムのセキュリティを確保するために、アップルはインストールされたアプリを絶対的に管理しなければなりません。
  • Appleの許可がインストールされた後、アプリの非開発を引き起こす悪用することはできませんもインストールすることができます これらのニーズを達成するために、iOSの署名の複雑さも増加し始め、Appleはここで解決策を与える2層の署名です。

ステップ

まず、二重署名はMacとiOSの2つのシステムに依存します。

二重署名の手順

  1. Macシステムでは、公開鍵と秘密鍵のペアが生成されます。ここでは、公開鍵Mと秘密鍵Mと呼ばれます。
  2. アップルも独自の公開鍵と秘密鍵のペアを持っています。原理はAppstoreと同じで、Appstoreの秘密鍵とiOSシステムの公開鍵です。ここでは公開鍵A、秘密鍵Aと呼びます。
  3. 公開鍵Mと開発者情報をアップルのバックエンドに送信します。アップルは秘密鍵Aを使って公開鍵Mに署名し、公開鍵Mとその署名を含むデータを取得します。
  4. 開発では、アプリをコンパイルした後、アプリに署名するためにローカルの秘密鍵M(将来的には、p12をエクスポートする)を使用し、アプリに一緒にアプリを取得するための3番目のステップは、携帯電話にインストールされ
  5. インストール中、iOSは証明書を取得し、内蔵の公開鍵Aを使用して証明書が正しくデジタル署名されていることを確認します。
  6. 証明書を検証した後、公開鍵MがAppleによって認証されていることを確認します。これは、アプリのインストール動作がAppleによって許可されているかどうかを間接的に証明します(ここではインストール動作のみを検証し、アプリが変更されているかどうかは検証しません。)

上記のプロセスで、開発者の認証とプログラムの安全性を保証することはすでに可能です。 しかし、iOSのプログラムは、APP Storeを通じてユーザーのデバイスに配布されるのが主な経路であり、上記のプロセスしかないのであれば、証明書さえ申請すれば、すべてのiOSデバイスにインストールできることにならないでしょうか?説明ファイルはこちら

記述ファイル

説明ファイル:一般的にAppID、デバイス、証明書などが含まれます。Appleは不正使用問題を解決するために、さらに2つの制限を追加しました。

  • インストールにはAppleバックエンドに登録されたデバイスが必要です。

  • 特定のアプリのみに署名を制限

    Appleはまた、iCloud/PUSH/Background/Debuggerのアプリへの追加をコントロールしたいので、AppleはこれらのパーミッションスイッチをEntitlementsと呼びます。そしてこのファイルをProvisioning Profileというファイルに入れます。

    記述ファイルはAppleDevelopのサイトで作成され、Xcodeを実行するとアプリにパッケージされます。つまり、CSR付きの証明書を申請する際に、もう一つ申請しなければならないものがあるのです!!!! 説明ファイルです!

    開発では、APPをコンパイルした後、ローカルの秘密鍵Mを使用してAPPに署名し、同時にAppleサーバーから取得したProvisioningProfileファイルをAPPにパッケージ化します(ファイル名はembedded.mobileprovision)

Read next

プロジェクトの実践におけるmysqlの読み書き分離

プロジェクトの背景:ユニバーサルインターフェイスを開発し、受信データで、このインターフェイスを介してユーザーは、複雑なロジック処理のためのデータを取得し、データは他の操作の分布を表示するには、一致するさまざまなされ、処理は非常に大規模である、インターフェイスは、データを受信し、操作のidの要求を返すために保持され、操作の残りの部分は、他の手順の処理に非同期です。 操作のIDを返す必要があり、データベース...

Jun 9, 2020 · 3 min read