Dividir la clave simétrica para poder cifrar usando la clave pública RSA de 1024 bits

0

La aplicación que estoy escribiendo genera una clave simétrica de 256 bits cada vez que quiere comunicarse con el servidor, encripta los datos y los envía al servidor. Esto es para evitar almacenar la clave simétrica en la máquina. Ahora, para cifrar la clave simétrica, estoy usando una clave pública RSA 1024 instalada en la máquina cuya clave privada reside en el servidor. La aplicación envía la clave simétrica cifrada también al servidor.

Ahora, el límite de tamaño para el cifrado con una clave pública de 1024 bits con PKCS # 1 v1.5 es de 117 bytes. ¿Es seguro dividir la clave simétrica en varias partes y cifrarlas por separado utilizando la clave pública y enviarlas al servidor? En el lado del servidor, los descifro utilizando una clave privada, construyo la clave simétrica de 256 bits y descifro los datos.

¿Este esquema es seguro? Pido disculpas si encuentras esta pregunta tonta.

    
pregunta Sumeeth 30.07.2013 - 21:34
fuente

1 respuesta

4

En primer lugar, 256 bits son 32 bytes , que tienen menos de 117 bytes, por lo que se ajusta y no hay necesidad de ningún tipo de división.

Se podría argumentar que es inútil tener una clave de 256 bits para el cifrado simétrico si está protegida con una clave RSA de 1024 bits, porque, debido a su estructura matemática (la estructura que permite la clave pública / privada magia), la clave RSA es de una resistencia mucho menor contra los ataques, hasta la fuerza relativamente baja de "aproximadamente" 80 bits (que todavía está fuera del alcance de lo que se puede hacer ahora, pero al menos una máquina que rompe 1024 bits La clave RSA puede ser diseñada y calcular su precio, a diferencia de una búsqueda de fuerza bruta en un espacio de clave simétrica de 256 bits, que está muy por encima de la ciencia e incluso de la ciencia ficción).

El tipo de división que está solicitando no sería trivial de hacer de manera segura. Esto requeriría un análisis cuidadoso. A mi entender, todavía no se ha realizado un análisis de este tipo porque no hay una situación práctica que lo exija.

Pero, lo más importante, no debes reinventar la rueda . Establecer una comunicación segura entre un cliente y un servidor, con un intercambio de claves y luego un cifrado simétrico, es muy complicado para hacerlo correctamente. Existe una solución estándar llamada SSL (bueno, ahora se llama TLS, pero es lo mismo). Este protocolo se ha roto, reparado, analizado y optimizado durante casi dos décadas, y ahora parece bastante seguro. Es muy dudoso que usted (o, para el caso, cualquier ser humano) pueda producir algo tan bueno (o al menos "no peor") por usted mismo, en mucho menos tiempo. Hay miles de millones de detalles de diseño e implementación que pueden salir mal. Así que haz lo inteligente, usa SSL; aún más inteligente, use una implementación existente de SSL en lugar de escribir la suya. Te ahorrará muchas preocupaciones, tiempo y dinero.

    
respondido por el Thomas Pornin 30.07.2013 - 21:52
fuente

Lea otras preguntas en las etiquetas