Domanda

Mi chiedevo se qualcuno sa di un modo per deterministicamente crittografare un valore in Ruby utilizza un algoritmo di crittografia asimmetrica.

Per la maggior parte dei casi d'uso di uno solo interessa che quando si esegue la crittografia 'A' si torna 'A' quando decifrare, che è che non interessa il valore crittografato stesso. Si preoccupano solo il pieno di andata e ritorno.

Tuttavia, per un'applicazione che sto sviluppando ho davvero bisogno l'uscita di essere deterministico. Cioè, ho bisogno di qualcosa di cifrare con RSA senza imbottitura variabile.

Quando si tenta di crittografare un valore con OpenSSL::PKey::RSA::NO_PADDING viene restituito un errore:

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

Qualcuno ha un'idea su come posso ottenere un valore crittografato deterministico utilizzando RSA?

Con i migliori saluti,

DBA

È stato utile?

Soluzione

Questo errore deriva da cripto / 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);
    }

Chiamato da 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);

Il flen è un messaggio len; e il tlen è da: num=BN_num_bytes(rsa->n);

Quindi, è necessario i dati hanno la stessa lunghezza di byte come parametro N di chiavi RSA

Inoltre, che ne so, i suoi dati deve essere più piccolo di N (se considerato come numero unico lungo lungo lungo binario)

Altri suggerimenti

Si può eseguire l'imbottitura per la lunghezza della chiave appropriata da soli con i dati non casuali

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top