2009-03-06 11 views
11

Estoy desarrollando una aplicación de intranet (C#) que utiliza algunos datos (locales al servidor web) que nos gustaría mantener en privado. Esta información está encriptada (AES) usando un repositorio de datos heredado. No podemos evitar totalmente el acceso físico a la máquina.¿Cómo se oculta una clave de cifrado en una aplicación .NET?

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

La pregunta es cómo guardar mejor la clave. Cifrarlo en base a una ID específica de la máquina es una opción, pero esa información estaría disponible para cualquiera que ejecute una herramienta de diagnóstico en la máquina.

La codificación 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, compilarlo?

¿O hay una opción que me falta?

Así que estamos claros, 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.

Respuesta

5

La encriptación está integrada en el sistema de configuración de .NET. Puede encriptar fragmentos de su aplicación/archivo web.config, incluso donde almacena su clave privada.

http://www.dotnetprofessional.com/blog/post/2008/03/03/Encrypt-sections-of-WebConfig-or-AppConfig.aspx

+0

Así lo hice en el pasado. –

+0

Si tiene acceso a la máquina, ¿no puede simplemente escribir una aplicación que haga referencia a las secciones encriptadas y le entregará el texto sin formato? Pensé que esto solo era seguro si no tenías acceso a la máquina. – user74824

+0

@yahoo: tienes razón. – NotMe

2

Si alguien simplemente puede adjuntar un depurador a su programa, no hay absolutamente nada que pueda hacer. No tendrán que resolver sus configuraciones, desmontar su aplicación, etc. Todo lo que tienen que hacer es ejecutar la aplicación, verla usar la tecla, bingo.

La ofuscación no es de ayuda bajo esas condiciones.

La mejor defensa es utilizar hardware para proteger la clave, que hará la criptografía pero no entregará la clave en sí (y a veces se endurece contra ataques como sondeos de cables, exponiendo la memoria a bajas temperaturas/radiación/otras cosas nuevas). IBM hace algunas cosas apropiadas (google IBM-4764) pero no es barato.

3

Hablando en la terminología de la ofuscación, lo que después se se llama escondite constante, es decir, un medio por el cual transformar una constante en, digamos, una serie de funciones y cálculos que se ejecuta en tiempo de ejecución para volver a materializarse dicha constante .

Esto todavía cae dentro del dominio de ofuscación, sin embargo, y es susceptible de extracción de código, donde el atacante simplemente traza el código relevante para esta constante, y lo ejecuta en una aplicación separada para recuperar el valor; o volcar la memoria de la aplicación en el punto correcto para escanearla por el valor deseado.

Hay otro, ligeramente método más avanzado de ocultar, claves criptográficas, en particular, llamado de caja blanca criptografía, que emplea sistemas de cifrado de clave-menos a través de la generación de esencialmente una función de cifrado de una clave dada, hornear juntos. Como su nombre indica, este método ha sido diseñado para ser resistente incluso en un escenario de ataque de caja blanca (el atacante tiene acceso al bytecode y puede inspeccionar y manipular el ejecutable en tiempo de ejecución).

Estos son métodos bastante avanzados para lograr la seguridad en la oscuridad, y podría valer la pena considerar modelos alternativos que no te obliguen a hacer esto en primer lugar.

Cuestiones relacionadas