¿Cómo cifrar una cadena corta en un texto cifrado corto usando un cifrado asimétrico?

3

Estoy usando RSA para cifrar un texto, por lo que mi sistema ya ha generado claves privadas y públicas.

Estas teclas que me gustaría usar para cifrar / descifrar un texto corto (16 caracteres).

  • La condición principal es: el texto cifrado debe ser lo más corto posible.
  • La longitud mínima del texto cifrado es más un evento más importante que la seguridad total. El atacante no podrá elegir texto sin formato.

Pregunta: ¿Existe algún método que permita crear un breve texto cifrado utilizando la clave privada RSA?

EDITAR: Lo que realmente quiero es estar seguro de que el texto no se ha cambiado y que realmente proviene de la aplicación. La solución típica sería - firmar el texto. Pero la firma RSA habitual sería demasiado larga para ingresar a los clientes móviles, donde implementaría este sistema.

Mi idea fue cifrar un texto conocido con una clave privada, para que pueda ser descifrado con una clave pública. Esto proporcionaría suficiente seguridad para confiar, que el texto cifrado proviene de la base, ya que necesita la clave privada para el cifrado.

Ventaja: solo necesita ingresar una cadena corta de texto cifrado para validar el cifrado, asumiendo que puedo encontrar un método de cifrado que pueda preservar la longitud del texto después del cifrado.

    
pregunta Skip 11.07.2013 - 09:24
fuente

1 respuesta

5

"Cifrar con la clave privada, para que se descifre con la clave pública": esta es una analogía defectuosa, por la cual se describieron las firmas RSA por primera vez, pero incluso con RSA no funciona.

Lo que quieres es realmente un algoritmo de firma, como quieras llamarlo. Es posible definir algoritmos de firma basados en la operación principal de RSA, y se ha realizado, y se llama RSA. Cualquier cosa que se basa en RSA implicará algunas exponenciaciones modulares que funcionen y produzcan grandes enteros del mismo tamaño que el módulo. Por lo tanto, una firma basada en RSA con una clave RSA que tenga ese nombre (es decir, al menos 1024 bits) incluirá necesariamente un entero de 1024 bits, por lo que su tamaño no será inferior a 128 bytes.

Hay un posible giro en que RSA es un algoritmo de firma "con recuperación": aunque la firma tendrá un tamaño de al menos 128 bytes, es posible incrustar algunos datos adicionales (parte del mensaje que se firma) . Hay una norma llamada ISO 9796-2 que hace eso; tiene algunas deficiencias pero se puede utilizar. Sin embargo, aunque este estándar hará que el total de gastos generales de firma sea bastante pequeño, no le gustará, porque desea limitar el tamaño de a lo que ingresa un usuario humano . Los beneficios de ISO 9796-2 son para mensajes largos.

Los algoritmos que producen firmas cortas son un área de investigación activa. En términos generales, si se dirige a un nivel de seguridad de n bits (lo que significa: un atacante tendría que invertir en un esfuerzo computacional de tamaño 2n para poder producir una firma falsa, pero el esfuerzo posiblemente le permita producir millones de firmas falsas por el mismo costo):

  • Con DSA y derivados (por ejemplo, ECDSA), el tamaño de la firma es 4n bits.
  • Con BLS , el tamaño de la firma es 2n bits (pero el Las matemáticas son difíciles de entender y aún no existe un estándar).
  • Hay un mínimo teórico absoluto de n bits.
  • No conocemos buenos algoritmos entre los bits n y 2n , aunque conocemos algunos de seguridad cuestionable .

Sin embargo, es posible que puedas solucionarlo cambiando los modelos. Los algoritmos de firmas están diseñados para una cosa: permitir que alguien verifique una firma sin darle el poder de producir firmas. Dependiendo de su contexto exacto, es posible que realmente no necesite esta separación de roles. Tal vez no sea un problema si quien verifica una "firma" podría crear firmas por su cuenta. Si ese es el caso, entonces puede usar un MAC que puede ser considerablemente más corto (por ejemplo, 32 bits podrían ser suficientes en su caso) y también mucho más fácil de implementar (sugerencia: use HMAC / SHA-256 y trunque al tamaño deseado).

    
respondido por el Thomas Pornin 11.07.2013 - 16:31
fuente

Lea otras preguntas en las etiquetas