secretos ocultos misterios los biblia encryption obfuscation

encryption - ocultos - los secretos de la biblia



¿Cómo se esconden las claves secretas en el código? (10)

Me he preguntado por algún tiempo cómo un software esconde claves secretas de tal manera que no pueden ser descubiertas trivialmente. Solo algunos ejemplos:

  • El software del reproductor de DVD esconde claves CSS
  • El software con números de serie / códigos de registro oculta claves / hashes usados ​​para validar los números de serie

Obviamente, estos programas hacen algo más que solo tener la clave en un byte [], ya que eso haría que sea más 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 encontradas fácilmente?


Creo que esta es una de las principales razones por las que DVD y BluRay se rompieron 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.


Cuando comenzamos a desarrollar nuestro software, creamos 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 una pequeña cantidad de estos usuarios se convierta en clientes de pago (es decir, comprando soporte técnico o solicitando 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?


La conclusión es que no puedes. 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, eso también es una tontería. 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 mantenerse 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 " Criptografía Aplicada " por Bruce Schneier para más información.


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

Evita esconder secretos en el software a toda costa: la ofuscación solo te llevará tan lejos. 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.


No puedes 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.


No puedes, es imposible. Cualquier atacante que tenga acceso a la máquina de destino podrá desmontar 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 hacer que el usuario la escriba manualmente cuando la necesite.


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.


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.


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).


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étera etcétera.

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 puedes detener a nadie, solo frenarlos. 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.

PD. 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.