8

ルート CA の公開鍵 (verisign - http://www.verisign.com/repository/roots/root-certificates/PCA-3G5.pem ) を iOS アプリに固定したいと考えています。公開鍵と subjectPublicKeyInfo のどちらをピン留めする方がよいですか? どちらの方法が優れているのか、その理由を説明してもらえますか?

4

3 に答える 3

5

ルートの CA 公開鍵ではなく、サブジェクトの公開鍵を固定する方がよいと私は主張します。CA のルート pkey を固定することのさまざまなトレードオフについての私の理解は次のとおりです。

良い 点 同じ CA を保持している限り、証明書を何度でも更新でき、常に機能します。

悪いこと に、サブジェクトの公開鍵ではなくルート CA の pkey をピン留めする MITM 攻撃に対して少し脆弱になると思います。これは、サブジェクトに実際に一致するものだけでなく、その CA によって署名された証明書を有効なものとして受け取るためです。

では、サブジェクトの公開鍵を固定するのはどうですか? 基本的には、CA の公開鍵をピン留めするよりも少し安全であり、同じ公開鍵を保持している限り、証明書の有効期限が切れて証明書を更新した後でも、アプリケーションは引き続き動作するはずです。

公開鍵を固定する方法に関する質問と解決策を投稿しました。お役に立てば幸いです: iOS で証明書の公開鍵を固定する方法

于 2013-03-31T10:55:15.030 に答える
2

ルート CA の公開鍵を固定したい...

ただのバイクシェディングですが、ルートや中間証明書ではなく、サーバーまたはサービスの証明書または公開鍵をピン留めする方がおそらく安全です。これは、DigiCert や Verisign などのパブリック CA を使用している場合に特に当てはまります (プライベートな企業 CA とは対照的に)。

パブリック CA の場合、CA が誤って 2 番目の証明書を発行する可能性があり、クライアントは「本物の」証明書 (ユーザーに発行された証明書) と「偽の」証明書 (誤って発行された証明書) を区別できなくなります。これは実生活で何度も発生しているため、再び発生することを期待する必要があります。

公開鍵と subjectPublicKeyInfo のどちらをピン留めする方がよいですか? どちらの方法が優れているのか、その理由を説明してもらえますか?

公開鍵を固定することをお勧めします (少なくともサーバー証明書を固定する場合)。

Google などの一部の組織では、サーバー証明書を 30 日程度ごとにローテーションしています。ただし、同じ公開鍵を再認証します。たとえば、Android 4.2 と Pinningを参照してください。つまり、「キーの継続性」は観察されますが、「証明書の継続性」は観察されません

同じ公開鍵を再認証することが、ユーザー エクスペリエンスで CertPatrol が失敗する場合がある理由です。Google サービスのような場合、公開鍵パトロールが本当に必要です。

于 2014-06-09T23:11:10.427 に答える
0

実際の公開鍵と鍵のア​​ルゴリズム (RSA、ECDSA など) の両方が含まれているため、SPKI (サブジェクト公開鍵情報) を固定することをお勧めします。これについては、 https : //www.imperialviolet.org/2011/05/04/pinning.html にある Google の TLS 教祖の記事で詳しく説明されてい ます。

SPKI には、公開鍵のタイプといくつかのパラメーターが、公開鍵自体とともに含まれています。これは重要です。なぜなら、公開鍵をハッシュするだけでは、誤解攻撃にさらされる可能性があるからです。Diffie-Hellman 公開鍵を考えてみましょう。完全な SPKI ではなく、公開鍵のみをハッシュすると、攻撃者は同じ公開鍵を使用して、クライアントに別のグループで解釈させることができます。同様に、RSA キーを DSA キーなどとして強制的に解釈することもできます。

iOS アプリ内に SPKI を固定する際の課題の 1 つは、iOS のセキュリティ フレームワークが、証明書を解析して SPKI ビットを抽出するための API を提供しないことです ( https://nabla-c0d3.github.io/blog/2015/08/11 /security-framework-wish-list/ )。

良いニュースは、オープンソース ライブラリがまさにそれを行うために利用できることです: https://github.com/datatheorem/TrustKit

于 2016-04-07T01:54:19.603 に答える