2010-03-27 20 views
10

Para evitar que alguien capture mis datos fácilmente, guardo en caché los datos de mi servicio como archivos cifrados (básicamente protección de copia).Cómo almacenar de forma segura la clave de cifrado en un ensamblado .NET

Sin embargo, para hacer esto, debo almacenar la clave de cifrado dentro del ensamblado .NET para que pueda cifrar y descifrar estos archivos.

Conociendo herramientas como el Reflector .NET de Red Gate que puede sacar mi llave, tengo la sensación de que esta no es una manera muy segura de hacerlo ... ¿hay alguna mejor práctica para hacer esto?

Respuesta

11

Tiene que decidir qué nivel de riesgo es aceptable. No hay una manera "segura" de hacer esto.

Si el riesgo de que alguien use un reflector, o simplemente abra el ensamblado utilizando la clase System.Reflection.Assembly y atrape el recurso de esa manera, es demasiado grande, entonces su siguiente paso es probablemente descargar la clave del servidor cuando comienzas

Entonces alguien tendrá que hacer algo como depurar mientras usa su código y agarrar la llave de esa manera. Puede caducar todo lo almacenado en caché y cambiar las claves. Puede hacer que cada individuo tenga sus propias claves para proteger los datos de un usuario de otro usuario.

Puede hacer muchas cosas, pero si su objetivo es evitar que alguien pueda descifrar la información que un ensamblaje que está colocando en su máquina tiene la capacidad de descifrar, debe saber que es prácticamente imposible. Todo lo que realmente puede hacer es elevar el costo de piratear sus claves/datos; no puedes detenerlo

+0

+1 para señalar la inutilidad y el costo para el pirata informático, pero también debe tratar de minimizar el impacto (ver mi respuesta para intentar explicar lo que quiero decir aquí) – lexu

+0

Sí, después de leer su publicación y dar algunos pensaron, pensé que todo se reduce a una evaluación de costos/riesgos. Se me ocurrió un plan que probablemente desanime a la mayoría de las personas a intentarlo, salvo el 5-10% superior de usuarios expertos en computadoras, que es un riesgo "aceptable". – Alex

+0

Estoy contento. Probablemente tomaste la decisión correcta y, si no, siempre puedes cambiarla. ;) –

0

No se puede impedir decription, pero se puede prevenir la re-cifrado de datos falsificados:

Mientras que su código se ejecuta en un ordenador accesible por los demás, no hay ninguna manera se puede evitar que el examen del programa. Sin embargo, la descompilación y el análisis cuestan tiempo. Como señala MaxGuernseyIII, todo se trata de niveles de amenaza aceptables.

En su caso, el problema no es tanto que un pirata informático pueda descompilar su código, sino mucho más que puedan cambiar los datos que desea proteger (a quién pertenece la licencia).

Para que pueda usar un método public key cryptography para encriptar los datos. De esa forma el hacker puede leer, pero no puede volver a encriptar.

+0

Public Key Criptography no ayudará aquí, por lo que puedo decir (y también, nunca se usa directamente un sistema PK (al menos RSA) para cifrar datos, sino que solo se debe utilizar para cifrar claves a un algoritmo simétrico (como AES)). –

+0

Incluso entonces, un hacker lo suficientemente hábil puede sortearlo. Desarma, intercambia tu propia llave, boom. Las cosas cifradas son de repente legibles. Puede evitar que esos datos sean realimentados al servidor firmándolo en el lado del servidor, aunque ... tiene razón al respecto. Todo depende de cuál es la necesidad real; como es el caso con tantas de estas preguntas. –

+0

No hay problemas de reencriptación, los archivos en caché son fragmentos de sonido que los usuarios pagan para obtener acceso, y cuando caduca su suscripción, no quiero que puedan acceder a ellos más. – Alex

0

Como Max insinúa, debe considerar un modelo de amenaza.

¿Qué tipo de atacantes te preocupa? (Es legítimo preocuparse por algunos, y no tan legítimo como para preocuparse por los demás). Las categorías típicas podrían ser "usuarios no expertos en computadoras que compraron programas", "personas dedicadas dispuestas a pasar horas en una solución", "usuario casual que sabe cómo encontrar fisuras en línea", etc.

Dependiendo de su situación concreta las soluciones pueden ser diferentes

Un elemento interesante/triste a tener en cuenta, es que si su producto es popular, solo se necesita una o dos personas dedicadas para sentarse y romperlo y luego liberar el parche para todos. Esta es la naturaleza del software, supongo, y es un problema no resuelto cuando toda la aplicación se ejecuta en su máquina.

Claramente, la implicación es que no es un problema si su aplicación se ejecuta como un sitio web, es decir, está en una máquina de su control.

Sé que esta no es una respuesta particularmente útil.

+1

¿Quisiste decir que insinué que consideras un modelo de "amenaza"? ;) –

+0

@MaxGuernseyIII: Oops ... No hay premios por adivinar en qué estaba trabajando mientras escribía esa publicación: P –

+0

Dang. Esperaba una cinta ... –

Cuestiones relacionadas