Это открытый открытый ключ стандарта ECMA.
Он предназначен для решения трех противоречивых требований:
- Механизм, который гарантирует, что сборки подписаны их создателями и не могли бытьсозданный мошеннической другой стороной.
- Чтобы CLI был определен открыто таким образом, чтобы другие люди могли свободно реализовывать версию (Mono был бы примером из реальной жизни).
- Что естьбыть стандартной библиотекой классов, доступной для каждой версии фреймворка.
Эти три вещи не могут происходить одновременно!
Если я создаю версию .NET(пункт 2), затем мне нужно предоставить версию стандартной библиотеки (пункт 3), которой нужно доверять (пункт 1), поэтому мне нужно подписать ее, чтобы доказать, что я Microsoft.Ой, подождите, я не Microsoft!(опять пункт 2).
Вместо этого происходит следующее:
Я создаю пару открытый-закрытый ключ.Люди, которым доверяют создавать новые версии сборок в моей реализации библиотеки инфраструктуры, имеют доступ к закрытому ключу, открытый ключ может быть известен любому, кто работает над реализацией CLI.
Я отмечаю соответствующие сборки как подписанные ключом, соответствующим открытому ключу 00000000000000000400000000000000
(определенному в стандарте ECMA), хотя на самом деле они были подписаны закрытым ключом, упомянутым выше.
В коде в CLI любая проверка сборки, которая утверждает, что она подписана с ключом, соответствующим открытому ключу 00000000000000000400000000000000
, проверяется с помощью реального открытого ключа.Если это подтвердится, то он может быть подписан только тем, кому мы доверяем в создании этих сборок.
Конечно, среда MS не будет доверять нашим сборкам, Mono не будет доверятьих, и мы не будем доверять ни одному из них, потому что у всех нас есть разные реальные ключи, соответствующие стандартному ключу ECMA.Что и должно быть.
Между тем тот факт, что 00000000000000000400000000000000
не соответствует ни одному действительному открытому ключу, означает, что он не может конфликтовать с любым другим открытым ключом.