Асимметричное детерминированное шифрование (RSA) с помощью Ruby
-
11-10-2019 - |
Вопрос
Мне было интересно, знает ли кто-нибудь способ детерминированного шифрования значения в Ruby с использованием асимметричного алгоритма шифрования.
Для большинства вариантов использования важно только то, что когда вы шифруете 'A', вы получаете 'A' обратно при его расшифровке, то есть вас не волнует само зашифрованное значение.Вас интересует только полная поездка туда и обратно.
Однако для приложения, которое я разрабатываю, мне действительно нужно, чтобы выходные данные были детерминированными.То есть мне нужно зашифровать что-то с помощью RSA без заполнения переменной.
Когда я пытаюсь зашифровать значение с помощью OpenSSL::PKey::RSA::NO_PADDING
возвращается сообщение об ошибке:
OpenSSL::PKey::RSAError Exception: data too small for key size
У кого-нибудь есть идея о том, как я могу получить детерминированное зашифрованное значение с помощью RSA?
С наилучшими пожеланиями,
ДБА
Решение
Эта ошибка возникает из-за криптография/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
это сообщение, лен;и тот tlen
находится от: num=BN_num_bytes(rsa->n);
Итак, Вам нужно, чтобы ваши данные имели ту же длину в байтах, что и ваши N
параметр ключа RSA
Кроме того, как я знаю, ваши данные должны быть меньше N (если рассматривать их как одно длинное-длинное-длинное двоичное число).
Другие советы
Вы можете выполнить прокладку до соответствующей длины ключа сами с помощью нелуряющих данных