Thursday 25 April 2013

Simply Snassie - The Story of Strong Named Assemblies in .NET

Quick Question: What is a strong-named assembly (Snassie, or SNA) and why do you need it?

Do you know the answer? Read the next section to find out more!

Strong named assembly (SNA) = Assembly SIGNED with a STRONG NAME

A Strong-named assembly is simply an assembly - SIGNED with a strong name (containing amongst other things, a digital signature). Perhaps a more apposite name might have been, Strong SIGNED assembly (SSA).  SNA in this context should not be confused with IBM's SNA (Systems Network Architecture, a protocol stack for networking, introduced in 1974).

STRONG NAME may contain Culture Information, and WILL contain PUBLIC KEY and DSig

The strong name is like the "unique id" for the assembly; comprised of its text name, version number, culture information (if applicable) plus public key and digital signature. Think of it as a STRONG character name in a movie, like Dr Hans Zarkov, or Ming the Merciless, in the Flash Gordon movie (1980), and the digital signature being a component of the strong name e.g. simply Hans, or Ming.

By the way, I generally don't sign my assemblies. Why do I need to understand strong-named assemblies?

As it turns out, reading MSDN articles on .NET Security won't make a load of sense if you don't know what strong-named assemblies are. Further, at some point, you are bound to encounter an exception somewhere or other that requires you to understand what Snassies are from A-Z.

What other things do I need to know about SNAs?

A strong-named assembly can only reference other strong-named assemblies.

Remind me how digital signatures work.

A digital signature verifies the integrity of data passed from generator to recipient (a.k.a. the "verifier"). The verifier has access to the sender's public key.

What's the underlying algorithm for generating signatures in this SN infrastructure.

Strong names require public key cryptography. This begs the question: Quelle Algorithme?  Currently, the SN implementation used the RSA public key algorithm and the SHA-1 hash algorithm (SHA=Secure Hash Algorithm).

No comments: