2011-08-26 9 views
7

私は、.NETのアセンブリにPublicKey = 00000000000000000400000000000000が含まれていることに気付きました。さらに、sn.exeが生成できる(最小384ビット)だけでなく、ゼロ。.NETコアアセンブリの非常に特殊なPublicKey

このような公開鍵で署名鍵を生成するにはどうすればよいですか?

+0

Windows SDKの「sn.exe」署名ツールのドキュメントを見てきましたか? –

+0

@dario_ramos:はい、しました。 –

+1

あなたの公開鍵を特定のものにしたい、あるいはゼロをたくさん持たせたいですか?どういうことなんですか? –

答えて

5

これは、ECMA標準で定義された公開鍵です。

これは3つの相反する要件に対処することです:

  1. アセンブリは彼らのクリエイターによって署名され、詐欺その他の当事者によって作成されていなかったことを保証メカニズム。
  2. このCLIは、他の人が自由にバージョンを実装できるように公然と定義されています(Monoは実際の例です)。
  3. フレームワークのすべてのバージョンで使用できるクラスの標準ライブラリがあること。

これらの3つの事柄は同時に起こることはありません!

.NETのバージョンを作成する場合(ポイント2)、標準ライブラリ(ポイント3)のバージョンを提供する必要があります(ポイント1)ので、署名する必要があります私がMicrosoftであることを証明する。ああ待って、私はMicrosoftではない! (ええと、再びポイント2)。

は代わりに何が起こるかです:

  1. は、私は、公開鍵と秘密鍵のペアを作成します。フレームワークライブラリ実装のアセンブリの新しいリリースバージョンを構築することを信頼する人は秘密鍵にアクセスでき、公開鍵はCLI実装に関する作業を行っている誰でも知ることができます。

  2. 公開鍵00000000000000000400000000000000(ECMA規格で定義されている)に対応する鍵で署名されたものとして関連アセンブリをマークしますが、実際には上記の秘密鍵で署名されています。

  3. CLIのコードでは、公開鍵00000000000000000400000000000000に対応するキーで署名されていると主張するアセンブリのチェックは、実際の公開鍵でチェックされます。これがチェックアウトされた場合、それらのアセンブリを構築することを信頼している誰かによって署名されているだけです。もちろん

、MSのフレームワークは、Monoのは、彼らを信用しないだろう、と我々はすべてのECMA標準キーに対応する異なる本当の鍵を持っているので、我々は、彼らのどちらかを信頼していないだろう、私たちのアセンブリを信頼しません。それはどんなものでなければなりません。

一方、00000000000000000400000000000000が実際の有効な公開鍵と一致しないということは、それが他の公開鍵と衝突することができないことを意味します。

+0

+ジョンハンナ、詳細な説明をありがとう!私はキーが何らかの形で特別だと思っていましたが、今はどのように見えますか? –

関連する問題