This is preliminary documentation and subject to change.
To comment on this topic, please send us email at ngwssdk@microsoft.com. Thanks!
Assigning and Referencing Shared Names
In general, the process of giving an assembly a shared name and later referencing it by that name works as follows:
- Alice wishes to give her new assembly a shared name. She encrypts the hash of the file containing her assembly's manifest with her private key. This "shared name blob" is stored in the PE file containing the assembly manifest.
- When referring to Alice's assembly, Bob includes a "token" that represents Alice's public key in the reference in his assembly's manifest. We store a "token" of the public key rather than the key itself solely for space reasons.
- When Alice's shared named assembly is deployed, the Runtime verifies the shared name signature.
- When binding by shared name at runtime, the runtime compares the key stored in the Bob's manifest with the key Alice used to generate her shared name. If the crypto checks pass and the bind succeeds, Bob can determine that the bits he is getting haven't been tampered with and that they do in fact come from Alice.
As mentioned above, this scheme doesn't make any statements about trust.