9

わかりました、私はすでにこれを読んだので、私はばかでなければなりません: http://www.csharp411.com/net-assembly-faq-part-3-strong-names-and-signing/

そして、私はまだそれを理解していません...

プロジェクトのプロパティを開いて [署名] タブに移動し、[アセンブリに署名する] をオンにして、パスワードを使用して新しいアセンブリを生成するとします。公開鍵と秘密鍵の両方を含む .pfx 拡張子を持つ厳密な名前の鍵ファイルが作成され、VS はコンパイル時にアセンブリにデジタル署名しますよね?

秘密鍵はどうですか?非公開にして、開発者である私だけがそれを持っているべきではありませんか? アセンブリは公開キーのみで署名されるべきではありませんか?

誰かが私にこれを説明できますか? 基本的に、私は自分のプロジェクトのアセンブリに署名し、アセンブリが本当に私によって開発されたものであるかどうかをユーザーが確認できるようにしたいと考えています.

4

4 に答える 4

8

あなたは基本的に正しいです。

鍵ペアを作成し、署名に使用します。ただし、pfx (または snk) ファイルは出荷しないでください。このファイルには公開鍵と秘密鍵の両方が含まれているため、安全に保管する必要があります。

公開キーは、署名プロセスの一部としてアセンブリに追加されます。

この署名は、アセンブリがアプリケーションに読み込まれるときにチェックされます。エンド ユーザーは GAC で公開鍵トークンを確認することもできますが、これは実際には便利なプロセスではありません。そして、何らかの方法で公開鍵トークンを伝える必要があります。

そして、全体の信頼性は、キー ファイルを非公開に保つ能力と同じくらいです。

また、理想的には、会社ごとに 1 つのキーのみを持つ必要があることに注意してください。(多くの)同僚と共有することを心配している場合は、遅延署名を調査してください。

于 2009-07-31T20:37:18.013 に答える
4

デジタル署名では、バイナリのハッシュを計算し、生成したキー ペアの秘密キーを使用して生成したハッシュを暗号化します。これに加えて、VS は公開キーもアセンブリに追加します。これがクライアント側で実行されると、ランタイムはアセンブリ内の公開キーを使用して署名 (ハッシュ) を復号​​化し、これをクライアントで計算されたバイナリのハッシュと照合します。それらが一致する場合、バイナリが改ざんされていないことを意味します。

于 2009-07-31T20:47:05.527 に答える
2

アセンブリ署名は、公開鍵暗号(PKI)に基づいています。簡単に言えば、一般的な概念は、PKI を使用して何かに暗号署名する場合、署名には秘密鍵が使用されますが、署名の検証には公開鍵が使用されるということです。秘密鍵は署名の検証には使用できず、作成のみに使用できます。公開鍵は署名の作成には使用できず、検証のみに使用できます。

そのため、秘密鍵を安全かつ秘密に保つことが非常に重要です。最高レベルのセキュリティを維持し、顧客に最高レベルの信頼性を提供したい場合は、おそらく遅延署名を使用し、1 人の個人または部門に完全な公開/秘密キー ペアの管理を任せるのが最善でしょう。 . 開発者は秘密キーにアクセスできません。遅延署名オプションを使用して、セキュリティと信頼性を損なうことなく厳密な名前のアセンブリを開発できます。

于 2009-07-31T20:40:12.717 に答える
1

署名 = 秘密鍵の検証を使用してアセンブリの SHA1 ハッシュを暗号化する
= 公開鍵で復号化された署名をアセンブリの計算されたハッシュと比較する

したがって、PublicKey を持っている人は誰でもアセンブリを検証できますが、PrivateKey を持っている作成者だけがアセンブリに署名できます。

PublicKey トークン = リトルエンディアン バイト順の PublicKey の SHA1 ハッシュの最後の 64 ビット。

于 2011-07-08T22:20:27.067 に答える