強力な名前付けとデジタル署名はどちらも、公開鍵暗号を使用してアセンブリの発信元に関する証拠を提供するため、セキュリティポリシーを適用して、アセンブリに付与されるアクセス許可を決定できます。
それらは、技術的な詳細ではなく、解決しようとしている問題が異なります。
厳密な名前の目的は、名前でアセンブリをロードするときに、ロードしていると思われるアセンブリを正確にロードしていることを確認することだけです。これが、強力な名前の唯一の設計上の目的です。「FooCorpから提供されたFrobberバージョン4をロードしたい」とあなたは言います。強力な名前のギアは、Dr。Evil Enterprisesから提供されたFrobberバージョン4と呼ばれる別のアセンブリではなく、実際にそのDLLを正確にロードすることを保証します。
これを実現するために必要なのは、FooCorpの秘密鍵に関連付けられた公開鍵トークンを知っていることだけです。公開鍵トークンが完全にあなたのビジネスであることをどのようにして知るようになるか。その情報を安全に入手できるように設計されたインフラストラクチャはありません。どういうわけか、あなたはそれが何であるかを知っていることが期待されています。
出版社の証明書からのデジタル署名の目的は、身元と信頼の検証可能なチェーンを確立することです。信頼の鎖は、出所が不明または不確実なコードの塊から「信頼されたルート」(オペレーティングシステムを信頼するように構成したエンティティ)まで続きます。いくつかのコードをダウンロードすると、そのコードにはFooCorpからの証明書が付いたデジタル署名があります。証明書を調べると、「このプログラムはFooCorpからのものです。この証明書の正確性は、VeriSignによって保証されています」と表示されます。VeriSignは信頼できるルーツの1つであるため、このコードが実際にFooCorpからのものであると確信できます。
デジタル署名によって解決される問題がどれほど複雑であるかに注目してください。「このコードの塊がこの名前に関連付けられているかどうか」を単純に判断しようとしているのではありません。代わりに、このコードがどこから来たのか、責任があるとされる会社の存在を誰が保証するのかを判断しようとしています。その会社を信頼する必要がありますか?
強力な名前とデジタル署名の違いは、暗号ベースのセキュリティの難しさを強調しています。難しい問題は暗号化ではありません。それはただの数学です。難しい問題は、キーに関する情報の配布を安全に管理し、それらを正しいエンティティに関連付けることです。強力な名前は、非常に小さいが重要な問題を解決しようとするため、重要な管理上の問題はありません。または、むしろ、キー管理の問題をユーザーであるあなたに押し付けます。デジタル署名とは、信頼とIDのはるかに複雑な問題を解決するために、証明書を介した重要な情報の安全な配布を自動化することです。
それは明らかですか?
(すばらしい質問です。これは9月3日に私のブログに掲載されます。)