2009-04-18 14 views
37

Me he preguntado por algún tiempo cómo algún software oculta las claves secretas de tal manera que no puedan ser descubiertas trivialmente. Sólo algunos ejemplos:¿Cómo se ocultan las claves secretas en el código?

  • software de DVD esconde claves CSS
  • software con números de códigos de serie/registro esconde llaves/hashes utilizados para validar los números de serie

Obviamente, estos programas hacen algo más que simplemente tener la clave en un byte [], ya que eso haría que sea fácil robar sus claves y generar sus propios números de serie, etc.

¿Qué tipo de estrategias se utilizan para ocultar estas claves para que no puedan ser encontrado fácilmente?

+2

Pero, ¿cómo lo hace Adobe con Photoshop, por ejemplo? – Jeena

+17

Una palabra: sin éxito. – dmckee

Respuesta

35

Las razones por las que esas claves secretas se descubrieron tan fácilmente se deben a que estaban ocultas en el software.

Evita ocultar secretos en el software a toda costa: la ofuscación solo te llevará hasta ahora. Pregúntese esto: ¿Qué tan bien puedo esconder una clave en el software de alguien con acceso completo al desensamblador, modo de usuario y depuradores en modo kernel, y sin trabajo diario? Es solo cuestión de tiempo antes de que se agriete.

+22

¿Responde esto a la pregunta? –

+1

Como dijiste, "es solo cuestión de tiempo antes de que se rompa". Esta es una de las razones por las que esta estrategia podría ser aceptable, considerando que esta clave caducará antes que las claves protegidas por hardware. – kdmin

1

No siempre necesita una clave para validar una licencia.

Pero ignorando ese hecho, su clave también puede ser el resultado de otra función. En realidad, no almacena un valor clave específico, sino que tiene una función que genera la clave sobre la marcha (siempre el mismo resultado). Aunque no es imposible, es mucho más difícil de encontrar ya que no estás buscando un valor, pero tienes que descubrir que es una ecuación.

+7

Pérdida de tiempo. Cualquier cracker simplemente tomará el resultado de la función directamente de la memoria (o tal vez solo copiará la función completa en su keygen).No es una tarea para hacer; solo tiene que obtener la respuesta correcta, sin necesidad de mostrar su trabajo. – Mikeage

0

Ocultar claves secretas en el código no va a ser realmente seguro. Como puede haber notado DVD y la mayoría de los registros de números de serie de software son pirateados a diario. Si realmente desea proteger algo, necesita usar el cifrado de clave pública.

+3

El cifrado de clave pública no es una solución. Del mismo modo que debe protegerse la confidencialidad de las claves privadas, la integridad de las claves públicas necesita protección. Los mecanismos comunes son hardware con contramedidas de manipulación física o una clave secreta basada en contraseña. – erickson

2

Cuando comenzamos a desarrollar nuestro software, hemos creado un archivo de licencia con fecha. Entonces, nos dimos cuenta de que no muchas personas están interesadas en comprar nuestro software. Entonces, decidimos regalarlo gratis. Mucha más gente comenzó a preocuparse, al menos, por probar nuestra obra maestra. Finalmente, abrimos nuestro software. Muchos más usuarios comenzaron a usarlo. Ahora solo esperamos que un pequeño número de estos usuarios se convierta en clientes de pago (es decir, comprando soporte técnico o pidiendo personalización).

La conclusión es que, si alguien quiere descifrar su software, lo hará de todos modos. ¿Realmente vale la pena perder el tiempo tratando de protegerlo con esta clave secreta oculta?

+1

¿Cuál es su software? – shoosh

+8

Todo el proceso de su negocio parece bastante atrasado y ad-hoc. – Hejazzman

5

No puede ocultar una clave para siempre. Pero seguramente puede hacer que sea difícil de encontrar. Algunos enfoques son cifrar la clave en la memoria, mantener copias múltiples (tal vez encriptadas de forma diferente) que se comprueban entre sí, dejar copias ficticias para acceder, almacenar la clave en un formato extraño, etc. Ninguna de ellas funcionará si alguien realmente quiere su clave, pero al menos puede disuadir a un atacante casual/inexperto.

+0

Normalmente no es tan difícil para las personas encontrar claves incluso ocultas si están decididas a hacerlo. –

-2

Creo que esta es una de las principales razones por las que DVD y BluRay se rajaron tan rápido. Creo que la única forma en que realmente podrían evitar que la persona promedio sea capaz de copiar digitalmente películas caseras es si crearon un medio que no tenía licencia para su uso en computadoras, y solo podría usarse en reproductores certificados. Cortaría la parte del mercado que quería ver películas en sus computadoras y laptops, pero probablemente dejaría de tener rasgaduras digitales perfectas por un poco más de tiempo, y evitaría que la persona promedio pueda hacerlo.

6

La conclusión es que no se puede. Ver cualquier otro comentario aquí por las razones por qué. Incluso el software de encriptación como PGP/GPG almacena las claves en un archivo, y luego solicita encarecidamente que esos archivos se guarden en una unidad flash en una caja fuerte, o en otro lugar seguro. Se descubrirán las claves almacenadas como parte del código ejecutable.

De hecho, si intenta encriptar algo en una máquina cliente que será descifrado por el cliente como parte de las operaciones normales, también es un tonto. Las máquinas cliente son intrínsecamente inseguras, y no puede controlar lo que van a poder hacer con sus datos.

Si está intentando autenticarse, en cambio, mire la autenticación basada en Internet con inicios de sesión en un servidor, o algún tipo de código clave generado que se utilice para validar el software.

Las claves secretas como parte de un par de claves público-privado deben guardarse en los archivos de datos que se pueden proteger. Las claves simétricas deben generarse sobre la marcha como claves de sesión y luego descartarse. Siempre asuma que cualquier persona que tenga una clave secreta o de sesión en su computadora podrá descubrirla y usarla en contra de sus intenciones.

Lea "Applied Cryptography" por Bruce Schneier para obtener más información.

+1

La declaración "Incluso el software de cifrado como PGP/GPG almacena las claves en un archivo" es engañosa. PGP encripta esas claves usando una frase de contraseña conocida solo por el usuario. PGP también utiliza memoria segura para las claves que garantiza que nunca se almacenen en caché en HD y PGP realiza grandes esfuerzos para dificultar la búsqueda de una clave mediante la inspección de memoria. Si pudiera bajar esta respuesta, lo haría. – MrEvil

+0

Mi punto es que no hay datos secretos almacenados en el código fuente. Depende del usuario asegurar sus propias claves secretas. Incluso con una frase de contraseña en las claves secretas, una vez que una parte maliciosa tiene acceso al archivo de clave secreta, se acabó el juego. Almacenar una clave secreta en cualquier lugar accesible para cualquier persona que no sea una parte confiable provocará dolor, ya sea el exe, la RAM o un archivo. –

12

Simplemente ocultas la clave en algún lugar y la descifras cuando la necesitas. Usar la llave "de forma segura" es la parte complicada. Las galletas pueden establecer un punto de interrupción en el lugar donde usa la clave descifrada y volcarla. Podrían escanear su código en busca de patrones que muestren que está utilizando un algoritmo criptográfico conocido (la mayoría de los algoritmos tienen tablas precalculadas). etc. etc.

Es por eso que necesita hacer todo el software ejecutable difícil de analizar. Para esto, usa empaquetadores ejecutables, ejecuta el código en una máquina virtual, comprueba la integridad, etc. Todo esto para ralentizar la depuración y modificar su código.

Como la mayoría de las personas aquí señalan que no se puede detener a nadie, simplemente disminuya la velocidad. Iría a un foro de cracker y pediría sugerencias sobre la problemática clave de la ocultación. Lo más probable es que sean útiles si preguntas amablemente.

ps. La clave pública de cifrado no ocultará la clave mejor, pero podría hacer que sea más difícil (o teóricamente imposible) crear un generador de claves, si está haciendo un esquema de licencia.

1

Si puede pagarlo, lo mejor es almacenar la clave privada en un token USB criptográfico. La clave es de solo escritura, es decir, puede configurarla pero no leerla. El token hace las operaciones criptográficas internamente, en su hardware. Se vuelve muy complicado recuperar la clave (si el token no tiene una vulnerabilidad conocida, que no es el caso con las antiguas).

+0

Este tipo de protección está solo un nivel más arriba que el software. Puede replicar la llave USB usando cualquier descarga de memoria. Si sigue adelante y trata de verificar a los usuarios usuarios en línea con una identificación de clave determinada, entonces también puede aplicar un parche a la red. No hay una forma verdadera de proteger el código. La mejor manera de hacerlo es decepcionando a las personas que intentan descifrarlo, y haciendo una renovación del sistema de manera regular. El pequeño marco de tiempo entre usted y el que puede descifrarlo es su único amigo aquí. – erm3nda

+0

La mejor forma de decepcionar a los usuarios para que utilicen software descifrado es que es el primero en publicar un crack y poner muchos virus en él. Al hacer eso, puede decepcionar a alguien más importante que el que puede descifrarlo ---> el usuario que quiere usar su software. Haga un plan de precios asequible y tendrá mucho más éxito que ocultar claves. – erm3nda

0

No puede, es imposible. Cualquier atacante que tenga acceso a la máquina de destino podrá desensamblar su código para encontrarlo, o encontrar el archivo de clave en la máquina de destino, etc.

La ÚNICA forma de garantizar que la clave de cifrado sea segura es mediante haga que el usuario lo escriba manualmente cuando lo necesite.

Cuestiones relacionadas