title: How is Ecma public key mapped to a real public key?
body: <p>Basically, all Microsoft assemblies that are considered standard library like mscorlib.dll include a fake 16-byte public key </p>
  
  <pre><code> 00000000000000000400000000000000
  </code></pre>
  
  <p>It is defined by ECMA-335 (CLI specs) as Ecma/Standard Public Key. It is used to compute Public Key Token b77a5c561934e089. However, in order to create and then later verify the assembly signature (strong name) you need real keys. A real RSA Public Key is always at least 128 bytes. So where is it? </p>
  
  <p>Many such assemblies include AssemblyKeyFileAttribute with the file EcmaPublicKey.snk. But this file contains only 16 bytes for Ecma Public Key itself meaning it is used only for building assembly and not for loading. Also, such assemblies use both 128-byte and 256-byte strong name signatures meaning the Ecma public key has to map into at least two different RSA key pairs of different sizes.</p>
  
  <p>I noticed that the Mono project uses config files where the b77a5c561934e089 is mapped into a real Public Key but Windows probably handles it a different way. I found some old posts related to this issue but none provides any legitimate answers.</p>