Openssl, RSA: почему открытый ключ требуется для private_decrypt? - PullRequest
0 голосов
/ 13 января 2019

Я использую библиотеку Openssl, чтобы обеспечить шифрование-дешифрование RSA для моего приложения. И вот что я нашел:

 int RSA_private_decrypt(int flen, unsigned char *from,
                         unsigned char *to, RSA *rsa, int padding);

RSA_private_decrypt () расшифровывает байты flen в из , используя закрытый ключ rsa , и сохраняет открытый текст в - . (Из документов https://www.openssl.org/docs/man1.1.1/man3/RSA_private_decrypt.html)

Для настройки структуры RSA я использую следующий метод:

int RSA_set0_key(RSA *r, BIGNUM *n, BIGNUM *e, BIGNUM *d);

Значения параметров n , e и d можно задать, вызвав RSA_set0_key () и передав новые значения для n , e и d в качестве параметров функции. Значения n и e должны быть ненулевыми при первом вызове этой функции для данного объекта RSA. Значение d может быть равно NULL. (из документов https://www.openssl.org/docs/man1.1.1/man3/RSA_set0_key.html)

Итак, когда я использую вышеприведенный материал для дешифрования , как описано, все работает нормально. Я устанавливаю RSA struct с n, e и d, затем передаю RSA struct private_decrypt() с другими параметрами и получаю правильный результат.

Но если я сделаю not , установите e в RSA struct (или установите для нее случайное значение, чтобы избежать ограничения ненулевого значения), private_decrypt() возвращает неверный результат дешифрования (обычно все нули) .

Так почему же требуется частная расшифровка? Поскольку алгоритм RSA работает, должно быть достаточно иметь n, d и cipher_text, чтобы обеспечить правильный результат, не так ли?

...