Como você oculta uma chave de criptografia em um aplicativo .NET?

Estou desenvolvendo um aplicativo de intranet (C #) que usa alguns dados (locais para o servidor web) que gostaríamos de manter em sigilo. Esses dados são criptografados (AES) usando um repositório de dados herdado. Não podemos impedir totalmente o acesso físico à máquina.

Claramente, nunca teremos segurança perfeita aqui. No entanto, queremos tornar o mais difícil possível que alguém obtenha acesso não autorizado aos dados.

A questão é a melhor forma de armazenar a chave. Criptografá-lo com base em algum ID específico da máquina é uma opção, mas essas informações estarão prontamente disponíveis para qualquer pessoa que esteja executando uma ferramenta de diagnóstico na máquin

Codificá-lo no aplicativo é uma opção (é um aplicativo único). No entanto, os assemblies .NET são muito fáceis de descompilar. Então, seria melhor ocultá-lo, usar um iniciador de criptografia, compilá-lo?

Ou existe uma opção que me falta?

Só para esclarecer, eu sei que é praticamente uma causa perdida se alguém for determinado, mas estamos procurando torná-lo o mais difícil possível dentro das restriçõe

questionAnswers(3)

yourAnswerToTheQuestion