9

この質問の前に、実際の質問がどこにあるかを絞り込むことができるように、次の 2 点を挙げたいと思います。

a)私は以前にソフトウェア開発を行ったことがありますが、Android用は一度もありません

b) 私は PKI と暗号化とハッシングとデジタル署名に精通しています。

そうは言っても、Android がどこでどのようにアプリの作成者を検証しているかについて、詳しい情報を追跡するのに苦労しています。さまざまな情報をたくさん聞いたので、ワークフローのより良いアイデアを得るために統合しようとしています.

すべてのアプリ開発者は独自の秘密鍵と公開鍵のペアを取得し、APK をハッシュしてアプリに署名することを知っています (私が間違っていなければ、ほとんどの場合 SHA-1 を使用します)。あなたはそれをアップロードし、(私は信じています)公開鍵はAPK内のMETA INFに入ります。これくらいは分かります。

私の質問は、ユーザーがアプリ自体をダウンロードするときにこれがどのように関係するかです。アプリが有効に署名されていること、および署名に作成者などの情報が含まれていることを確認するために電話がチェックすることは知っています。しかし、アプリは自己署名されており、Google Play (または現在市場と呼ばれているもの) は CA を実装しておらず、身元認証がないことも読んだことがありますか? しかし、私の質問は、人々が別の開発者の名前でアプリをアップロードするのを止めるものは何ですか (クラウドソーシングはさておき)?

電話が有効な署名のみをチェックする場合、アプリがアップロードされたときに認証の唯一の手段が行われることを意味しますか? もしそうなら、アプリ市場はどのようにそれをチェックしますか? ファイルの秘密鍵を使用して署名を検証するのは通常のことですか? それとも、開発者は認証のために秘密鍵を市場に提供する必要がありますか?

4

1 に答える 1

11

要するに、Android と Google Play は基本的に、実際の証明書の内容を気にしません。Google Playはそれを実際に検証し、30年以上有効かどうかを確認しますが、証明書の実際の情報を実際には使用していません(少なくとも現在、AFAIK)。CN で自分の名前/会社名を使用することもできますが、誰もこれを検証せず、ユーザーはこの情報をまったく見ることができません。Android の機能は次のとおりです。

  • 署名をチェックして、APK が改ざんされていないことを確認します
  • 次に、バイナリ blob としての歌唱証明書を現在インストールされているアプリのバージョンの 1 つと比較して、2 つのバージョンが同じキー/証明書で署名されていることを確認します (たとえば、同じ人/会社によって)。
  • 2 つ以上のアプリで sharedUid または署名のアクセス許可を使用している場合、アクセス許可を強制するために同じことを行います。

ですから、あなたの質問に答えるために、誰かがあなたの名前で証明書を簡単に作成できますが、Android と Google Play はあまり気にしません。彼らはあなたの秘密鍵を持っていない限り、あなたのものと同じアプリの署名を生成することはできません。したがって、彼らはあなたのアプリを彼らのもので上書き/更新したり、特別な権限を取得したりすることはできません. .

于 2012-06-08T02:19:36.323 に答える