Necesita encriptación asimétrica (no firma) donde el servidor encripta y el cliente descifra

1

Así que estoy tratando de construir un servidor de licencias, donde las licencias de las aplicaciones deben verificarse al iniciar sesión o cuando la aplicación se usa. Pero algunas de esas aplicaciones funcionan sin conexión la mayor parte del tiempo, por lo que necesito tener algún tipo de 'almacenamiento en caché' de la última comprobación de la licencia con una fecha en la que la próxima licencia debería verificarse (digamos que cada semana). Por el momento, estoy almacenando esto en la base de datos de la aplicación, pero debo asegurarme de que el usuario de la aplicación no pueda cambiar esa 'próxima fecha de verificación'.

Entonces se me ocurrió la siguiente idea: cuando una licencia necesita ser verificada (porque ha pasado más de una semana), el servidor verificará la licencia y decidirá la "próxima fecha de verificación". Luego cifrará esa fecha y la enviará a la aplicación que la almacenará en la base de datos. Luego, cuando se utilizará la aplicación, obtendrá esa fecha cifrada, luego la desencripta y la verifica. Entonces, cuando la aplicación intenta cifrar una fecha por sí mismo, no podrá descifrar porque no usa la misma clave que el servidor usó para cifrar.

Al principio pensé que tenía una clave privada en el servidor y una clave pública en la aplicación, pero luego no sería encriptación sino en firma, y eso implicaría enviar la fecha en texto claro, que no es lo que hago. querer. ¿O hay una manera de usar la firma que la aplicación no puede cambiar la fecha?

    
pregunta kev02468 08.10.2015 - 10:20
fuente

1 respuesta

4

A pesar del título de su pregunta, todavía desea firmas digitales, no cifrado. Desea algo que el cliente pueda verificar pero no producir por sí mismo; esto es exactamente de lo que se tratan las firmas. Tratar de pensarlo en términos de cifrado solo generará más confusión.

El funcionamiento básico de un archivo de licencia es que contiene cierta información elegida por el proveedor que firmó el proveedor; el cliente utiliza la clave pública del proveedor para verificar que el archivo de licencia es genuino, luego aplica cualquier política que esté encarnada por la información en el archivo de licencia. Normalmente, un archivo de licencia identificará al cliente y el rango permitido de fechas de uso, posiblemente junto con un identificador único para la máquina en la que se puede ejecutar el software. El código del cliente se negará a trabajar si la fecha actual no está dentro del rango permitido, o si el identificador de la máquina local no coincide con lo que se especificó en el archivo de licencia.

Como se señaló, las licencias siempre se pueden anular en el caso de software , porque el código que aplica la política de licencia se ejecuta en la máquina del usuario. Si el usuario desea omitir la licencia, puede aplicar ingeniería inversa al código para simplemente desactivar la verificación de la licencia; Esto es tan imposible de prevenir como la copia de música y video. Cambiar el reloj local es la forma más simple de "ingeniería inversa", e incluso los usuarios con muy poco conocimiento de la programación pueden hacerlo. Si desea aplicar las reglas de uso y las licencias, entonces haga que la parte del código se ejecute en los servidores su , no en la máquina del usuario (pero luego, el software ya no se pueda usar cuando está desconectado).

    
respondido por el Thomas Pornin 08.10.2015 - 11:12
fuente

Lea otras preguntas en las etiquetas