2012-02-10 2 views
1

アセンブリに署名する強力な名前がアセン​​ブリの内容の何らかのハッシュを使用し、署名後にアセンブリが変更された場合、もう仕事はありません。しかし、私はちょうどそれが構築された後、アプリケーションに余分なWin32リソースを追加する小さなユーティリティを作成し、限り私はそれが強力な名前の署名されたアセンブリがまったく機能を停止させないことを伝えることができます。アセンブリのどの部分が厳密な名前の署名を検証するか

小さなテストアプリケーションを作成しました。このアプリケーションはアセンブリ名だけを出力し、強力な名前を付けて署名し、それに余分なアイコンを追加しました。以下は、このプログラムは次のとおりです。

class Program 
{ 
    static void Main(string[] args) 
    { 
     Console.WriteLine("My name is " + Assembly.GetExecutingAssembly().GetName()); 
    } 
} 

私は、私はまだそれを実行することができ、そしてそれは何の問題もなく私の公開キートークンとそのアセンブリ名をプリントアウトアセンブリ変更後:

My name is TestApp, Version=0.0.0.0, Culture=neutral, PublicKeyToken=cd4a03be895200fa 

今、私の質問厳密な名前の署名は、アセンブリのいくつかの部分をチェックするだけですか?つまり、win32リソースをハッシュしませんか、完全に誤解していますか?署名後に私のアセンブリが変更された場合、動作を停止しないでください。

答えて

3

強力な名前は、アセンブリの識別情報(単純なテキスト名、バージョン番号、文化情報(提供されている場合))と公開鍵とデジタル署名で構成されます。これは、対応する秘密鍵を使用して、アセンブリファイル(アセンブリマニフェストを含むファイル、アセンブリを構成するすべてのファイルの名前とハッシュを含むファイル)から生成されます。

ドキュメントStrong Named Assembliesから、あなたが同じキーを使用してアセンブリに署名し、その名前、バージョン番号や文化を変更しない場合、それは問題なくロードされます場合。

ハッシュは、アセンブリファイルが変更されるのを防ぐために使用されるため、コンパイルされたdll(HEXエディタを使用して)を変更すると、ハッシュは一致しません。 しかし、ハッシュが一致し、アセンブリに正しい署名が付いたらすぐに、署名は緑色に点灯します。

+0

しかし、デジタル署名にはwin32リソースのハッシュは含まれていませんか?なぜなら、アセンブリに署名した後でも、それらを変更するのは完全にうまくいくと思われ、問題なく動作します。署名付きアセンブリが変更された場合の予想される動作は何ですか?それを始めることができるべきか? –

+1

@EinarEgilsson、この実行可能アセンブリをGACにインストールしようとするとどうなりますか? –

+1

@LexLi Ah、ok、そこに私は "強い署名を検証できませんでした"というエラーが出ます。したがって、リソースを変更すると、厳密な名前の署名が破棄されます。面白いことに、.exeはまだ実行することができます、私はそれが失敗するはずだと思ったでしょう! –

関連する問題