.snkとは何ですか?


153

.snkファイルとは何ですか?それは厳密な名前のキーの略であることは知っていますが、それが何であり、どのように機能するかについてのすべての説明は私の頭にあります。

厳密に命名されたキーがどのように使用され、どのように機能するかについて簡単な説明はありますか?

回答:


212

.snkファイルは、.NETアセンブリに厳密な名前を付けるために使用されます。そのような強い名前はで構成されています

単純なテキスト名、バージョン番号、およびカルチャ情報(提供されている場合)—公開鍵とデジタル署名。

SNKには一意のキーペアが含まれています。これは、アセンブリに一意の厳密な名前を付けるために使用できる秘密キーと公開キーです。アセンブリに厳密な名前を付けると、アセンブリのコンテンツから "ハッシュ"が作成され、ハッシュは秘密キーで暗号化されます。次に、この署名付きハッシュは、.snkからの公開鍵と共にアセンブリに配置されます。

その後、誰かが厳密な名前のアセンブリの整合性を検証する必要がある場合、アセンブリのコンテンツのハッシュ作成し、アセンブリの公開鍵を使用して、アセンブリに付属するハッシュを復号化します-2つのハッシュが一致する場合、アセンブリ検証に合格しました。

この方法でアセンブリを検証して、アプリケーション全体を破壊する悪意のあるアセンブリとアセンブリを交換しないようにすることが重要です。これが、厳密な名前のないアセンブリが厳密な名前のアセンブリと同じように信頼されないため、GACに配置できない理由です。また、信頼の連鎖もあります。厳密な名前のないアセンブリを参照する厳密な名前のアセンブリを生成することはできません。

記事「強力な命名の秘密(ウェイバックマシンでアーカイブ)」。これらの概念をより詳細に説明する優れた仕事をします。写真付き。


2
これは、.PFXを使用してアセンブリに署名すると、コンパイル時に常にそれを使用して.SNKを即座に生成することを意味しますか?
Patrick

5
@Patrickいいえ、それはAuthenticode署名ですが、署名とチェックの間にファイルが変更されなかったことも証明しますが、厳密な名前の要件を満たしていません。問題は、Authenticodeが厳密な名前付けに必要なアセンブリの信頼チェーンを必要としないため、厳密でない名前付き/署名済みアセンブリに依存するアセンブリにAuthenticode署名できることです。
Scott Chamberlain

1
あなたは単純にsnkを取り除き、それを別のものに置き換えることができます..それが有用である実際のシナリオはわかりません..それは基本的に、あなたがそれに信頼を築くことができない私たちの鍵ペアです
Ibrahim


回答のリンクを(@asfeynmanによって提案されたものに)更新してください。リンクは無効であり、全員がコメントを読むわけではありません。
XelaNimed

22

.Netの世界では、SNKファイルはコンパイルされたバイナリに署名するために使用されます。これにより、いくつかのことが起こります。

  1. アセンブリをGAC (グローバルアセンブリキャッシュ)に登録できます。基本的には、複数のコピーを維持する必要なく、同じマシン上の多くの場所からそれを参照できます)。
  2. 署名された他のバイナリ内からバイナリを使用できます(これは、署名されたアセンブリに関して奇妙なバイラルな動作です)。
  3. アセンブリは、SNKファイルにアクセスできないサードパーティが(簡単に)変更することはできず、少なくとも少量のセキュリティが提供されます。

私はBizTalkサーバーがどのように機能するかについてよく知らないので、その環境内でサーバーがどのような特定の目的で機能するかについては、あまり明かすことができないと思います。

これが多少役に立ったといいのですが。


7

.snkファイルは、アセンブリをグローバルアセンブリキャッシュ(GAC)に追加できるようにするために、アセンブリに署名するために使用されます。

.snkファイルには、鍵の公開トークンと秘密トークンが含まれています。そのキーを使用して一部のデータ(またはバイナリ)に署名する場合、データに対してチェックサムが計算され、プライベートトークンで暗号化されます。次に、暗号化されたチェックサムがデータに追加されます。誰でもあなたのキーの公開トークンを使用してチェックサムを復号化し、それを計算したチェックサムと比較して、署名されたデータが改ざんされていないことを確認できます。

公開鍵暗号の詳細については、http://en.wikipedia.org/wiki/Public-key_cryptographyを参照してください


4

.snkファイルは、フレームワークユーティリティセットのsnユーティリティによって生成された「キー」の永続バージョンです。次に、このファイルを使用して、アセンブリに「デジタル署名」します。これは2つの部分からなる鍵です。秘密鍵と公開鍵の組み合わせです。キーの公開部分は公開されます。つまり、誰もが知っています。非公開部分は、コンポーネント/アプリ開発者であるあなただけが知っており、そのようにしておくことを目的としています。

アセンブリに署名すると、アセンブリの秘密キーとハッシュ値を使用して、アセンブリに埋め込まれるデジタル署名が作成されます。その後、アセンブリをロードするすべての人が検証ステップを実行します。公開キーは、アセンブリが実際にユーザーからのものであるかどうかを検証するために使用されます。これには公開キーが必要です(これは、アセンブリマニフェストのトークン化されたフォームにも埋め込まれています)。アセンブリが改ざんされている場合、ハッシュ値は異なり、アセンブリのロードは中止されます。これはセキュリティメカニズムです。


3

.snkファイルは、自分の代わりに自分のアセンブリを他の誰かが滑らせないようにするために使用されます。暗号化/復号化キーのペアを提供します。

.snkファイルを使用してアセンブリに署名すると、ハッシュコード値がアセンブリファイルから計算され、秘密キーを使用して暗号化されます。次に、その暗号化された「ダイジェスト」が.snkファイルの公開鍵とともにアセンブリに追加されます。

その後、誰かがアセンブリを受け取ったときに、そのハッシュコード値を計算することもできます。公開鍵を使用して、計算したものを復号化し、計算した値を比較します。アセンブリがまったく変更されていた場合、それらの値は異なり、アセンブリのユーザーは、自分が持っているアセンブリが指定したものではないことを知っています。

BizTalk Serverのコンテキストでは、BizTalkソリューションで使用されるカスタムアセンブリを構築する人は誰でも、.snkファイルを使用してアセンブリに署名し、BizTalkサーバーがアセンブリをGACに読み込んで使用できるようにする必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.