2

私は .NETパッケージ マネージャーを開発していますが、考えさせられたのはセキュリティです。

誰でもアセンブリをリポジトリにアップロードできる可能性がある場合、そのアセンブリが信頼できるソースからのものであることを確認するにはどうすればよいですか? たとえば、NHibernate.dllNHForge の秘密鍵で署名されていれば、もっと信頼できます。これを確認するには、NHForges の公開鍵を使用してアセンブリの署名を検証するだけです。

さて、それを念頭に置いて、どうすればこの関係 (この特定の公開鍵がこの特定の人物に属している) を確立できるのでしょうか? 私が思いついたアイデアは次のとおりです。

  • プロジェクト作成者は、プロジェクトと作成者に関する情報 (名前、電子メールなど) を含む XML ファイルを作成します。
  • .snkこの XML ファイルは、後でアセンブリ自体に署名するために使用されるファイルから抽出された作成者の秘密キーで署名されています。
  • 作成者はこの署名済み XML ファイルをリポジトリにアップロードします。リポジトリでファイルがチェックされ、作成者と公開鍵の関係が確立されます。

これを実装するには (これは実行可能なアイデアですか?)、.snkファイルにアクセスして PK を読み取るプログラムによる方法が必要です。.NET でこれに対応するものはありますか?

4

1 に答える 1

1

まず、厳密な名前はセキュリティメカニズムとして使用しないでください。これらは、アセンブリIDメカニズムとしてのみ使用することを目的としています。このようなものについては、アセンブリの発行元/ソースを検証するために特別に設計されたAuthenticodeを調べます(つまり、IDだけでなくセキュリティ)。

そうは言っても、XMLファイルに厳密な名前署名を行うことはできないため、概説したアイデアはそのままでは実現できません。厳密な名前署名は.NETアセンブリでのみ機能します。理論的には、特定の発行元への各公開鍵のある種のマッピングを維持し(おそらく発行元の登録プロセスなどを通じて)、リポジトリに追加する前にアセンブリの厳密な名前の署名を確認することができます。

技術的な側面としては、関数(アンマネージドストロングネーミングAPIの一部)を.snk介してファイルから公開鍵を抽出できます。ただし、ファイルを自分でメモリStrongNameGetPublicKeyにロードする必要があります。.snk

于 2010-10-01T19:55:10.453 に答える