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