web-dev-qa-db-ja.com

署名Android SHA1ダイジェストを含むapkファイルは安全ですか?

Apkファイルに署名するためのGoogleコマンドラインの例:

$ jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.keystore my_application.apk alias_name

ソース: http://developer.Android.com/tools/publishing/app-signing.html

ご存知のように、MD5とSHA1の両方に重大な欠陥があると見なされています(MD5は実際にはひどく壊れています)。だから署名Android SHA1ハッシュのapkファイルは十分に安全ですか?そうでない場合、Googleの人たちはそれについて知っているはずです。なぜそのような例を提供したのか疑問に思っています。署名に別のアルゴリズムを使用できますか= Android apks?

5
user273084

MD5とSHA-1には、collisionsに関する欠陥があります(SHA-1の場合、これらの欠陥は、実際の衝突がないという点で「理論的」です。まだ生産されています)。状況によっては、衝突は必ずしも問題ではありません。

衝突とは、2つの入力mm 'のペアですが、同じ値にハッシュされます。署名アルゴリズムはハッシュされたメッセージに作用するため、衝突ペアの最初のメッセージの署名は、他のメッセージにも機械的に有効です。衝突は次の意味で2番目のプリイメージとは異なります。

  • 2番目のプリイメージでは、攻撃者にメッセージmが表示され、m 'm;
  • 衝突では、攻撃者はmm 'の両方を選択します。

現在、SHA-1に対する既知の2番目のプリイメージ攻撃はなく、MD5に対する非常に理論的な2番目のプリイメージ攻撃のみです(2以上の努力)120)。

アプリの署名は、説明責任についてです。通常、あなたは悪いことをするかもしれないアプリをインストールしたくないでしょう。署名は、アプリが悪いことをしないことをしないが保証しますが、ユーザーに報復力を与えます。署名者はアプリに署名したことを拒否できません。これは覚えておくことが重要です。署名は、犯人までさかのぼることができる限り、その役割を果たします。

攻撃者は自分のアプリの2つのバージョンを作成し、2つのバージョンを同じ値にハッシュして、同じ署名値を使用することができます。 1つのバージョンは「正直」で、もう1つのバージョンはお使いの携帯電話を乗っ取るか、同様のいたずらを実行します。しかし、それは攻撃者に何をもたらすでしょうか?アプリケーションmとアプリケーションm 'が同じ署名値を共有する場合、署名はアプリケーションの作成者が実際に「証明」していることを証明します両方を書いた...それは完全に本当です!署名のセキュリティプロパティである説明責任は、衝突が存在する場合でも有効です。

攻撃者が本当に望んでいるのは2番目のプリイメージです。somebody elseによって署名された悪いアプリを作成したいと考えています。そのために、彼は既存の「正直な」アプリを取り、同じ値にハッシュする新しいアプリを作成する必要があります。これにより、署名の値を借りることができます。現在のところ、RSA/SHA-1シグネチャを使用して(または、RSA/MD5シグネチャを使用して)それを行う方法は誰にもわかりません。

衝突は、攻撃者が他の誰かが署名するものを選択するときに問題になる可能性があります。これは RSA/MD5と証明書を含むデモンストレーション で起こったことです。ただし、署名するものが自分のアプリである場合、これはコンテキストには適用されません。 MD5またはSHA-1での衝突は、次のような状況を想像した場合に関係があります。

  1. 攻撃者は、正直なアプリと悪意のあるアプリのペアを作成し、同じ値にハッシュします。
  2. 攻撃者は最初のアプリを、アプリに署名できる人に提出します。
  3. 署名者はアプリのコードを徹底的に検査し、すべてが正常に見えることを確認して署名します。
  4. その後、攻撃者は悪意のあるアプリで署名値を再利用します。

その場合でも、署名は署名者を指していますが、その署名者は問題が発生した場合に悪意のあるアプリが署名したものではないことを知っています。実際、彼は単に彼のメールから「正直なアプリ」を発言し、正直なアプリと悪意のあるアプリの両方がハッシュ関数の衝突ペアであることを示し、それによってアプリの作成者の悪意を示しています(衝突は発生しません)不運の;あなたは故意にそれをしなければならない)。

概要:衝突に関するMD5およびSHA-1の既知の欠陥は、アプリ署名のセキュリティモデルを危険にさらしません。 SHA-256などのよりモダンでロバストな関数の使用を調査するのは依然としていい考えですが、緊急性はありません。

6
Thomas Pornin

署名は、署名されているものに取り決めも依存もありません。これは、署名されたサブジェクトに投影される暗号アルゴの強み/弱みです。 SHA-512または任意のSHA-2メンバーを試してください。機能しているはずです。この例は、作成されてからしばらく前に定着しているため、古くなっています。

1
Alexey Vesnin