Асимметричное детерминированное шифрование (RSA) с Ruby - PullRequest
4 голосов
/ 18 декабря 2010

Мне было интересно, знает ли кто-нибудь о способе детерминированного шифрования значения в Ruby с использованием алгоритма асимметричного шифрования.

Для большинства случаев использования важно только, чтобы при шифровании «A» вы получали «A»назад, когда вы расшифровываете, то есть вам не важно само зашифрованное значение.Вы заботитесь только о полной передаче туда и обратно.

Однако для приложения, которое я разрабатываю, мне действительно нужен вывод, чтобы быть детерминированным.То есть мне нужно что-то зашифровать с помощью RSA без заполнения переменной.

Когда я пытаюсь зашифровать значение с помощью OpenSSL::PKey::RSA::NO_PADDING, возвращается ошибка:

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

У кого-то есть идеяо том, как я могу получить детерминированное зашифрованное значение с использованием RSA?

С уважением,

DBA

Ответы [ 2 ]

2 голосов
/ 18 декабря 2010

Вы можете выполнить заполнение до соответствующей длины ключа самостоятельно с неслучайными данными

1 голос
/ 18 декабря 2010

Эта ошибка происходит от 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);
    }

Вызывается из 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);

flen - это сообщение len;tlen от: num=BN_num_bytes(rsa->n);

Итак, Ваши данные должны иметь ту же длину байта, что и параметр N ключа RSA

ТакжеНасколько я знаю, ваши данные должны быть меньше N (если рассматривать как одно длинное-длинное-длинное двоичное число)

...