Clave de descifrado caducada

1

Entonces, solo soy un programador, no sé mucho acerca de la criptografía, y mi falta de conocimiento en este ámbito. Pero esencialmente, quiero almacenar en caché los datos que podrían ser potencialmente volátiles (es decir, cambiar o eliminar con el tiempo). Una solución que he pensado sería en cifrar los datos (del lado del servidor) y administrar la clave al cliente. Sin embargo, aquí está el problema: caduca dentro de un marco de tiempo determinado (es decir, dos o tres días). Se puede actualizar o renovar, en cada conexión al servidor, pero si la clave no se actualiza, en última instancia, me gustaría que no fuera bueno. Eso significaría que el método de encriptación necesitaría usar el tiempo como un factor (por lo tanto, tal vez usar un operador de módulo / piso / redondeo basado en la hora actual para brindarle los datos / elementos encriptados reales necesarios para desencriptar completamente los datos). Mi única preocupación, por supuesto, es que los clientes pueden modificar la hora actual en su sistema. Tal vez pueda encontrar una fuente digna de confianza para la hora actual.

(Además, entiendo que es fundamentalmente tonto proporcionar datos a un cliente cuando se espera que se lo lleven, pero todavía estoy interesado en encontrar una solución para esto).

¿Alguien sabe algo, o hay algo que pueda orientarme en la dirección correcta / lograr efectos similares a los que estoy buscando?

    
pregunta Full Metal 13.10.2013 - 06:38
fuente

1 respuesta

1

Los datos (incluida la clave en cualquier forma) son pasivos y no pueden verificar la hora actual. Por lo tanto, debe ser una herramienta de descifrado que verificará el tiempo. Teniendo esto en cuenta, puede dedicar tiempo a la clave (y envolverla con una clave estática para aumentar la seguridad).

Sin embargo, el software de descifrado que reside en el lado del cliente se convertirá en un lugar débil. El usuario puede cambiar la hora, pero eso no es un problema: puede usar el protocolo TSP (RFC 3161) para obtener la hora actual del servidor TSP confiable. Sin embargo, la parte que descifra la clave, extrae el tiempo y verifica que se convierte en el enlace más débil. Tendrá que protegerlo seriamente para evitar la despoblación, la descompilación y la consiguiente modificación. Si bien no existe una solución universal para esta tarea, las herramientas como VMProtect (lo menciono porque utiliza la virtualización incorporada) dificultan un poco la vida de los hackers y lo salvarán de los trucos del usuario promedio.

Intentemos inventar el esquema de claves ahora.

La clave de cifrado K1 se utiliza para cifrar los datos. Esa es la clave de sesión aleatoria, posiblemente diferente para cada instalación de cliente.

La clave K2 se utiliza para cifrar K1. K2 se construye como "random_part_X + f (random_part_X + year + day_of_year mod 3), donde f puede ser un HMAC o simplemente un hash (que requiere un pensamiento adicional). Encrypted_K1 y random_part_X se envían desde su servidor cada 2-3 días. está cifrada con la clave K3 "estática" almacenada en su software de descifrado.

Cuando el software del lado del cliente necesita usar la clave K2, descifra K2 y tiene random_part_X. Luego solicita el tiempo de la fuente de confianza y realiza f (random_part_X + year + day_of_year mod 3) reconstruyendo K2. Ahora K2 se utiliza para descifrar el encrypted_k1 recibido y obtener el propio K1. Finalmente, K1 se utiliza para descifrar los datos.

Si el atacante obtiene K1, podrá descifrar todos los datos. Por lo tanto, el esquema (a) debe complicarse aún más, y (b) es posible que desee cifrar diferentes datos con diferentes claves K1. Y luego, una vez más, debe preocuparse por la posible falta de ofuscación, descompilación y depuración del código que obtiene K1.

    
respondido por el Eugene Mayevski 'Allied Bits 13.10.2013 - 20:41
fuente

Lea otras preguntas en las etiquetas