Pregunta

Me preguntaba si alguien sabe de una manera de forma determinista cifrar un valor en Ruby utilizando un algoritmo de cifrado asimétrico.

Para la mayoría de los casos de uso de uno sólo se preocupa de que al cifrar 'A' a volver 'A' cuando descifrarlo, es decir que no se preocupan por el valor cifrado en sí. Sólo se preocupan por la ida y vuelta completa.

Sin embargo, para una aplicación que estoy desarrollando realmente necesito que la salida sea determinista. Es decir, necesito algo cifrar con RSA sin un acolchado variable.

Cuando intento para cifrar un valor con OpenSSL::PKey::RSA::NO_PADDING se devuelve un error:

OpenSSL::PKey::RSAError Exception: data too small for key size

Cualquier persona tiene una idea sobre cómo puedo obtener un valor cifrado determinista utilizando RSA?

Saludos,

DBA

¿Fue útil?

Solución

Este error proviene de crypto / RSA / rsa_none.c

int RSA_padding_add_none(unsigned char *to, int tlen,
    const unsigned char *from, int flen)
    {
    if (flen > tlen)
            {
            RSAerr(RSA_F_RSA_PADDING_ADD_NONE,RSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE);
            return(0);
            }

    if (flen < tlen)
            {
            RSAerr(RSA_F_RSA_PADDING_ADD_NONE,RSA_R_DATA_TOO_SMALL_FOR_KEY_SIZE);
            return(0);
            }

    memcpy(to,from,(unsigned int)flen);
    return(1);
    }

Llamado de rypto / RSA / rsa_eay.c

static int RSA_eay_public_encrypt(int flen, const unsigned char *from,
         unsigned char *to, RSA *rsa, int padding)
...
               i=RSA_padding_add_none(buf,num,from,flen);

El flen es un mensaje len; y la tlen es de: num=BN_num_bytes(rsa->n);

Por lo tanto, necesita que sus datos tienen la misma longitud en bytes como su parámetro de clave RSA N

Además, que yo sepa, los datos debe ser menor que N (si es considerado como un solo número de largo tiempo de duración binario)

Otros consejos

Se podría realizar el relleno a la longitud de la clave apropiada para su caso con datos no aleatorios

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top