Skip to content

MS_Assembly

nishi_74322014 edited this page Aug 21, 2026 · 1 revision

アセンブリ

概要

.NET Framework においてアセンブリとは、コンパイルされたコード ライブラリ(EXE、DLL)。

の単位となる。

移行メモ(誤記): 原文の「NET Framework」は
.NET Framework の先頭ピリオド脱字と判断し修正した。

補足(本ページの位置づけ): 本ページは
コンポーネント技術の系譜(COM → .NET アセンブリ)の文脈で、
署名とセキュリティ管理の単位としてのアセンブリを扱っている。

アセンブリの構造(マニフェスト、メタデータ、IL)や
参照解決の話は .NETアセンブリ を参照。

【アセンブリが「単位」であるもの】
  配置        … EXE / DLL としてまとめて配る
  バージョン  … AssemblyVersion はアセンブリ単位([.NETアセンブリのバージョン情報](MS_DotNetAssemblyVersion))
  型の境界    … internal はアセンブリ内から見える
  セキュリティ… 署名・信頼の単位(本ページ)

セキュリティ管理

アセンブリ署名

厳密名

  • アセンブリ署名をすることにより厳密名
    (アセンブリのハッシュを秘密鍵で暗号化した値と復号化のための公開鍵)を
    持つ状態になる。
  • 厳密名は、アセンブリの偽装攻撃を防ぐコード・アクセス・セキュリティや、
    アセンブリ名称の一意性を保証し GAC から対象のアセンブリを検索するなどの機能で使用される。

補足(厳密名は「同一性」であって「真正性」ではない): 誤解が多い点なので
整理しておく。

厳密名(Strong Name)は、

できること できないこと
アセンブリ ID を一意にする(名前 + バージョン + カルチャ + 公開鍵トークン) 発行元が誰かを証明する
同じ ID の別物を GAC に混在させない 改ざんされていないと信頼できる形で保証する
バインドを厳密に固定する

「偽装攻撃を防ぐ」という原文の記述は、
**「別のアセンブリが同じ名前で成りすますのを防ぐ」**という意味では正しいが、
証明書のような第三者による発行元の保証は無い
(公開鍵ペアは誰でも自由に作れる)。

発行元を証明したいなら、**Authenticode によるデジタル署名**を
併用する必要がある。この 2 つは目的が異なる。

厳密名 Authenticode 署名
目的 ID の一意性・バインドの固定 発行元の証明・改ざん検出
自分で生成(sn -k CA が発行した証明書
検証 ランタイム OS / SmartScreen
タイムスタンプ なし あり(証明書失効後も有効)

補足(.NET Core 以降の扱い/最新化): 厳密名の役割は、
.NET Core 以降で大きく縮小している。

.NET Framework .NET Core / .NET
GAC あり(厳密名が必須) 廃止(アプリごとに配置)
署名の検証 ロード時に検証する 検証しない(ID の一部として見るだけ)
バージョン バインド 厳密(bindingRedirect が必要) 緩やかdeps.json が解決)
部分信頼(CAS) あり 廃止

つまり、.NET Core 以降では厳密名はセキュリティ機構ではなく、
単なる ID の一部
である
(署名の検証をしないため、改ざん検出の役には立たない)。

それでも厳密名を付ける理由は、主に次の 2 つに限られる。

  • 厳密名付きアセンブリから参照されるライブラリを作る場合
    (.NET Framework では、厳密名付きは厳密名付きしか参照できない)
  • InternalsVisibleTo で公開鍵を指定する場合

新規に .NET 用のライブラリを作るだけなら、
厳密名は必須ではない。改ざん検出が要るなら Authenticode を使う。

デジタル署名

  • 通常のデジタル署名を行うことも可能。
  • ClickOnceなどの技術で必要になる。

補足(Authenticode の実務): 配布物に対する
デジタル署名(Authenticode)は、現在も次の場面で必要になる。

場面 理由
ClickOnce マニフェストの署名が必須(自己署名も可だが警告が出る)
インストーラー(MSI / EXE) SmartScreen の警告を減らす
ドライバー 署名が無いと読み込まれない
PowerShell スクリプト 実行ポリシーが AllSigned の場合

要点:

  • タイムスタンプを必ず付けるsigntool /tr)。
    付けないと、証明書の有効期限切れと同時に署名が無効になる。
  • EV コード署名証明書は SmartScreen の評価が即座に得られるが、
    ハードウェア トークン(HSM)での鍵保管が要求される。
  • 署名対象はアセンブリそのもの(厳密名と違い、後付けできる)。

参考

Microsoft Learn


Tags: 移行, Windows, .NET開発

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki

(未着手)

開発基盤部会 Wiki

移行管理: DONETODO

Clone this wiki locally