¿Cómo se oculta una clave de cifrado en una aplicación .NET?

Estoy desarrollando una aplicación de intranet (C #) que utiliza algunos datos (locales del servidor web) que nos gustaría mantener en privado. Estos datos se cifran (AES) utilizando un repositorio de datos heredado. No podemos evitar totalmente el acceso físico a la máquina.

Claramente, nunca vamos a tener una seguridad perfecta aquí. Sin embargo, queremos hacer que sea lo más difícil posible para cualquier persona obtener acceso no autorizado a los datos.

La pregunta es la mejor manera de almacenar la clave. Cifrarlo en función de alguna ID específica de la máquina es una opción, pero esa información estaría fácilmente disponible para cualquier persona que ejecute una herramienta de diagnóstico en la máquina.

Codificarlo en la aplicación es una opción (es una aplicación única). Sin embargo, los ensamblados .NET son bastante fáciles de descompilar. Entonces, ¿sería mejor ofuscarlo, usar un iniciador de cifrado y compilarlo?

¿O hay una opción que me falta?

Solo para que quede claro, sé que es una causa perdida si alguien está determinado, pero estamos tratando de hacerlo lo más difícil posible dentro de las limitaciones.

Respuestas a la pregunta(3)

Su respuesta a la pregunta