Construtor RSACryptoServiceProvider (RSACryptoServiceProvider) travando no .NET 3.5 para determinados nomes de chaves

Se você olhar o código abaixo, não está fazendo nada além de criar uma nova instância de umRSACryptoServiceProvider. O nome do contêiner de chave é inicializado a partir de uma propriedade que cria um nome com base em vários parâmetros. Eu adicionei valores codificados neste código de demonstração.

O código está sendo executado em uma instalação do servidor Windows 2008 R2 e funcionou durante meses com um valor constante sendo retornado para o nome do contêiner de chave.

Alguns dias atrás, o código parou de funcionar e estamos enfrentando a exceção abaixo. Usar o nome do contêiner de chave que foi usado por meses não funciona mais. O servidor foi reinicializado, o IIS foi reiniciado - sem sucesso. Somente depois de alterar o nome da chave, ele começou a funcionar novamente.

Alguém pode explicar por que isso está acontecendo e como consertá-lo? Tanto quanto eu posso ver, este código não creta quaisquer objetos persistentes. Por que ainda falharia depois de uma reinicialização? Do MSDN (http://msdn.microsoft.com/de-de/library/ca5htw4f.aspx) eu li que o construtor "construtor cria ou reutiliza um contêiner de chave especificado usando o campo KeyContainerName". Faz o"reuso"Quer dizer, ele está armazenando o material em cache em algum lugar e, ao fazer isso, travou e agora está preso a uma versão corrompida em cache? Observe também que o mesmo nome de chave ainda é usado em muitas outras máquinas - sem problemas em lugar algum.

Esta é a linha que está falhando:

using ( RSACryptoServiceProvider rsa = new RSACryptoServiceProvider( this.oCspParameters ) )
{
}

Estes são os CspParameters usados:

private readonly CspParameters oCspParameters = new CspParameters
{
  Flags = CspProviderFlags.UseMachineKeyStore,
};

this.oCspParameters.KeyContainerName = oProfile.KeyName;

E esse é o nome da chave:

public string KeyName
{
    get
    {
        return string.Format( "API-{0}-v{1}", "TestClient", "1.0.0.0" );
    }
}

E finalmente a exceção:

CryptographicException: An internal error occurred.
Service Operation: ISessionService.Identify #f173250b-d7ac-45d5-98ed-7fffcf37d95a
at System.Security.Cryptography.Utils.CreateProvHandle(CspParameters parameters, Boolean randomKeyContainer)
at System.Security.Cryptography.Utils.GetKeyPairHelper(CspAlgorithmType keyType, CspParameters parameters, Boolean randomKeyContainer, Int32 dwKeySize, SafeProvHandle& safeProvHandle, SafeKeyHandle& safeKeyHandle)
at System.Security.Cryptography.RSACryptoServiceProvider.GetKeyPair()
at System.Security.Cryptography.RSACryptoServiceProvider..ctor(Int32 dwKeySize, CspParameters parameters, Boolean useDefaultKeySize)

questionAnswers(2)

yourAnswerToTheQuestion