Se você só precisa dele para o seu site, você pode adicioná-lo ao web.config do seu site. Se houver vários sites / aplicativos que precisem usar a mesma machineKey para criptografar / descriptografar, é nesse momento que você usaria um arquivo de configuração no escopo da máquina.
E sim, eles devem ser iguais em todos os servidores do farm, e você deve fazer isso para cada machine.config da pasta .NET (.NET 2.0 + 4.0 e x86 + x64, portanto, você pode estar atualizando quatro arquivos ).
Aqui está um código de exemplo que você pode usar para gerar suas chaves:
/// <summary>
/// http://msdn.microsoft.com/en-us/library/w8h3skw9.aspx
/// </summary>
public static string CreateMachineKey(int characterLength)
{
/*
* decryptionKey:
* DES: 64 bits (16 hexadecimal characters)
* 3DES:192 bits (48 hexadecimal characters)
* AES: 128 bits (32 characters), 192 bits (48 characters), or 256 bits (64 characters)
*
validationKey:
AES requires a 256-bit key (64 hexadecimal characters).
MD5 requires a 128-bit key (32 hexadecimal characters).
SHA1 requires a 160-bit key (40 hexadecimal characters).
3DES requires a 192-bit key (48 hexadecimal characters).
HMACSHA256 requires a 256-bit key (64 hexadecimal characters).
HMACSHA384 requires a 384-bit key (96 hexadecimal characters).
HMACSHA512 requires a 512-bit key (128 hexadecimal characters).
*/
byte[] byteArray = new byte[characterLength / 2];
RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
rng.GetBytes(byteArray);
StringBuilder sb = new StringBuilder(characterLength);
for (int i = 0; i < byteArray.Length; i++)
{
sb.Append(string.Format("{0:X2}", byteArray[i]));
}
Debug.WriteLine(sb);
return sb.ToString();
}
Aqui está um exemplo de um machine.config:
<system.web>
<machineKey
decryption="AES"
decryptionKey="D416EFCFEC011CC3A8F0F72A15E7EF725AA39FDBCE3CA361"
validation="HMACSHA256"
validationKey="EF4BFB4B2E1A9AB427430897A13528E4530A231112014E070B246DCA7383EB7F4163D685F590E9B54005F5215AD3BA7CE4EA7D404FE310C543D100D09CC00AE2"/>
</system.web>
Arquivos:
% SYSTEMROOT% \ Microsoft.NET \ Framework \ v4.0.30319 \ CONFIG \ machine.config
% SYSTEMROOT% \ Microsoft.NET \ Framework64 \ v4.0.30319 \ CONFIG \ machine.config
% SYSTEMROOT% \ Microsoft.NET \ Framework \ v2.0.5727 \ CONFIG \ machine.config
% SYSTEMROOT% \ Microsoft.NET \ Framework64 \ v2.0.5727 \ CONFIG \ machine.config